Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Liferay Serivce Builder: Not able to run dynamic query

I have two plugin portlets. First has service builder with all entities. Second portlet is using service's jar file to execute Dynamic query.

I am using first's service jar in my second plugin portlet to interact with database. But in this jar file there is not any Impl class. Thats why i am getting error Impl Class not found. Below is for reference:

DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(XXX.class,
PortletClassLoaderUtil.getClassLoader());
try {
    XXXLocalServiceUtil.dynamicQuery(dynamicQuery);
} catch (SystemException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
}

Error: [DynamicQueryFactoryImpl:96] Unable find model com.compass.model.impl.XXXImpl java.lang.ClassNotFoundException: com.compass.model.impl.XXXImpl

Nomal Functions are working fine of service builder

like image 208
Varun Arya Avatar asked Mar 28 '17 10:03

Varun Arya


1 Answers

just don't use the DynamicQueryFactoryUtil but the XXXLocalServiceUtil this way

DynamicQuery dynamicQuery = XXXLocalServiceUtil.dynamicQuery() 
try {
    XXXLocalServiceUtil.dynamicQuery(dynamicQuery);
} catch (SystemException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
}

If you want to use the factory you have to use the interface model not the impl of the entity so if you have an entity FooImpl sue the Foo.class and use the classloder of you service plugin portlet

Classloader cl =(ClassLoader) PortletBeanLocatorUtil.locate("services-portlet", "portletClassLoader");
DynamicQueryFactoryUtil.forClass(XXX.class, cl);
like image 109
Romeo Sheshi Avatar answered Dec 06 '22 05:12

Romeo Sheshi