使用端口号为3700glashfish Server的JNDI从客户端访问EJB 3.1



我使用的是netbeans IDE 7.1.2,我创建了一个EJB 3.1无状态Bean,并实现了远程和本地接口,并将其成功部署到glassfish服务器3.2.1。。。这是代码

_______________________案例信息.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();
}

_______________案例信息远程.java_

package maxx;
import javax.ejb.Remote;
@Remote
public interface CaseInfoRemote {
String MyCaseMessageRemote();
}


现在我已经成功地从本地访问了它,并且在创建它之后新项目>Java EE>应用程序客户端项目,这是一个桌面应用程序共享,我已经通过将bean模块的jar文件添加到其库中作为客户端成功访问了该bean。Stub这里是一些代码

__________________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应用程序,并在这里编写相同的代码,因此问题显示

____________________>错误_______ em>_

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应用程序客户端没有问题,但相同的代码给出了这些错误

您可能没有按照说明从独立Java客户端访问部署在GlassFish服务器上的远程EJB。这并不完全是小事。

这应该能回答你的问题。通常,我怀疑您缺少的是类路径中的gf-client.jar文件。按照说明并告知我们:

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

最新更新