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);
}

Это работает для меня!!!!

Другие вопросы по тегам