Glassfish3.1.2を使用してnetbeansAPI上でアプリケーションを開発しています。私のnetbeansアプリケーションは、EJBに接続する必要があるスタンドアロンのJavaクライアントであると想定されています。
EJBをEAR(エンタープライズアプリケーション)にパッケージ化しました。私が直面している問題は、使用可能なEJBを検索しようとしたときに例外が発生したことです。
これが私のBeanセッションです。
@Stateless
@EJB(name = "java:global/AltServer", beanInterface = AltServerRemote.class)
public class AltServer implements AltServerRemote {
リモートインターフェース:
@Remote
public interface AltServerRemote {
そして最後にルックアップ呼び出し:
props.setProperty("org.omg.CORBA.ORBInitialHost", getGlassfishHostname());
props.setProperty("org.omg.CORBA.ORBInitialPort", getServerPort());
ctx = new InitialContext(props)
ctx.lookup("java:global/AltServerEnt/AltServer-ejb/AltServer")
EARにパッケージ化されたEJBをルックアップする方法について、私はこれに従いました:http: //glassfish.java.net/javaee5/ejb/EJB_FAQ.html#CosNamingそしてjndi構文を見つけます:
java:global[/<app-name>]/<module-name>/<bean-name>
したがって、私の場合、エンタープライズアプリケーションはAltServerEntであり、EJBモジュールはAltServer-ejbであり、セッションBeanはAltServerと呼ばれます(上記を参照)。
注:セッションBeanに@EJBアノテーションを使用して、上記のリンク先のFAQで説明されているような名前を指定しましたが、EJBがEARの一部である場合に適しているかどうかはわかりません。誰か知ってる?
そして、ここで私が得た例外は、ルックアップの行で発生しました:
java.lang.ClassNotFoundException: com.sun.ejb.codegen.GenericEJBHome_Generated
「Caused」句はたくさんありますが、最初の句は次のとおりです。
javax.naming.NamingException: Lookup failed for 'java:global/AltServerEnt/AltServer-ejb/AltServer' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=127.0.0.1, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: ejb ref resolution error for remote business interfaceorg.altanis.remote.AltServerRemote [Root exception is java.lang.RuntimeException: Could not invoke defineClass!]]
だから私のセッションBeanが見つからないと思いますが、なぜですか?私のJNDI構文は正しくありませんか?
編集:私のプロジェクト組織に注意してください:
- AltServerEnt:エンタープライズアプリケーション-EJBモジュールが含まれています
- AltServer-ejb:EJBモジュール-セッションBeanが含まれ、リモートインターフェイス(AltServerRemote)を含むnetbeansプラグインが含まれます。
読んでくれてありがとう。