2017-03-28 7 views
2

두 개의 플러그인 포틀릿이 있습니다. 첫 번째는 모든 엔터티가있는 서비스 작성기입니다. 두 번째 포틀릿은 서비스의 jar 파일을 사용하여 동적 쿼리를 실행 중입니다.Liferay Serivce Builder : 동적 쿼리를 실행할 수 없습니다.

두 번째 플러그인 포틀릿에서 첫 번째 서비스 jar를 사용하여 데이터베이스와 상호 작용합니다. 그러나이 jar 파일에는 Impl 클래스가 없습니다. 그게 내가 왜 오류 Impl 클래스를 찾을 수 없습니다. 다음은 참조 용입니다 :

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

노멀 기능이 작동 벌금

+0

스레드를 닫습니다. –

답변

3

그냥 DynamicQueryFactoryUtil하지만 XXXLocalServiceUtil이 방법을 사용하지 않는

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

당신은 당신이 엔티티 FooImpl가 foo.class 위를 고소 당신의 서비스 플러그인 포틀릿

을 classloder을 사용 그래서 만약 당신이 인터페이스 모델이 아닌 기업의 IMPL를 사용할 필요가 공장을 사용하려면
Classloader cl =(ClassLoader) PortletBeanLocatorUtil.locate("services-portlet", "portletClassLoader"); 
DynamicQueryFactoryUtil.forClass(XXX.class, cl); 
+0

안녕하세요 @romeo, 내 XXX-service.jar에는 XXXImpl 클래스가 없습니다. 그것이 내가 오류를 얻는 이유입니다. –

+0

예를 들어 'java.lang.RuntimeException : java.lang.ClassNotFoundException is not valid exception'오류가 발생했습니다. –

+0

당신은 impl 클래스가 그 클래스의 인터페이스 만 필요로하지 않습니다. 당신은 서비스가 이런 방식으로 작동하는 impl에 접근 할 수 없다. –

1

나를 위해 두 작품 ..

ClassLoader classLoader = (ClassLoader)PortletBeanLocatorUtil.locate(ClpSerializer.getServletContextName(), "portletClassLoader");

또는

ClassLoader classLoader = PortletBeanLocatorUtil.getBeanLocator(ClpSerializer.getServletContextName()).getClassLoader();

DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(charges.class,classLoader);

감사 @Romeo.