这个开始让我完全疯了…
我想使用Maven创建一个Glassfish客户端应用程序。
为此,我添加了必需的gf-client依赖项:
<dependency>
<groupId>org.glassfish.appclient</groupId>
<artifactId>gf-client</artifactId>
<version>3.1</version>
<type>pom</type>
<scope>compile</scope>
</dependency>
然后,想要联系运行在相同应用程序上的我的Glassfish服务器,我进行了常规查找:
Properties p = new Properties();
// optional. Defaults to localhost. Only needed if web server is running
// on a different host than the appserver
p.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
// optional. Defaults to 3700. Only needed if target orb port is not
// 3700.
p.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
Context context = new InitialContext(p);
// Stores the list of reachable EJBs
return context.lookup(interfacesToNames.getProperty(className));
不幸的是,这样做时,我得到的只是
Caused by: javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.impl.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com/sun/enterprise/naming/impl/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)
... 6 more
Caused by: java.lang.ClassNotFoundException: com/sun/enterprise/naming/impl/SerialInitContextFactory
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)
... 9 more
经过一番检查后,我注意到glassfish- naming-3.1.jar
该客户端应用程序的CLASSPATH中存在我的文件夹。并且,根据Eclipse代码查找,应该包含此jar
com.sun.enterprise.naming.impl.SerialInitContextFactory
。但是,如果处于调试模式,getClass().getClassLoader().getResource("com/sun/enterprise/naming/impl/SerialInitContextFactory")
则返回null,这清楚地表明找不到该类。
有关更多信息,请使用以下插件配置从我的本地Maven存储库复制JAR:
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>package output directory</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<prependGroupId>true</prependGroupId>
<includeScope>compile</includeScope>
<outputDirectory>${dependencies.outputDir}/jars</outputDirectory>
<prefix>${dependencies.outputDir}</prefix>
</configuration>
</execution>
</executions>
</plugin>
此外,我不得不承认,当使用相同的API运行简单的测试以连接到Glassfish服务器时,绝对没有问题,这使我想到了ClassLoader问题。
运行该客户端时,当前的类加载器为(由表示getClass().getClassLoader().getClass().getName()
)sun.misc.Launcher$AppClassLoader
。不幸的是,哪个与运行单元测试时完全相同。
那么,我该怎么做才能解决该错误?
EDIT 类存在于中glassfish-naming-3.1.jar
,但似乎无法通过标准类加载器找到。
编辑 一个有趣的发现:
getClass().getClassLoader().getResource("com/sun/enterprise/naming/impl") = jar:file:/C:/Users/pouet/pouet/target/jars/glassfish-naming-3.1.jar!/com/sun/enterprise/naming/impl
而
getClass().getClassLoader().getResource("com/sun/enterprise/naming/impl/SerialInitContextFactory") = null
由于我不完全了解的原因,在应用程序中运行时,有一个配置的Context类加载器。该类加载器似乎使用某种OSGi命名限制。
因此,为避免该错误,我重置了上下文类加载器:
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
而且有效!
我有以下查询: 执行查询时,我得到以下异常: java.lang.非法参数异常: 组织.Hibernate.查询参数异常: 找不到命名参数 [startDate] 您能告诉我的查询有什么问题吗?
我在做一个分布式Java项目。我已经在我的GlassFish中创建了新的JDBC资源和连接池(Localhost:4848)。我的Java项目是通过net bean创建的。在配置设置(web.xml)下的引用选项卡上- 打印出数据源中的所有表 这是我不期望的输出 我已经添加了用户,密码,URL字段在MYSQL池在Glass的附加属性选项卡下。我还测试了ping服务器,它的工作原理。我可以访问数据库
问题内容: 我一直在尝试使用NetBeans Ide创建一个简单的Restful WebService。 我的Java EE版本是:Java EE 7 Web。 我创建了一个新的Java Web应用程序,设置此ContexPath: 。 现在,运行我的应用程序,浏览器在以下位置显示我的页面: 因此,一切正常。 然后,我尝试使用RESTful Web服务向导创建一个简单的Restful资源。 因此,
我有一个小的webservice程序,在其中我需要从外部JAR导入JSONObject。在尝试部署webservice时,Glassfish找不到导入的类(从外部jar),但在IDE中看起来很好。 [2017-11-17T16:22:49.429+0100][glassfish 4.1][警告][][javax.enterprise.web][tid:_threadid=30_threadname
除了去掉“D”之外,有没有办法。从第一个查询开始,使第一个代码段不抛出错误消息? 以下是源代码:
问题内容: 嗨Jenkins和AWS Guru’s 我已经在网上寻找任何可能的解决方案,但没有解决我的问题。我只是在测试项目下的Jenkins执行外壳上发布了“ eb –version”,但在执行过程中却得到“ eb:命令未找到”。 奇怪的是,如果我通过CLI在Jenkins框上发出相同的命令,我会得到很好的响应。对修复有任何建议吗?提前致谢 问题答案: 您的Jenkins设置的路径与您登录时使用