Java Glassfish 4.1:耳朵内的战争不会暴露Web服务
我目前正在将一个应用程序从运行在Java Glassfish 4.1:耳朵内的战争不会暴露Web服务,java,web-services,glassfish,glassfish-4,Java,Web Services,Glassfish,Glassfish 4,我目前正在将一个应用程序从运行在Glassfish 3.1.2.2上的Java7升级到运行在Glassfish 4.1上的Java8。该应用程序打包为一个ear-文件,其中包含一个ejbjar,以及一个war。war又包含一些webservices 在Glassfish 3.1.2.2中,部署ear将导致war暴露大量webservices。但是,当我在Glassfish 4.1中部署ear时,没有webservice被暴露。当在Glassfish中列出ear的组件时,war在4.1中不列出we
Glassfish 3.1.2.2上的Java7
升级到运行在Glassfish 4.1上的Java8
。该应用程序打包为一个ear
-文件,其中包含一个ejbjar
,以及一个war
。war
又包含一些webservices
在Glassfish 3.1.2.2
中,部署ear
将导致war
暴露大量webservices
。但是,当我在Glassfish 4.1
中部署ear
时,没有webservice
被暴露。当在Glassfish
中列出ear
的组件时,war
在4.1
中不列出webservices
(仅web
)(但在3.1.2.2
中列出)
我已经尝试将war
-文件部署为一个独立的应用程序,当执行此操作时,webservices
变得可用
有人知道在Glassfish 4.1中通过ear
-文件部署webservices
时是否存在已知的bug吗
当涉及到更改时,我已经升级了一些依赖项,但据我所知,没有什么会影响这一点
我的application.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC
"-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN"
"http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>myApplication-ear</display-name>
<description>myApplication</description>
<module>
<ejb>myApplication-ejb-5.2-SNAPSHOT.jar</ejb>
</module>
<module>
<web>
<web-uri>myApplication-war-5.2-SNAPSHOT.war</web-uri>
<context-root>/myApplication-war</context-root>
</web>
</module>
</application>
我的耳朵
我的申请
myApplication-ejb-5.2-SNAPSHOT.jar
myApplication-war-5.2-SNAPSHOT.war
/我的应用程序战争
这是您的场景吗(?):当作为web服务公开且具有处理程序的EJB在其依赖的EJB之前初始化时,EJB模块部署可能会失败。这是由EJB容器初始化和加载EJB web服务的方式引起的,解决方法是重命名EJB,以便在具有依赖项的EJB之后初始化作为web服务公开的EJB。问题是旧的依赖项:
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.7</version>
</dependency>
com.sun.xml.ws
jaxws-rt
2.2.7
我删除了它,因为它已经包含在java安装的rt.jar中。
不知怎的,Glassfish根本没有处理这个问题,Web服务根本不起作用,服务器上也没有错误的痕迹。log我不确定我是否100%理解,但你可能发现了什么。在将war部署为单机版时,我注意到(然后忘记)一件事是,我收到了在部署ear时没有出现的错误消息(与Hibernate有关的内容,因此ear和war都应该失败)。在部署ear时,子模块的错误似乎不会传播。独立部署ejb模块似乎有点棘手,但我可能会尝试一下,看看是否会出现任何错误。让我们重新表述一下上面的场景:ejb Web服务可能会失败,因为它的依赖项没有加载。EJB初始化通常按字母顺序进行。您是否可以重命名EJB,以便在具有依赖项的EJB之后初始化作为web服务公开的EJB,并再次尝试部署ear?EJB不会作为web服务公开。有单独的模块,带有EJB的模块用于与Swing客户端通信,war包含标准的@Webservice
-注释类。我将尝试将ejbjar作为独立的部署,并解决任何错误,看看它是否有帮助。可能是ejb的初始化失败,这反过来导致war没有正确初始化(我觉得奇怪,服务器日志都是sunshine的…)我在Glassfish 3.1.2中也遇到了同样的问题。在我的战争中我只有一个阶级,在我的耳朵里只有一个阶级。作为ear部署会产生不一致的结果。有时有效,有时无效。作为一场战争部署似乎是它一贯正确工作的唯一方式。请认为在初始化ear时可能存在错误(可能是竞争条件)。重新启动glassfish在某些情况下会使Web服务部署(因此在发生此情况时无需重新部署…),但很高兴知道,我不是唯一一个出现此问题的人,可能会在glassfish中创建错误。。我正在做的项目一团糟,所以我不确定是不是项目的错。。