简体   繁体   English

Glassfish JNDI InitialContext

[英]Glassfish JNDI InitialContext

I'm working on a project where I'm trying to connect to Glassfish EJB but I have a problem. 我正在一个项目中尝试连接到Glassfish EJB,但是遇到问题。

When doing the following: 执行以下操作时:

    Properties props = new Properties();
    this.url = "10.128.128.135";
    props.setProperty("org.omg.CORBA.ORBInitialHost", this.url);
    props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
    final Context context = new InitialContext(props);
    this.userEJB = (UserEJB) context.lookup("ejb/User#com.xxxx.xxxxx.ejb.UserEJB");
    LoggerFactory.getLogger(this.getClass()).info("EJB client initialized with url: " + url);

i get this exception: 我得到这个例外:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:350)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at com.xxxxx.xxxx.gwt.server.delegate.UserDelegate.<init>(UserDelegate.java:47)
at com.xxxxx.xxxx.gwt.server.rpc.LoginServiceImpl.<clinit>(LoginServiceImpl.java:36)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at java.lang.Class.newInstance(Class.java:433)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097)
at com.xxxxx.xxxx.gwt.MyHeadersFilter.doFilter(MyHeadersFilter.java:28)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

After that i tried adding the following props as well: 之后,我还尝试添加以下道具:

props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");

and then i get another exception instead: 然后我得到另一个异常:

java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:347)
at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:354)
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:384)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:329)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:477)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at com.xxxxx.xxxx.gwt.server.delegate.UserDelegate.<init>(UserDelegate.java:46)
at com.xxxxx.xxxx.gwt.server.rpc.LoginServiceImpl.<clinit>(LoginServiceImpl.java:36)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at java.lang.Class.newInstance(Class.java:433)
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097)
at com.xxxxx.xxxx.gwt.MyHeadersFilter.doFilter(MyHeadersFilter.java:28)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

So how do I lookup my EJB? 那么,如何查找我的EJB?

You should make sure that you have registered the ejb resource in the glassfish administration console localhost\\4848 您应该确保已在glassfish管理控制台localhost \\ 4848中注册了ejb资源。

You can access the admin console on netbeans by selecting the services tab -- servers-- right click glassfish--choose start admin console. 您可以通过选择服务选项卡-服务器-右键单击glassfish-选择启动管理控制台来访问netbeans上的管理控制台。

Check that the EJB is registered in the server. 检查EJB是否已在服务器中注册。

Also look up resource injection for further information on how to access resources from java applications. 还要查找资源注入,以获取有关如何从Java应用程序访问资源的更多信息。

I hope this is helpful. 我希望这是有帮助的。

Please post your code next time. 请下次发布您的代码。

It was a problem with GWT classpath. 这是GWT类路径的问题。 Deploying the application works fine, and now i have fixed the GWT project by removing the jars from the GWT classpath and letting the application find them on its own. 部署该应用程序的工作正常,现在,我已通过从GWT类路径中删除jar并让应用程序自行找到它们来修复GWT项目。 Eg: 例如:

[WARN] Server class 'com.google.gwt.user.client.rpc.RemoteService' could not be found in the web app, but was found on the system classpath
   [WARN] Adding classpath entry 'file:/Users/linde/.m2/repository/com/google/gwt/gwt-servlet/2.5.1/gwt-servlet-2.5.1.jar' to the web app classpath for this session

Now both dev mode and deploy works. 现在,开发模式和部署均可工作。 Although remote debug(eg set up GWT dev mode running and connect from a remote computer) doesn't work and gives me a weird error. 尽管远程调试(例如,设置GWT开发人员模式运行并从远程计算机连接)不起作用,但给了我一个奇怪的错误。 Maybe this is a bug in GWT 2.5.1. 也许这是GWT 2.5.1中的错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM