0

部署 Web 项目时,有时我在 glassfish 日志中出现以下异常

java.lang.NullPointerException
  at org.apache.naming.resources.WebDirContext.lookupFromJars(WebDirContext.java:325)
  at org.apache.naming.resources.WebDirContext.getAttributes(WebDirContext.java:298)
  at org.apache.naming.resources.BaseDirContext.getAttributes(BaseDirContext.java:787)
  at org.apache.naming.resources.ProxyDirContext.cacheLoad(ProxyDirContext.java:1533)
  at org.apache.naming.resources.ProxyDirContext.cacheLookup(ProxyDirContext.java:1456)
  at org.apache.naming.resources.ProxyDirContext.lookup(ProxyDirContext.java:274)
  at org.glassfish.web.loader.WebappClassLoader.findResourceInternalFromRepositories(WebappClassLoader.java:2892)

原来是 glassfish 的已知 bug https://java.net/jira/browse/GLASSFISH-21522

就我而言,我注意到仅当 JMS 队列不为空时才会发生此异常。部署war时,MDB开始消费消息并因java.lang.NoClassDefFoundError异常而崩溃,这个NoClassDefFoundError发生是因为glassfish的lookupFromJars中发生了上述异常。

但是,当 JMS 队列中没有消息时,应用程序成功部署。部署后,MDB 会毫无例外地消费消息。

这是我的问题,如何为 MDB 消费者设置延迟。例如,在应用程序部署后一分钟后启动 MDB。

或者有没有办法手动启用MDB?

我正在使用 glassfish 4.1.1 和 glassfish 的 OpenMQ。

4

0 回答 0