将 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/