簡體   English   中英

javax.ejb.EJBException:發送請求時出錯[原因:java.io.OptionalDataException]

[英]javax.ejb.EJBException: Error while sending a request[Caused by: java.io.OptionalDataException]

我從客戶端發出了這樣的EJB調用:

Portfolio[] ptfTab = ServicesMgr.getInstance().getPortfolioService().getPortfolios();

getPortfolioService()返回PortfolioFinderDelegate(EJB客戶端接口)的實例。 來自客戶端的EJB服務具有以下簽名:

public interface PortfolioFinder extends IBasic {
   Portfolio[] getPortfolios();
}

對於服務器端的EJB,該方法的實現為:

public Portfolio[] getPortfolios() {
    List<Portfolio> portfolioList = getPortfoliosAsList();
    return portfolioList.toArray(new Portfolio[portfolioList.size()]);
}

方法getPortfolioAsList()是私有方法:

 private List<Portfolio> getPortfoliosAsList() {
     List<Portfolio> portfolioList = new ArrayList<Portfolio>();
     LOCK.readLock().lock();
     try {
          List<String> keys = portfolioCache.getKeys();
          for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) 
              {
               String codeport = iterator.next();
               Set<Portfolio> s =(Set<Portfolio>) portfolioCache.get(codeport) .getValue();
               portfolioList.addAll(s);
              }
         } catch (Throwable e) {
                LOGGER.error(e.getMessage(), e);
         } finally {
                LOCK.readLock().unlock();
         }

         return portfolioList;
   }

昨天,我得到了一個奇怪的堆棧跟蹤,這是我之前從未見過的,並且我確信服務器端的投資組合緩存不為空。 此外,服務器端沒有錯誤日志。 當第一個客戶端遇到此錯誤時,所有客戶端都將收到該錯誤。 這個問題與返回對象的大小有關嗎? (因為高速緩存的大小每天都在增加)通過EJB對數據進行序列化和反序列化時,對象大小是否受到限制?

2019-02-26 14:51:35 ERROR [StartupMgr][EJBPortfolioMgr.java:57] : Error while sending a request
javax.ejb.EJBException: Error while sending a request
                at org.ow2.easybeans.proxy.client.ClientRPCInvocationHandler.invoke(ClientRPCInvocationHandler.java:205)
                at org.ow2.easybeans.proxy.client.ClientRPCInvocationHandler.invoke(ClientRPCInvocationHandler.java:117)
                at com.sun.proxy.$Proxy33.getPortfolios(Unknown Source)
                at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:606)
                at com.clam.mediaplus.client.services.ProxyRemoteObject.invoke(ProxyRemoteObject.java:87)
                at com.sun.proxy.$Proxy33.getPortfolios(Unknown Source)
                at client.delegate.common.PortfolioFinderDelegate.getPortfolios(PortfolioFinderDelegate.java:46)
                at com.casits.rambo.dao.portfolio.EJBPortfolioMgr.reload(EJBPortfolioMgr.java:42)
                at com.casits.rambo.dao.portfolio.AbstractPortfolioMgr.<init>(AbstractPortfolioMgr.java:24)
                at com.casits.rambo.dao.portfolio.EJBPortfolioMgr.<init>(EJBPortfolioMgr.java:31)
                at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
                at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
                at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
                at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
                at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:72)
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:948)
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:901)
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
                at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
                at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
                at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
                at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
                at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
                at com.casits.rambo.dao.common.CommonBeanFactory.getPortfolioMgr(CommonBeanFactory.java:54)
                at com.casits.rambo.dao.portfolio.PortfolioMgr.getAttribPortfolio(PortfolioMgr.java:82)
                at com.casits.rambo.dao.portfolio.PortfolioMgr.getAttribPortfolio(PortfolioMgr.java:151)
                at com.casits.rambo.dao.portfolio.PortfolioMgr$2.processRow(PortfolioMgr.java:217)
                at org.springframework.jdbc.core.JdbcTemplate$RowCallbackHandlerResultSetExtractor.extractData(JdbcTemplate.java:1408)
              at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:445)
                at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:395)
                at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455)
                at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:459)
                at com.casits.rambo.dao.portfolio.PortfolioMgr.getAllAttribPortfolios(PortfolioMgr.java:207)
                at com.casits.attrib.refptf.controller.RefPortfolioMgr.getAllAttribCodeports(RefPortfolioMgr.java:257)
                at com.casits.attrib.refptf.controller.RefPortfolioMgr.refreshAttribCodeports(RefPortfolioMgr.java:243)
                at com.casits.attrib.refptf.controller.RefPortfolioMgr.init(RefPortfolioMgr.java:221)
                at com.casits.attrib.refptf.controller.RefPortfolioMgr.<init>(RefPortfolioMgr.java:239)
                at com.casits.attrib.refptf.controller.RefPortfolioMgr.<clinit>(RefPortfolioMgr.java:191)
                at com.casits.attrib.refptf.RefPtfModule.init(RefPtfModule.java:80)
                at com.casits.attrib.attribcommon.AbstractModule.load(AbstractModule.java:70)
                at com.casits.attrib.main.MainJFrame.executeEnableModule(MainJFrame.java:418)
                at com.casits.attrib.main.MainJFrame.addModule(MainJFrame.java:336)
                at com.casits.attrib.main.MainGUI.createAndShowGUI(MainGUI.java:80)
                at com.casits.attrib.main.StartupMgr.init(StartupMgr.java:82)
                at com.casits.attrib.attribcommon.manager.AttribUserMgr$1.run(AttribUserMgr.java:390)
                at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: Error while handling answer on the remote side 
                at org.ow2.easybeans.rpc.rmi.client.RMIClientRPC.sendEJBRequest(RMIClientRPC.java:116)
                at org.ow2.easybeans.proxy.client.ClientRPCInvocationHandler.invoke(ClientRPCInvocationHandler.java:202)
                ... 49 more
