1

私は多耳プロジェクトを持っています。一部の EJB は project1.ear にあり、project2.ear で使用する必要があります。

私は次のことを試しています:

@Remote
public interface MyService {

    public static final String JNDI_NAME = "service/MyService"; 

    // methods

}


@Stateless(name = MyService.JNDI_NAME, mappedName = MyService.JNDI_NAME)
public class MyServiceImpl implements MyService {
   // implementations...
}

次に、いくつかの project2.ear クラスで、次のように EJB を挿入します。

@Stateless(name = "other/Service")
public class OtherServiceImpl implements OtherService{

    @EJB(mappedName = MyService.JNDI_NAME)
    private MyService service;
}

しかし、次の原因で、多くの「FailedToConstructException」と EJB 関連の例外が発生しました。

Caused by: javax.naming.NameNotFoundException: service/MyService -- service jboss.naming.context.java.service.MyService
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178)
    at org.jboss.as.naming.InitialContext.lookup(InitialContext.java:113)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:214)
    at javax.naming.InitialContext.lookup(InitialContext.java:411) [rt.jar:1.7.0_05]
    at org.jboss.as.ejb3.deployment.processors.EjbLookupInjectionSource$1.getReference(EjbLookupInjectionSource.java:82) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
    ... 104 more

私は何を間違っていますか?

前もって感謝します。

4

1 に答える 1

1

JNDI ツリーを参照して、service/MyService存在するかどうかを確認してください。JBoss 6 を使用している場合は、こちらで手順を確認できます。彼らがそれをより高いバージョンに追加したかどうかはわかりません。

次に、パッケージを確認します。インターフェイスMyServiceは両方の耳で同じパッケージに含まれている必要があります。そうでない場合、ルックアップは失敗します。

最後に、注釈にと の両方namemappedName属性を含める必要はなく、十分です。属性なしでアノテーションを挿入することもできます。 project1.ear がそのインターフェースを実装する唯一のものである場合、アプリケーション サーバーはそれを挿入します。@StatelessmappedNameMyService@EJB

@EJB
private MyService service;
于 2012-12-11T08:31:59.883 に答える