4

耳にインターフェースのないejbをデプロイしています(MyEar.ear)

@Stateless
@LocalBean
public class MyService{
// stuff
}

耳はjboss-6.0.0.Finalにデプロイされます

サーバーのjmxコンソールからJNDI名を確認しました。

MyEar / MyService / no-interface

同じサーバー内の戦争(耳の外)で別のejbからこのejbを参照しようとしています:

@EJB(mappedName = "MyEar/MyService/no-interface")
private MyService myService;

Eclipseの戦争プロジェクトからearプロジェクトを参照していますが、コンパイルは成功しています。

戦争を展開すると、ClassNotFoundException例外が発生し続けます。

java.lang.ClassNotFoundException:eg.com.test.MyService

戦争中のejbがもう一方の耳からejbを見ないのはなぜですか?

編集:私は次のように更新しました

リモートインターフェース

@Remote
public interface MyServiceRemote{
// stuff
}

ejb

@Stateless
public class MyService implements MyServiceRemote{
// stuff
}

別のアプリケーションでのejbリファレンス

@EJB(mappedName = "MyEar/MyService/remote")
private MyServiceRemote myService;

サーバーで新しいJNDI名を確認しました:MyEar / MyService / remote

しかし、私はまだ同じ例外を受け取っています、今回はインターフェースが見つかりません:

java.lang.ClassNotFoundException:eg.com.test.MyServiceRemote

更新:リモートインターフェイスをwarにパッケージ化する必要がありましたが、現在は正しく機能しています。

4

2 に答える 2

2

そのEJBにはリモートインターフェースが必要であり、外部WARからのリモートEJBと同じようにアクセスします。外部WARにはEARとは別のクラスローダーがあるため、EARクラスは見つかりません。

于 2012-06-05T11:20:05.973 に答える
0

EJB 3.1ポータブル命名形式を使用して別のアプリケーションでEJBを参照するには、完全修飾名を使用する必要があります。

java:global/[<application-name>]/<module-name>/<bean-name>!<fully-qualified-bean-interface-name>
于 2012-06-05T23:08:13.127 に答える