今天我遇到了这个例外
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
... 23 more
我试图远程访问 ejb,有问题的代码是
Context c = new InitialContext();
我以前见过这个异常并修复它,但不记得我是如何做到的。我知道我必须为初始、上下文 url 和服务提供者或类似的东西设置一些环境变量。
事实上,我设法找到了上次我用来解决这个问题的代码,如下所示。
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
env.put(Context.PROVIDER_URL, "localhost:1099");
Context c = new InitialContext(env);
我的问题是,您如何找出要使用的初始上下文工厂?我已经为我们的数据库编写了一个在 glassfish v3 上运行的 ejb 模块,我从来没有得到任何暗示我当然应该使用 . com.sun.enterprise.naming.SerialInitContextFactory
,我的意思是它是如此明显。谁制造了这些上下文工厂?谁决定我必须使用哪一个,为什么?为什么没有一个列表显示不同目的需要哪一个?似乎有人竭尽全力以最难以理解和最神秘的方式访问人类可能的资源。或者我在这里完全误解了一些东西,或者我缺乏大量的知识。
我非常感谢对这个主题的一些启发。
谢谢你们。