1

私はEJBの初心者です。

次のフィールドを持つクラスがあります

@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyServiceFacadeBean implements MyServiceFacadeLocal, MyServiceFacadeRemote {

    @EJB(name = "ejb/CatalogService")
    private CatalogService catalogService = null;
    ....
}

Sring IOCに実装を注入しながら、オブジェクトをインスタンス化しました。

<bean id="contestServiceFacade" class="my.company.service.facade.contest.ejb.MyServiceFacadeBean">
 </bean>

しかし、コントローラーでメソッドを呼び出した後、 catalogServiceフィールドでNullPointerExceptionが発生します。では、ファサードを正しくインスタンス化するにはどうすればよいでしょうか。

更新1 :ここで尋ねられた別のアプローチでBeanをプラグインしようとしました。多分それはこの質問に答える間助けになるでしょう。

更新2:私のEJBのソースを変更することはできませんが、私のコントローラーに対しては変更できます。

4

3 に答える 3

1

JBoss 5 を使用している場合はEJB、戦争に参加することはできません。EJB jarおよびwarファイル (+ lib jar)を使用して ear ファイルを作成する必要があります。詳細についてearは、JavaEE チュートリアル ( http://docs.oracle.com/javaee/5/tutorial/doc/bnaby.html ) を参照してください。

EJB が ear に正しくパッケージ化されている場合、デプロイ時に Jboss によって開始されます。

ここで説明するように、Spring は JDNI 経由でそれらにアクセスできます: http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/ejb.html

もう 1 つのオプションは、Jboss 7 に切り替えることEJBですwar。しかし、Jboss 7 では多くのことが変更されるため、これには多少の努力が必要です。

于 2012-12-10T17:31:27.293 に答える
0

Spring で EJB にプロパティを注入する場合は、クラスで Interceptor を使用する必要があります。

@Interceptors(SpringBeanAutowiringInterceptor.class)
public class MyServiceFacadeBean ... {

        @Autowired
        private CatalogService catalogService;

        ...
}
于 2012-12-11T12:42:51.713 に答える
0

EJB と Spring Bean を混在させています。アノテーション @EJB は、Spring Bean ではなくエンタープライズ Java Bean を取得するためのものです。
@Autowired アノテーションに変更するか、CatalogService を EJB に変更して (クラスに正しい EJB アノテーションを使用)、

<context:component-scan base-package="com.foo" />

xml ファイルで。

また、Glassfish、JBoss などの EJB をサポートするコンテナが必要になることに注意してください (Tomcat はサポートされていません)。

于 2012-12-12T08:58:04.747 に答える