java - 在调用 ejb 方法以及 javax.jms.Message 对象低于错误 NonSerializable
问题描述
我们正在使用该MessageListener
方法onMeassage(javax.jms.Message msg)
调用稍后的 ejb 方法,如下示例所示,但它显示错误java.io.NotSerializableException
。这是从 weblogic 到 JBOSS 的源代码迁移,之前它在 Weblogic 服务器上运行良好。
当我们查看调用类时,似乎实现了一个消息侦听器,甚至尝试添加接口可序列化但没有成功。
6:21:00,033 ERROR [M2MProcess] (Thread-127 (ActiveMQ-client-global-threads)) A=15 C=1 S=4 Class=uk.co.softwright.iframe.helper.BeanHelper Context=null (Unexpected_Problem: triggerListener() call failed with exception) : java.lang.RuntimeException: WFLYEJB0054: Failed to marshal EJB parameters
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:592)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at org.jboss.ejb.protocol.remote.RemotingEJBClientInterceptor.handleInvocationResult(RemotingEJBClientInterceptor.java:56)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at org.jboss.ejb.client.TransactionPostDiscoveryInterceptor.handleInvocationResult(TransactionPostDiscoveryInterceptor.java:133)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at org.jboss.ejb.client.DiscoveryEJBClientInterceptor.handleInvocationResult(DiscoveryEJBClientInterceptor.java:115)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at org.jboss.ejb.client.NamingEJBClientInterceptor.handleInvocationResult(NamingEJBClientInterceptor.java:79)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at org.jboss.ejb.client.TransactionInterceptor.handleInvocationResult(TransactionInterceptor.java:172)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:594)
at org.jboss.ejb.client.EJBClientInvocationContext.getResult(EJBClientInvocationContext.java:528)
at org.jboss.ejb.client.EJBClientInvocationContext.awaitResponse(EJBClientInvocationContext.java:938)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:177)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:112)
at com.sun.proxy.$Proxy102.triggerListener(Unknown Source)
at uk.co.softwright.iframe.helper.BeanHelper.triggerListener(BeanHelper.java:137)
at uk.co.softwright.iframe.processor.ProcessorJMSListener.onMessage(ProcessorJMSListener.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:40)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:185)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:364)
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:144)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:47)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:100)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:22)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.deployment.processors.EjbSuspendInterceptor.processInvocation(EjbSuspendInterceptor.java:57)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:67)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.as.ejb3.component.messagedriven.MessageDrivenComponentDescription$5$1.processInvocation(MessageDrivenComponentDescription.java:245)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:60)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:438)
at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:619)
at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:57)
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:53)
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:198)
at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:185)
at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:81)
at uk.co.softwright.iframe.processor.ProcessorJMSListener$$$view123.onMessage(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jboss.as.ejb3.inflow.MessageEndpointInvocationHandler.doInvoke(MessageEndpointInvocationHandler.java:139)
at org.jboss.as.ejb3.inflow.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:73)
at uk.co.softwright.iframe.processor.ProcessorJMSListener$$$endpoint6.onMessage(Unknown Source)
at org.apache.activemq.artemis.ra.inflow.ActiveMQMessageHandler.onMessage(ActiveMQMessageHandler.java:308)
at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.callOnMessage(ClientConsumerImpl.java:1011)
at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl.access$400(ClientConsumerImpl.java:50)
at org.apache.activemq.artemis.core.client.impl.ClientConsumerImpl$Runner.run(ClientConsumerImpl.java:1134)
at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:42)
at org.apache.activemq.artemis.utils.actors.OrderedExecutor.doTask(OrderedExecutor.java:31)
at org.apache.activemq.artemis.utils.actors.ProcessorBase.executePendingTasks(ProcessorBase.java:66)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.activemq.artemis.utils.ActiveMQThreadFactory$1.run(ActiveMQThreadFactory.java:118)
Caused by: java.io.NotSerializableException: org.apache.activemq.artemis.jms.client.ActiveMQObjectMessage
at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:256)
at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:130)
at org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:378)
at org.jboss.as.ejb3.remote.LocalEjbReceiver.clone(LocalEjbReceiver.java:360)
at org.jboss.as.ejb3.remote.LocalEjbReceiver.processInvocation(LocalEjbReceiver.java:122)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:479)
at org.jboss.ejb.protocol.remote.RemotingEJBClientInterceptor.handleInvocation(RemotingEJBClientInterceptor.java:51)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:491)
at org.jboss.ejb.client.TransactionPostDiscoveryInterceptor.handleInvocation(TransactionPostDiscoveryInterceptor.java:79)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:491)
at org.jboss.ejb.client.DiscoveryEJBClientInterceptor.handleInvocation(DiscoveryEJBClientInterceptor.java:92)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:491)
at org.jboss.ejb.client.NamingEJBClientInterceptor.handleInvocation(NamingEJBClientInterceptor.java:64)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:491)
at org.jboss.ejb.client.TransactionInterceptor.handleInvocation(TransactionInterceptor.java:165)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:491)
at org.wildfly.common.context.Contextual.runExConsumer(Contextual.java:203)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequestInitial(EJBClientInvocationContext.java:327)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:173)
事务管理
@MessageDriven(mappedName = "jms/queue/MNP", name = "ProcessMessageListener")
public class ProcessorJMSListener implements MessageListener,Serializable {
@Resource
private MessageDrivenContext context;
static final long serialversionUID = 129348938L;
// private static final String QUEUE_CONNECTION_FACTORY = "jms.QueueConnectionFactory";
// private static final String LONG_PROCESS_QUEUE = "jms.testqueue";
// public static int count=0;
/** Singleton class for ErrorHelper */
// private static ErrorHelper m_ErrorHelper=null;
/** Singleton class for SPFollowUpHelper */
// private static JMSSPFollowUpHelper m_ForwardHelper=null;
/** Source identifier to update to database */
// private String sourceId;
public static class MessageHolder {
private QueueSession m_QueueSession;
private QueueReceiver m_QueueReceiver;
public String m_Message;
public ObjectMessage m_ObjectMessage;
public BytesMessage m_BytesMessage; // 2013-10-08: to accommodate our BytesMessage-ized NPOType
public Map m_Properties;
}
public ProcessorJMSListener() throws Exception {
OperatorLoader.getInstance();
/* Context ctx=Cache.getInstance().getM_InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) ctx.lookup(QUEUE_CONNECTION_FACTORY);
Connection connection = connectionFactory.createConnection();
Destination destination=(Destination) ctx.lookup(LONG_PROCESS_QUEUE);
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer messageConsumer=session.createConsumer(destination);
messageConsumer.setMessageListener(this);
connection.start();
*/
}
@PostConstruct
public void init() {
LogFactory.getInstance().log(LogFactory.s_AREA_M2M_PROCESSOR,
LogFactory.s_CODE_M2M_PROCESSOR_MESSAGE_RECEIVER,
LogFactory.s_INFO,
this.getClass(),
"init()",
"Success.");
}
@PreDestroy
public void destory() {
}
public void onMessage(final Message message) {
long startTime = 0;
long endTime = 0;
startTime = System.currentTimeMillis();
try {
LogFactory.getInstance().log(LogFactory.s_AREA_ACTION_LISTENER,
LogFactory.s_CODE_ACTION_LISTENER_EJB,
LogFactory.s_DEBUG_HIGH,
this.getClass(),
null,
"processMessage(): msg:["+message+"]");
// 2013-10-08: trace: off to ActionListnerEJB for a trip. Will be back at uk.co.softwright.iframe.processor.ActionListener
if (!BeanHelper.getInstance().triggerListener(message)) {
LogFactory.getInstance().log(LogFactory.s_AREA_M2M_PROCESSOR,
LogFactory.s_CODE_M2M_PROCESSOR_MESSAGE_RECEIVER,
LogFactory.s_INFO,
this.getClass(),
"process()",
"Success.");
} else {
LogFactory.getInstance().log(LogFactory.s_AREA_M2M_PROCESSOR,
LogFactory.s_CODE_M2M_PROCESSOR_MESSAGE_RECEIVER,
LogFactory.s_ERROR,
this.getClass(),
"process()",
"Unexpected_Problem: Rollback Message to JMS InBound Queue by Application itself.");
throw new RuntimeException("Rollback Message to JMS InBound Queue by Application itself.");
}
} catch (RuntimeException re) {
throw re;
} catch (Throwable t) {
t.printStackTrace();
LogFactory.getInstance().log(LogFactory.s_AREA_M2M_PROCESSOR,
LogFactory.s_CODE_M2M_PROCESSOR_MESSAGE_RECEIVER,
LogFactory.s_ERROR,
getClass(),
"Unexpected_Problem: JMS Rollback. "+t.getStackTrace().toString());
context.setRollbackOnly();
}
endTime = System.currentTimeMillis();
if(LogFactory.getInstance().isLoggingEnabled(LogFactory.s_AREA_TIMER,
LogFactory.s_CODE_M2M_PROCESSOR_MESSAGE_RECEIVER,
LogFactory.s_DEBUG_HIGH))
{
LogFactory.getInstance().log(LogFactory.s_AREA_TIMER,
LogFactory.s_CODE_M2M_PROCESSOR_MESSAGE_RECEIVER,
LogFactory.s_DEBUG_HIGH,
getClass(),
"ProcessSPRunner with Request[JMSOnmessage] Time:["+(endTime-startTime)+"ms]");
}
}
public boolean triggerListener(javax.jms.Message msg) {
boolean result=false;
try {
if(m_ActionListener==null) {
// System.out.println("MyTest********New******"+context.list("java:global/").next().getName());
// ActionListenerHome alh = (ActionListenerHome)Cache.getInstance().getHome(ActionListenerHome.class,ActionListener.class);
try {
System.out.println("POC things");
context = new InitialContext();
m_ActionListener = (ActionListener) context.lookup(StringJNDI.selectJNDI(JNDI_ALERT_BEAN_REMOTE, context.list("java:global/").next().getName()));
m_ActionListener.ejbCreate();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
result=m_ActionListener.triggerListener(msg);
Ejb class
public boolean triggerListener(javax.jms.Message msg) {
boolean result=true;
System.out.println("test123");
LogFactory.getInstance().log(LogFactory.s_AREA_ACTION_LISTENER,
LogFactory.s_CODE_ACTION_LISTENER_EJB,
LogFactory.s_DEBUG_HIGH,
this.getClass(),
null,
"New triggerListener() call");
TriggerAction ah=new TriggerAction(m_FatalDelay,m_NonFatalDelay);
result=ah.trigger(msg,m_ActionListenerInstance);
LogFactory.getInstance().log(LogFactory.s_AREA_ACTION_LISTENER,
LogFactory.s_CODE_ACTION_LISTENER_EJB,
LogFactory.s_DEBUG_LOW,
this.getClass(),
null,
"New triggerListener() returns "+result);
return result;
}
解决方案
推荐阅读
- xcode - 如何将付费应用转移到免费应用并为现有用户保留购买
- c - 匿名对象存储在哪里?
- vue.js - 问题 vuejs route 不会根据使用的组件改变视图 vue router
- python - 当替换字符串的大小与子字符串不同时,使用切片替换所有出现的子字符串
- reactjs - 我如何使用 Jest 酶为 componentDidMount 上的 API 调用编写测试用例
- json - jq:从多个条目中检索值
- bash - Bash逐个字符串拆分字符串并检查日期是否早于1天
- ckeditor - CKEditor:是否可以限制 TextColor 和 BGColor 的颜色选择?
- java - Android 中的 ViewModel 类可以包含构造函数吗?
- javascript - 在表单提交上调用 React 自定义钩子