【问题标题】:Wildfly 10 Final JMS required services not installed未安装 Wildfly 10 Final JMS 所需服务
【发布时间】:2017-03-14 02:46:53
【问题描述】:

我有一个带有 Wildfly 10 Final 和 JSF 2.2.9 的动态 Web 项目。我尝试通过消息驱动 Bean 发送消息。

但如果我尝试在 Wildfly 上启动 Web 应用程序,我会收到以下错误:

23:57:53,971 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "MyApplication.war")]) - failure description: {
    "WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.module.MyApplication.MyApplication.env.jms.queue.WebSocketDrivenQueue"],
    "WFLYCTL0180: Services with missing/unavailable dependencies" => ["jboss.naming.context.java.module.MyApplication.MyApplication.env.\"com.example.QueueSenderSessionBean\".myQueue is missing [jboss.naming.context.java.module.MyApplication.MyApplication.env.jms.queue.WebSocketDrivenQueue]"]
}
23:57:54,270 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 37) WFLYSRV0010: Deployed "MyApplication.war" (runtime-name : "MyApplication.war")
23:57:54,273 INFO  [org.jboss.as.controller] (Controller Boot Thread) WFLYCTL0183: Service status report
WFLYCTL0184:    New missing/unsatisfied dependencies:
      service jboss.naming.context.java.module.MyApplication.MyApplication.env.jms.queue.WebSocketDrivenQueue (missing) dependents: [service jboss.naming.context.java.module.MyApplication.MyApplication.env."com.example.QueueSenderSessionBean".myQueue] 

WebSocketDrivenBean

@MessageDriven(
    activationConfig = { @ActivationConfigProperty(
            propertyName = "destination", propertyValue = "java:/jms/queue/WebSocketDrivenQueue"), @ActivationConfigProperty(
            propertyName = "destinationType", propertyValue = "javax.jms.Queue")
    }, 
    mappedName = "java:/jms/queue/WebSocketDrivenQueue")
   @Named
   public class WebSocketDriven implements MessageListener {
    @Inject
    @WSJMSMessage
    Event<Message> jmsEvent; 

    public WebSocketDriven() {
    }

    public void onMessage(Message message) {
        jmsEvent.fire(message);
    }
}

QueueSenderSessionBean

@Stateless
public class QueueSenderSessionBean {

    @Resource(mappedName = "java:/jms/queue/WebSocketDrivenQueue")
    private Queue myQueue;
    @Inject
    private JMSContext jmsContext; 

    public void sendMyText(String message){
        jmsContext.createProducer().send(myQueue, message);
    }
}

以及尝试发送消息的类:

@Named  
@ClientEndpoint(encoders={JsonEncoder.class}, decoders={JsonDecoder.class})  
public class MyTestApplication implements Serializable{  
  private static final long serialVersionUID = 1L;  
  Session userSession = null;  

  @Inject  
  private QueueSenderSessionBean senderBean;  

   ....  

  @OnMessage  
  public void onMessage(WebSocketMessage message) {  
      this.senderBean.sendMyText("Hello");    
  }  
  ....  
}

我使用 Standalone-full.xml 为 JMS-Support 启动 WildFly 服务器并插入以下行:

<jms-queue name="WebSocketDrivenQueue" entries="java:/jms/queue/WebSocketDrivenQueue />

有人可以帮我吗?是否存在配置错误或类似情况?

谢谢。 最好的问候。

【问题讨论】:

  • 这可能只是命名问题。我会尝试使用lookup 参数而不是QueueSenderSessionBean 进行队列注入。喜欢@Resource(lookup = "java:/jms/queue/WebSocketDrivenQueue")。我认为 jms 队列名称没有映射到java:comp/env 空间(不确定是否诚实,检查docs.oracle.com/javaee/7/api/javax/annotation/…
  • 好的,谢谢。而已。前缀 java:/ 是必需的。我编辑了我的第一篇文章。但是现在我在 this.senderBean.sendMyText("Hello"); 上的 WebSocket 类 MyTestApplication 中得到了 NullpointerException; 有什么想法,为什么?
  • server.log 不是有错误吗?将SLSB bean 注入到 websocket 端点似乎有问题。由于我在这个领域没有太多经验,所以我在网上快速搜索并找到了这个答案:stackoverflow.com/questions/20872300/…我希望它有所帮助。

标签: java queue jms wildfly


【解决方案1】:

对于 DJTust,我在调用 jmsContext.createProducer().send(queue, "Hello") 后找到了解决 NullPointer 的答案。您还必须添加 beans.xml。请参阅 Nikolai Schreier 的回答:JMSContext NullPointer Exception - wildfly 8.2.0 default queue

【讨论】:

    猜你喜欢
    • 2018-02-05
    • 2017-02-03
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2017-12-01
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多