2013-09-17 1 views
0

Я создал портлет, я сгенерировал сервис .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(); 
     } 
} 

Спасибо!

+1

Вы можете оставить функцию о вызове? –

+0

Я надеюсь, что вы также развернули портлет, который содержит 'RuleLocalServiceImpl', и перед развертыванием вы решили удалить * service.jar из' WEB-INF/lib' портлета. :-) –

+0

Да, я развертываю портлет, останавливаю tomcat, перемещаю .jar в/lub/ext, перезагружаю tomcat и разворачиваю hook. – sandra

ответ

0

Ниже приведены возможности, которые могут создать ошибку, размещенную в порядке вероятности.

  1. getActiveRole не является статическим методом класса RuleLocalServiceImpl и вы вызываете его в статическом контексте, и это тоже в меня
  2. Предполагая, что выше, не является проблемой, могут существовать различные версии Date т.е. java.util.Date и java.sql.Date в объявлении метода и вызове метода.