OSGi客户端尝试连接到GF4。在maven中我添加了gf-client-module 4.我看到已经安装了bundle glassfish-naming-4.0.jar。
所以在Activator中我有。
ClassLoader thatLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
try {
Properties jndiProps = new Properties();
jndiProps.put("java.naming.factory.initial", "com.sun.enterprise.naming.impl.SerialInitContextFactory");
jndiProps.put("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
jndiProps.put("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");
jndiProps.setProperty("org.omg.CORBA.ORBInitialHost", "x.x.x.x");
jndiProps.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(jndiProps);
} finally {
Thread.currentThread().setContextClassLoader(thatLoader);
}
这就是我得到的
javax.naming.NoInitialContextException:无法实例化类: com.sun.enterprise.naming.SerialInitContextFactory [根异常是 抛出java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
如何修复? Bundle glassfish-naming-4.0.jar里面有Activator。我应该开始这个捆绑吗?我试过但得到了未解决的约束异常。
解决方案SerialInitContextFactory not found in glassfish naming没有帮助。
答案 0 :(得分:2)
我找到了解决方案。据我所知,glassfish命名,gf-client-module和其他osgi包都是属于glassfish的包!如果我想使用gf-client,我必须这样做:
1)将as-install / lib / gf-client.jar文件复制到客户端计算机并 将它包含在客户端的类路径中。
gf-client.jar文件引用了GlassFish Server JAR文件 MANIFEST.MF文件。如果没有安装GlassFish Server 客户端计算机, 2)您还必须将as-install / modules目录复制到 客户端机器并维护其相对于的目录结构 as-install / lib / gf-client.jar文件。或者你可以使用 package-appclient脚本;请参阅使用package-appclient脚本。
这是http://docs.oracle.com/cd/E18930_01/html/821-2418/gkusn.html
答案 1 :(得分:0)
您需要使com.sun.enterprise.naming.SerialInitContextFactory可用于捆绑类加载器。确保在捆绑包的清单中有一个Import-Package:com.sun.enterprise.naming。
如果你使用maven bundle插件,它会自动找出大多数导入。在这种情况下,虽然该类仅作为String给出,因此它不会看到它。另一种方法是使用class.getName而不是String,如下所示:com.sun.enterprise.naming.impl.SerialInitContextFactory.class.getName()
顺便说一下。这同样适用于com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl