0

私は netbeans IDE 7.1.2 を使用しており、EJB 3.1 ステートレス Bean を作成し、リモート インターフェイスとローカル インターフェイスの両方を実装し、それを Glassfish サーバー 3.2.1 に正常にデプロイしました...これがコードです

__ _ __ _ _ __ _ _ __ _ __ CaseInfo.java _ __ _ __ _ _ _ _ __ _ __ _ _ _

enter code here

package maxx;

import javax.ejb.Stateless;

@Stateless(name="CaseInfo",mappedName="CaseInfoBean")
public class CaseInfo implements CaseInfoRemote, CaseInfoLocal {

@Override
public String MyCaseMessageLocal() {
    return "Hello this is my Local message.";
}

@Override
public String MyCaseMessageRemote() {
    return "Hello this is my Remote message.Please Note that this message is comming from the remote";
}

}

__ _ __ _ _ __ _ _ __ _ CaseInfoLocal.java _ __ _ _ __ _ _ __ _ __ _ _ _ _

package maxx;

import javax.ejb.Local;

@Local
public interface CaseInfoLocal {

String MyCaseMessageLocal();

}

__ _ __ _ _ __ _ _ _ __ CaseInfoRemote.java _ __ _ _ __ _ _ __ _ __ _ _ _

package maxx;

import javax.ejb.Remote;

@Remote
public interface CaseInfoRemote {

String MyCaseMessageRemote();

}


今、私はローカルから正常にアクセスしました。その後、新しいプロジェクト> Java EE>アプリケーションクライアントプロジェクトを作成しました。これはデスクトップアプリであり、Beanモジュールのjarファイルをライブラリにクライアントスタブとして追加することで、そのBeanに正常にアクセスしましたここにいくつかのコードがあります

__ _ __ _ _ __ _ _ __ _ _ Main.java _ __ _ _ __ _ _ __ _ __ _ __ _ _ _ _

package applicationclient;

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import maxx.CaseInfoRemote;

public class Main {


public static void main(String arg[]) {

    try {
Properties prop = new Properties();
prop.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                          "com.sun.enterprise.naming.SerialInitContextFactory");
prop.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
prop.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 

        InitialContext ic = new InitialContext(prop);
        Object ref = ic.lookup("CaseInfoBean");
        CaseInfoRemote home = (CaseInfoRemote)PortableRemoteObject.narrow(ref,
                CaseInfoRemote.class);
        System.out.println(home.MyCaseMessageRemote());

    } catch(Exception e) {
        e.printStackTrace();
    }
}
}

しかし、このクライアント アクセス コードを使用している場合は、[新しいプロジェクト] > [Java] > [Java アプリケーション] に移動し、ここに同じコードを記述します。

__ _ __ _ _ __ _ _ __ _ ____エラー_ __ _ _ __ _ _ __ _ __ _ _ _ _ _ _ _ _

run:
javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is  java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:674)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
at javax.naming.InitialContext.init(InitialContext.java:242)
at javax.naming.InitialContext.<init>(InitialContext.java:216)
at testcasebean.TestCaseBean.main(TestCaseBean.java:30)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:63)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671)
    ... 4 more
BUILD SUCCESSFUL (total time: 0 seconds)

コードのプロパティ行を削除すると、このタイプのエラーが発生します

実行: javax.naming.NoInitialContextException: 環境またはシステム プロパティで、またはアプレット パラメータとして、またはアプリケーション リソース ファイルでクラス名を指定する必要があります:

java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:344)
    at javax.naming.InitialContext.lookup(InitialContext.java:411)
    at testcasebean.TestCaseBean.main(TestCaseBean.java:27)
BUILD SUCCESSFUL (total time: 0 seconds)

シンプルな Java デスクトップ アプリケーションを使用してこの Bean にアクセスする方法を教えてください。Java EE アプリケーション クライアントを使用しても問題はありませんが、同じコードでこれらのエラーが発生するためです。

4

1 に答える 1

1

スタンドアロンのJava クライアントから、GlassFish サーバーにデプロイされたリモート EJB にアクセスする方法の指示に従っていない可能性があります。それは完全に些細なことではありません。

これはあなたの質問に答えるはずです。一般に、欠落しているのはgf-client.jarクラスパス内のファイルであると思われます。指示に従って、私たちに知らせてください:

http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB

于 2012-11-23T01:40:35.293 に答える