Liferay Serivce Builder: не удалось запустить динамический запрос
У меня есть два плагина портлетов. Во-первых, есть сервис-строитель со всеми сущностями. Второй портлет использует файл jar службы для выполнения динамического запроса.
Я использую jar службы first's во втором портлете плагина для взаимодействия с базой данных. Но в этом jar-файле нет ни одного класса Impl. Вот почему я получаю ошибку Impl Class не найден. Ниже для справки:
DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(XXX.class,
PortletClassLoaderUtil.getClassLoader());
try {
XXXLocalServiceUtil.dynamicQuery(dynamicQuery);
} catch (SystemException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Ошибка: [DynamicQueryFactoryImpl: 96] Невозможно найти модель com.compass.model.impl.XXXImpl java.lang.ClassNotFoundException: com.compass.model.impl.XXXImpl
Нормальные функции работают нормально из сервисного компоновщика
2 ответа
Просто не используйте DynamicQueryFactoryUtil, но XXXLocalServiceUtil таким образом
DynamicQuery dynamicQuery = XXXLocalServiceUtil.dynamicQuery()
try {
XXXLocalServiceUtil.dynamicQuery(dynamicQuery);
} catch (SystemException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Если вы хотите использовать фабрику, вы должны использовать модель интерфейса, а не подразумеваемую сущность, поэтому, если у вас есть сущность, FooImpl подаст в суд на Foo.class и использует classloder вашего портлета сервисного плагина
Classloader cl =(ClassLoader) PortletBeanLocatorUtil.locate("services-portlet", "portletClassLoader");
DynamicQueryFactoryUtil.forClass(XXX.class, cl);
У меня оба работают..
ClassLoader classLoader = (ClassLoader)PortletBeanLocatorUtil.locate(ClpSerializer.getServletContextName(), "portletClassLoader");
ИЛИ ЖЕ
ClassLoader classLoader = PortletBeanLocatorUtil.getBeanLocator(ClpSerializer.getServletContextName()).getClassLoader();
DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(charges.class,classLoader);
Спасибо @ Ромео.
public static void getuserList(){
DynamicQuery dynamicQuery = XXLocalServiceUtil.dynamicQuery();
System.out.println("dynamicQuery");
dynamicQuery.add(PropertyFactoryUtil.forName("field1").eq("field_name"));
List<XX> userList = XXLocalServiceUtil.dynamicQuery(dynamicQuery);
System.out.println(userList);
}
Это работает для меня!!!!