Я создал портлет, я сгенерировал сервис .jar
и переместил его на /tomcat/lib/ext
. Затем я создал крючок, который использует тот же BD. Но когда я пытаюсь сделать «DynamicQuery» на крючке, это не работает, я пытаюсь создать новую функцию в RuleLocalServiceImpl.java
, сгенерировать снова .jar
и переместить его на /tomcat/lib/ext
. Но это не работает, когда я пытаюсь выполнить у меня есть эта ошибка:java.lang.NoSuchMethodError в сервисе Liferay
java.lang.NoSuchMethodError: com.segmentationPortlet.service.RuleLocalServiceUtil.getActiveRule(Ljava/util/Date;)Ljava/util/List;
Это де код функции:
public class RuleLocalServiceImpl extends RuleLocalServiceBaseImpl {
/*
* NOTE FOR DEVELOPERS:
*
* Never reference this interface directly. Always use {@link com.segmentationPortlet.service.RuleLocalServiceUtil} to access the rule local service.
*/
public List<Rule> getActiveRule(Date lastLogin) throws SystemException {
DynamicQuery dq_rules = DynamicQueryFactoryUtil.forClass(Rule.class, PortalClassLoaderUtil.getClassLoader())
.add(PropertyFactoryUtil.forName("modifiedDate").ge(lastLogin))
.add(PropertyFactoryUtil.forName("status").eq(true));
List<Rule> listRules = RuleLocalServiceUtil.dynamicQuery(dq_rules);
return listRules;
}
}
Я попытался остановить кота, удалить .jar и создать снова, но не работают.
Это код крючке:
package com.segmentationProjecthookLogin.hook;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.liferay.portal.PortalException;
import com.liferay.portal.SystemException;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.events.Action;
import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
import com.liferay.portal.model.User;
import com.liferay.portal.util.PortalUtil;
import com.segmentationPortlet.model.ConditionsRule;
import com.segmentationPortlet.model.Rule;
import com.segmentationPortlet.service.ConditionsRuleLocalServiceUtil;
import com.segmentationPortlet.service.RuleLocalServiceUtil;
public class LoginAction extends Action {
private static boolean isVelocityEngineStarted = false;
public void run(HttpServletRequest req, HttpServletResponse res) {
System.out.println("Login");
User user;
try {
user = PortalUtil.getUser(req);
Date lastLogin = user.getLastLoginDate();
List<Rule> listRule = RuleLocalServiceUtil.getActiveRule(lastLogin);
System.out.println("Size " + listRule.size());
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (com.liferay.portal.kernel.exception.SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (com.liferay.portal.kernel.exception.PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Спасибо!
Вы можете оставить функцию о вызове? –
Я надеюсь, что вы также развернули портлет, который содержит 'RuleLocalServiceImpl', и перед развертыванием вы решили удалить * service.jar из' WEB-INF/lib' портлета. :-) –
Да, я развертываю портлет, останавливаю tomcat, перемещаю .jar в/lub/ext, перезагружаю tomcat и разворачиваю hook. – sandra