2017-03-28 7 views
2

2つのプラグインポートレットがあります。まず、すべてのエンティティを持つサービスビルダーがあります。 2番目のポートレットは、サービスのjarファイルを使用して動的問合せを実行しています。Liferay Serivce Builder:動的クエリを実行できません

データベースと対話するために、2番目のプラグインポートレットで最初のサービス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

Nomal機能だけDynamicQueryFactoryUtilが、XXXLocalServiceUtilをこのように使用していないサービスビルダー

+0

スレッドを閉じます。 –

答えて

3

の罰金を働いている

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

あなたが工場を使用したい場合、あなたはエンティティFooImplを持っているので、もしエンティティのIMPLをインタフェースモデルをない使用する必要がFOO.CLASSを告訴し、プラグイン、あなたのサービスのclassloderを使用したポートレット

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

OR

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

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

おかげ@Romeo。

関連する問題