Caused by: java.rmi.UnmarshalException: IOException unmarshalling returnjava.io.OptionalDataException; nested exception is: 
                java.io.OptionalDataException
                at org.ow2.carol.rmi.jrmp.server.JUnicastRef.performRemoteCall(JUnicastRef.java:212)
                at org.ow2.carol.rmi.jrmp.server.JUnicastRef.invoke(JUnicastRef.java:161)
                at org.ow2.easybeans.rpc.rmi.server.RMIServerRPCImpl_Stub.getEJBResponse(RMIServerRPCImpl_Stub.java:60)
                at org.ow2.easybeans.rpc.rmi.client.RMIClientRPC.sendEJBRequest(RMIClientRPC.java:114)
                ... 50 more
Caused by: java.io.OptionalDataException
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1370)
                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
                at java.util.HashMap.readObject(HashMap.java:1179)
                at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:606)
                at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
                at java.util.HashMap.readObject(HashMap.java:1180)
                at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:606)
                at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
                at java.util.HashMap.readObject(HashMap.java:1180)
                at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:606)
                at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
                at java.util.HashMap.readObject(HashMap.java:1180)
                at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:606)
                at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
                at java.util.HashMap.readObject(HashMap.java:1180)
                at sun.reflect.GeneratedMethodAccessor32.invoke(Unknown Source)
                at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.lang.reflect.Method.invoke(Method.java:606)
                at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1893)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1706)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1344)
                at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)
                at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)
                at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
                at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
                at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
                at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:325)
                at org.ow2.carol.rmi.jrmp.server.JUnicastRef.performRemoteCall(JUnicastRef.java:205)
                ... 53 more

簡而言之,在我們的應用程序代碼中,復雜值對象(用作遠程方法調用的返回值)具有HashMap數據結構作為內部字段。 將此字段的類型更改為ConcurrentHashMap后,OptionalDataExceptions停止發生。 似乎在舊代碼的某個地方,此Map是通過非線程安全的方式處理的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM