在weblogic12c中调用javax.jms.QueueSession.createBrowser()时出现javax.jms.InvalidSelectorException

标签 java jms weblogic weblogic11g weblogic12c

将 Weblogic 版本从 10.3.6 升级到 12.1.2 后,我得到 javax.jms.InvalidSelectorException

调用 JMS API 时

javax.jms.QueueSession.createBrowser(队列队列,字符串消息选择器)

我使用的选择器是

String selector = "JMSTimestamp < " + timeStamp + " AND JMSRedelivered = false";

有人知道是什么原因导致这个问题吗?我缺少什么?

不确定为什么它在 WL10.3.6 上有效而在 WL12 上无效(未更改代码)

javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMSTimestamp < 1386059460109 AND JMSRedelivered = false"
        at weblogic.jms.dispatcher.DispatcherAdapter.convertToJMSExceptionAndThrow(DispatcherAdapter.java:110)
        at weblogic.jms.dispatcher.DispatcherAdapter.dispatchSync(DispatcherAdapter.java:45)
        at weblogic.jms.client.JMSSession.createBackEndBrowser(JMSSession.java:3278)
        at weblogic.jms.client.JMSQueueBrowser.<init>(JMSQueueBrowser.java:48)
        at weblogic.jms.client.JMSSession.createBrowser(JMSSession.java:2671)
        at weblogic.jms.client.WLSessionImpl.createBrowser(WLSessionImpl.java:1072)
        at my.common.server.jms.JMSBrowser.initBrowser(JMSBrowser.java:87)
        at my.common.server.jms.JMSBrowser.countOldMessages(JMSBrowser.java:53)
        at my.callback.server.JMSCallbackBrowseSyncTimeoutTask.execute(JMSCallbackBrowseSyncTimeoutTask.java:36)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Caused by: javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMSTimestamp < 1386059460109 AND JMSRedelivered = false"
        at weblogic.jms.dispatcher.Request.handleThrowable(Request.java:87)
        at weblogic.jms.dispatcher.Request.getResult(Request.java:52)
        at weblogic.messaging.dispatcher.Request.wrappedFiniteStateMachine(Request.java:1124)
        at weblogic.messaging.dispatcher.DispatcherImpl.syncRequest(DispatcherImpl.java:201)
        at weblogic.messaging.dispatcher.DispatcherImpl.dispatchSync(DispatcherImpl.java:236)
        at weblogic.jms.dispatcher.DispatcherAdapter.dispatchSync(DispatcherAdapter.java:43)
        ... 9 more
Caused by: javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMSTimestamp < 1386059460109 AND JMSRedelivered = false"
        at weblogic.jms.dispatcher.Request.handleThrowable(Request.java:87)
        at weblogic.jms.dispatcher.Request.getResult(Request.java:52)
        at weblogic.jms.dispatcher.Request.useChildResult(Request.java:69)
        at weblogic.jms.frontend.FESession.browserCreate(FESession.java:1288)
        at weblogic.jms.frontend.FESession.invoke(FESession.java:3041)
        at weblogic.messaging.dispatcher.Request.wrappedFiniteStateMachine(Request.java:961)
        ... 12 more
Caused by: javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMSTimestamp < 1386059460109 AND JMSRedelivered = false"
        at weblogic.jms.dispatcher.Request.handleThrowable(Request.java:87)
        at weblogic.jms.dispatcher.Request.getResult(Request.java:52)
        at weblogic.messaging.dispatcher.Request.wrappedFiniteStateMachine(Request.java:1124)
        at weblogic.messaging.dispatcher.DispatcherImpl.dispatchAsyncInternal(DispatcherImpl.java:156)
        at weblogic.messaging.dispatcher.DispatcherImpl.dispatchAsync(DispatcherImpl.java:132)
        at weblogic.messaging.dispatcher.Request.dispatchAsync(Request.java:1303)
        at weblogic.jms.dispatcher.Request.dispatchAsync(Request.java:96)
        at weblogic.jms.frontend.FESession.browserCreate(FESession.java:1275)
        ... 14 more
Caused by: javax.jms.InvalidSelectorException: weblogic.messaging.kernel.InvalidExpressionException: Expression : "JMSTimestamp < 1386059460109 AND JMSRedelivered = false"
        at weblogic.jms.backend.BEBrowserImpl.<init>(BEBrowserImpl.java:85)
        at weblogic.jms.backend.BEQueueImpl.createBrowser(BEQueueImpl.java:251)
        at weblogic.jms.backend.BESessionImpl.createBrowser(BESessionImpl.java:877)
        at weblogic.jms.backend.BESessionImpl.invoke(BESessionImpl.java:279)
        at weblogic.messaging.dispatcher.Request.wrappedFiniteStateMachine(Request.java:961)

最佳答案

经过大量调查,我们发现我们有一个在 weblogic 10.3.6 中使用的配置,我们为类加载器配置了特定的antlr.jar,而不是 WL 中实现的版本

weblogic-application.xml 包含:

<prefer-application-packages>
        <package-name>antlr.*</package-name>
    </prefer-application-packages>

关于在weblogic12c中调用javax.jms.QueueSession.createBrowser()时出现javax.jms.InvalidSelectorException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20397761/

相关文章:

java - 使用方法引用来检查 boolean 值匹配而不是 lambda

spring - 如何使用 Spring JMS 访问 FQQN?

java - 处理大量 JMS 消息类型

java - JBoss EAP6 + HornetQ - 不确定如何创建到 HornetQ 的队列连接

weblogic - 限制servlet的并行处理数量

java - Lucene搜索问题

java - java的image magick问题

java - Java EE 服务器上的 Exec 运行时

java - 查找后从数据源获取 JNDI 名称

jsf - EJB 是否应该是实例变量并在 JSF Managed Beans 中标记为 transient ?