0

「ECLocalDataService.java」クラスがあります。ServiceLocator.findService() を使用してすべてのポートレットと速度テンプレートからアクセスできるように、liferay ローカル サービスとして構築しようとしています。

私の ECLocalDataService は次のようなものです:

public interface ECDataLocalService {

    public java.lang.String getBeanIdentifier();


    public void setBeanIdentifier(java.lang.String beanIdentifier);

    @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
    public float getPriceBySKU(java.lang.String sku);
}

その実装クラスは次のようになります。

import com.rosettastone.service.base.ECDataLocalServiceBaseImpl;

public class ECDataLocalServiceImpl extends ECDataLocalServiceBaseImpl {

    public float getPriceBySKU(String sku) {
        float price = 125.99f; 
        return price;
    }

}

ECDataLocalService を service.xml に登録しました

<service-builder package-path="com.rosettastone">
    <author>rajeshp</author>
    <namespace>mycompany</namespace>

    <entity name="ECDataLocalService" local-service="true" remote-service="false" human-name="ECDataLocalService"></entity>

</service-builder>

この後、Liferay Dev Studio で「BuildServices」アイコンをクリックすると、NullPointer 例外がスローされます。どのオブジェクトに対して NullPointer が検出されたかは表示されず、エラー メッセージやログ メッセージも表示されず、NullPointerException が表示されるだけで、サービスは構築されません。

4

2 に答える 2

1
<entity name="ECDataLocalService" local-service="true" remote-service="false" human-name="ECDataLocalService"></entity>

現時点では、コード サンプルには <entity> 要素が 1 つしかありません。列がなく、主キー列も定義されていません。このような状況では、コード生成が機能しない可能性があります。

于 2012-04-04T20:57:45.457 に答える
0

build-services antタスクは、1つまたは複数のテーブルを定義するservice.xmlからサービスを構築するためのものです。次に、すべてのJavaコードが生成されます。最初にJavaファイルを作成する必要はありません。実際、それが機能するとは思いません。

私はこのLiferaywikiの記事を読みます、そしてそれはあなたをあなたの道に連れて行くはずです。

http://www.liferay.com/community/wiki/-/wiki/Main/Service+Builder

これから得られたサービスjarを取得したら、それをtomcatクラスパスに配置して、他のポートレットがサービスにアクセスできるようにします。

于 2011-12-28T17:44:34.093 に答える