Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 玻璃鱼4+;EJB+;Spring,部署失败_Java_Spring_Jakarta Ee_Glassfish_Ejb - Fatal编程技术网

Java 玻璃鱼4+;EJB+;Spring,部署失败

Java 玻璃鱼4+;EJB+;Spring,部署失败,java,spring,jakarta-ee,glassfish,ejb,Java,Spring,Jakarta Ee,Glassfish,Ejb,我正在将一个应用程序从Glassfish 3.1.2.2上的Java7升级到Glassfish 4.1上的Java8。该应用程序打包为一个ear文件,其中包含一个包含远程EJB和Springbean的jar文件,以及一个包含两个servlet和一些Web服务的war文件 与Glassfish 3.x相比,实际应用程序只做了一些细微的更改,所做的全部更改如下: 用Java8而不是Java7构建 部署在Glassfish 4.1而不是3.1.2.2上 更新版本的Hibernate 更新版本的Act

我正在将一个应用程序从Glassfish 3.1.2.2上的Java7升级到Glassfish 4.1上的Java8。该应用程序打包为一个ear文件,其中包含一个包含远程EJB和Springbean的jar文件,以及一个包含两个servlet和一些Web服务的war文件

与Glassfish 3.x相比,实际应用程序只做了一些细微的更改,所做的全部更改如下:

  • 用Java8而不是Java7构建
  • 部署在Glassfish 4.1而不是3.1.2.2上
  • 更新版本的Hibernate
  • 更新版本的ActiveMQ(客户端)
我看不出以前的ear文件和新的ear文件之间有什么区别(除了上面提到的lib-jar),但是当我尝试部署时,我的所有EJB都会出现如下错误:

org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type SomethingLogic with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private com.my.application.server.service.SomethingServiceSession.somethingLogic
其中SomethingService是EJB,somethingslogic是springbean

我的EJB定义如下:

@Stateless
@RolesAllowed("secure")
@Interceptors(SpringBeanAutowiringInterceptor.class)
public class SomethingServiceSession implements SomethingService {

    @Inject
    private SomethingLogic somethingLogic; //Spring bean
<ejb>
  <ejb-name>SomethingServiceSession</ejb-name>
  <ior-security-config>
    <as-context>
      <auth-method>USERNAME_PASSWORD</auth-method>
      <realm>AD</realm>
      <required>true</required>
    </as-context>
  </ior-security-config>
</ejb>
某种逻辑是一个接口

我有一个beanRefContext.xml,其中包含:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="beanFactory" class="org.springframework.context.support.ClassPathXmlApplicationContext">
    <constructor-arg value="classpath*:applicationContext-glassfish.xml"/>
  </bean>

</beans>
这实际上允许部署我的EJB服务,但我怀疑它有一个不太好的副作用,即我的Web服务没有被发现,因此我希望能够在启用CDI的情况下进行部署,以排除这种情况

更新:


我在所有非Spring处理的类(EJB、webservices和servlet)中都尝试过将@Inject更改为@Autowired。现在,对于实际的SpringBean,我得到了相同的错误。Glassfish似乎会在遇到@Inject时尝试寻找EJB bean,无论它们出现在哪里。

通过向我的各种beans.xml文件中添加
bean discovery mode=“none”
修复了我的问题

    <?xml version="1.0"?>
    <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_2.xsd"
    bean-discovery-mode="none" />

为我省去了很多麻烦。非常感谢。
asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false
    <?xml version="1.0"?>
    <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://jboss.org/schema/cdi/beans_1_2.xsd"
    bean-discovery-mode="none" />