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中创建错误。。我正在做的项目一团糟,所以我不确定是不是项目的错。。