私はJava EEを全く新しくしましたが(Java自体ではありません)、実際のUIフレームワークとしてJPAプロバイダとJSFとしてHibernateで非常に単純な「エンタープライズアプリケーション」を構築しようとしています。この目的のために、私はGlassFish 3.1でNetBeans 7を使用しています。EJBステートレスセッションBeanはどのようにしてWebモジュールに正しく挿入されるべきですか?
{}のApplicationName -ejb:私は、データベースからエンティティクラスと、これらのエンティティのためのローカルsesssion豆を生成するために達成してきました
。 Beans.xmlがインストールされています。
@Stateless
public class QuestFacade extends AbstractFacade<Quest> implements QuestFacadeLocal {
// some methods here as well as EntityManager injection ...
}
{}のApplicationName -war:
私は、JSFページのバッキングBeanとして簡単なPOJOを作成しました。私は[email protected]
と[email protected]
と注釈をつけました。このバッキングBeanは、実際のページにアクセスするときに注入されるだけでなく、JSFページからアクセスできるようになりました。 Beans.xmlも同様です。これが展開され、ページがアクセスした
@Named
@SessionScoped
public class QuestBean implements Serializable {
@EJB
protected QuestFacade questFacade;
// several methods delegating lookups to the questFacade ...
}
、私はQuestFacade
は、JNDIでルックアップすることができないというのGlassFishからエラーを取得して、しかし、です。
スタックトレースは非常に長いですが、最初の原因は十分に考えられます
Caused by: javax.naming.NamingException: Lookup failed for 'model.session.QuestFacade#model.session.QuestFacade' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming} [Root exception is javax.naming.NameNotFoundException: model.session.QuestFacade#model.session.QuestFacade not found]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.sun.ejb.EjbNamingReferenceManagerImpl.resolveEjbReference(EjbNamingReferenceManagerImpl.java:173)
... 74 more
Caused by: javax.naming.NameNotFoundException: model.session.QuestFacade#model.session.QuestFacade not found
at com.sun.enterprise.naming.impl.TransientContext.doLookup(TransientContext.java:248)
at com.sun.enterprise.naming.impl.TransientContext.lookup(TransientContext.java:215)
at com.sun.enterprise.naming.impl.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:77)
at com.sun.enterprise.naming.impl.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:119)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:505)
... 78 more
私は、同じアプリケーション内の異なるモジュールからのEJBを注入するのGlassFishを説得てることを理解しています。代わりに@Remote
インターフェイスを使用する必要がありますか?また、@Stateless
と@EJB
注釈の名前を明示的に指定しようとしましたが、成功しませんでした。
私は何か根本的に間違っていると信じていますが、何が見つかりませんか?
ご意見やご感想をお寄せください。
私は自分自身を助けることができましたが、私が私の答えで指摘したように、私はあなたの答えがより良いと思っています。ありがとう! – merxbj
うわー。ちょうど正確! – kuhajeyan