Jakarta ee 如何从封闭的Ear/lib/*.jar访问war/WEB-INF/类? 从封闭EAR的lib/*.jar调用类到app.war现在可以工作了 当我部署时,可以在“War”中看到两个单例类的实例化(一个来自容器,另一个来自应用程序)

Jakarta ee 如何从封闭的Ear/lib/*.jar访问war/WEB-INF/类? 从封闭EAR的lib/*.jar调用类到app.war现在可以工作了 当我部署时,可以在“War”中看到两个单例类的实例化(一个来自容器,另一个来自应用程序),jakarta-ee,websocket,ejb,cdi,wildfly,Jakarta Ee,Websocket,Ejb,Cdi,Wildfly,我们可以从lib/*.jar访问war/WEB-INF/classes吗 它主要有助于websockets集成,因为serverendpoint驻留在war文件中 我想获取WebSocket会话并进行相应的处理 选择CDI访问WEB-INF/classes或WEB-INF/lib/*.jar的原因: 默认情况下,这设置为false,这允许子部署查看属于.ear中其他子部署的类 例如,考虑以下内容:EAR部署: 我的耳朵 | |---网络战争 | |---ejb1.jar | |---ejb2.j

我们可以从
lib/*.jar
访问
war/WEB-INF/classes

它主要有助于websockets集成,因为serverendpoint驻留在war文件中

我想获取WebSocket会话并进行相应的处理

选择CDI访问WEB-INF/classes或WEB-INF/lib/*.jar的原因: 默认情况下,这设置为false,这允许子部署查看属于.ear中其他子部署的类

例如,考虑以下内容:EAR部署:

我的耳朵 | |---网络战争 | |---ejb1.jar | |---ejb2.jar 如果ear子部署设置为false,那么web.war中的类可以访问属于ejb1.jar和ejb2.jar的类。类似地,来自ejb1.jar的类可以访问来自ejb2.jar的类(反之亦然)


编辑2:

通过基于布鲁诺博客的CDI实现尝试了所有这些东西

在部署完整的Ear文件时遇到的问题

下面的类是激发war事件/WEB-INF/classes/

The ear-subdeployments-isolated element value has no effect on the isolated classloader of the .war file(s). i.e. irrespective of whether this flag is set to true or false, the .war within a .ear will have a isolated classloader and other sub-deployments within that .ear will not be able to access classes from that .war. This is as per spec.
import javax.ejb.Stateless;
导入javax.enterprise.event.event;
导入javax.enterprise.inject.spi.InjectionPoint;
导入javax.inject.inject;
导入javax.inject.Named;
导入javax.jms.Message;
导入javax.websocket.Session;
导入org.springframework.stereotype.Component;
@组成部分
@无国籍
@命名
公共类WebsocketMessenger{
@注入
@消息事件
私人活动;
public void sendMessageToWebsockets(字符串、消息、会话){
RawMessageEvent RawMessageEvent=新的RawMessageEvent(rawMessage,会话);
//事件。火灾();
}
} 
导入javax.ejb.Stateless;
导入javax.enterprise.event.asp;
导入javax.inject.Named;
@无国籍
@命名
公共类RawMessageListener{
public void listenToTheRawMessage(@Observes@MessageEvent RawMessageEvent RawMessageEvent){
System.out.println(“接收:+rawMessageEvent”);
}
}
以下是异常跟踪:

[org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor](MSC服务线程1-8)找到并支持JSR-330“javax.inject.inject”注释以进行自动连接 2015-03-19 11:08:39085警告[org.springframework.web.context.support.XmlWebApplicationContext](MSC服务线程1-8)上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名为“messenger”的bean时出错:自动连线依赖项的注入失败;嵌套异常为org.springframework.beans.factory.BeanCreationException:无法自动关联字段:javax.enterprise.event.event XXXX.HelloMessenger.events;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[javax.enterprise.event.event]的符合条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@javax.inject.inject()}

原因:org.springframework.beans.factory.BeanCreationException:无法自动连接字段:javax.enterprise.event.event XXXX.HelloMessenger.events;嵌套异常为org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到依赖项类型为[javax.enterprise.event.event]的符合条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@javax.inject.inject()} 位于org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor$AutoWiredFeldElement.inject(AutoWiredNotationBeanPostProcessor.java:555) 位于org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 位于org.springframework.beans.factory.annotation.AutoWiredNotationBeanPostProcessor.postProcessPropertyValues(AutoWiredNotationBeanPostProcessor.java:331)
... 22更多的

摆脱了CDI事件处理,尝试了war/WEB-INF/类的远程ejb通信

它起作用了,我可以与war文件后面的类通信

如果有人有CDI的答案,我们将不胜感激

The ear-subdeployments-isolated element value has no effect on the isolated classloader of the .war file(s). i.e. irrespective of whether this flag is set to true or false, the .war within a .ear will have a isolated classloader and other sub-deployments within that .ear will not be able to access classes from that .war. This is as per spec.
import javax.ejb.Stateless;
import javax.enterprise.event.Event;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.inject.Inject;
import javax.inject.Named;
import javax.jms.Message;
import javax.websocket.Session;

import org.springframework.stereotype.Component;

@Component
@Stateless
@Named
public class WebsocketMessenger {



    @Inject
    @MessageEvent
    private Event<Message> events;



     public void sendMessageToWebsockets(String rawMessage, Session session){


         RawMessageEvent rawMessageEvent = new RawMessageEvent(rawMessage, session);

 //     events.fire();

     }

 } 




   import javax.ejb.Stateless;
   import javax.enterprise.event.Observes;
   import javax.inject.Named;




 @Stateless
   @Named


   public class RawMessageListener {

     public void listenToTheRawMessage(@Observes @MessageEvent RawMessageEvent rawMessageEvent){
        System.out.println("Received: " + rawMessageEvent);
     }

 }