java.lang.IllegalStateException:对象已经被释放到该池中或无效

2020-08-19 06:49发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我们有一个要求,要求我们以xml的形式从其他系统接收父级和子级B2BUnit信息,并且需要创建父级B2BUnit和子级B2BUnits及其关系。

要创建子B2BUnit,我们使用B2BUnitService的addMember方法并使用模型服务保存该单元。 {Ref:Hybris Wiki https://wiki.hybris。 com/display/release5/B2B + Units + and + Organization + Tree}。

  public void createSubB2BUnit(B2BUnitModel父级,列表 officeDetails){
     
             用于(最终OfficeDetailsType officeDetail:officeDetails){
          B2BUnitModel anOffice =(B2BUnitModel)getB2bUnitService()。getUnitForUid(officeDetail.getOfficeAccountNumber());
     
              如果(anOffice == null){
     
                  anOffice = getModelService()。create(B2BUnitModel.class);
     
              }
     
              anOffice.setOfficeNumber(officeDetail.getOfficeNumber());
     
              anOffice.setUid(officeDetail.getOfficeAccountNumber());
     
              anOffice.setLocName(officeDetail.getOfficeName());
     
              anOffice.setActive(officeDetail.isOfficeStatus());
     
          anOffice.setGroups(Collections.EMPTY_SET);
     
          b2bUnitService.addMember(parent,anOffice); //设置父项
          this.modelService.save(unit);
           }
     
      }
                                                    (要么)

   公共无效createSubB2BUnit(B2BUnitModel父级,列表 officeDetails){
 
  最终List  customerOffices = new ArrayList ();
 
   用于(最终OfficeDetailsType officeDetail:officeDetails){
  B2BUnitModel anOffice =(B2BUnitModel)getB2bUnitService()。getUnitForUid(officeDetail.getOfficeAccountNumber());
 
          如果(anOffice == null){
 
              anOffice = getModelService()。create(B2BUnitModel.class);
 
          }
 
          anOffice.setOfficeNumber(officeDetail.getOfficeNumber());
 
          anOffice.setUid(officeDetail.getOfficeAccountNumber());
 
          anOffice.setLocName(officeDetail.getOfficeName());
 
          anOffice.setActive(officeDetail.isOfficeStatus());
 
      anOffice.setGroups(Collections.EMPTY_SET);
 
      b2bUnitService.addMember(parent,anOffice); //设置父项
      customerOffices.add(anOffice);
 
       }
 
  this.modelService.saveAll(customerOffices);
 
  }
  

当我们保存模型信息时,父级和子级单元信息都保存在数据库中,但是在将父级和子级B2BUnit信息保存到数据库后,我们将收到以下异常[注意:-如果b2bUnitService.addMember(parent, 那么anOffice)就不存在,只有当b2bUnitService.addMember(parent,anOffice)存在时,我们才不会出现下面的异常,我们看到了此异常]

我们需要addMember功能来创建父子关系。

请帮助我解决此问题? 还有其他方法可以解决此问题吗?

  WARN [pool-2] [ConnectionImpl]连接5(-A)已关闭(线程:Thread [pool-2,5,main])
  返回JDBC连接5(-A)的错误[pool-2] [JDBCConnectionPool]错误
  java.lang.IllegalStateException:对象已经被释放到该池中或无效
      在org.apache.commons.pool2.impl.GenericObjectPool.returnObject(GenericObjectPool.java:595)
      在de.hybris.platform.jdbcwrapper.JDBCConnectionPool.returnConnection(JDBCConnectionPool.java:148)
      在de.hybris.platform.jdbcwrapper.DataSourceImpl.returnToPool(DataSourceImpl.java:535)
      在de.hybris.platform.jdbcwrapper.ConnectionImpl.close(ConnectionImpl.java:378)
      在org.springframework.jdbc.datasource.DataSourceUtils.doCloseConnection(DataSourceUtils.java:341)
      在org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:328)
      在org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:294)
      在org.springframework.jdbc.datasource.DataSourceUtils $ ConnectionSynchronization.beforeCompletion(DataSourceUtils.java:460)处
      在org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCompletion(TransactionSynchronizationUtils.java:106)处
      在org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion(AbstractPlatformTransactionManager.java:938)处
      在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:739)
      在org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
      在org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)处
      在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:270)
      在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
      在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
      在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
      com.sun.proxy。$ Proxy59.call(未知来源)
      在org.springframework.integration.endpoint.AbstractPollingEndpoint $ Poller $ 1.run(AbstractPollingEndpoint.java:273)
      在org.springframework.integration.util.ErrorHandlingTaskExecutor $ 1.run(ErrorHandlingTaskExecutor.java:52)
      在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)
      在java.lang.Thread.run(Thread.java:745)


  

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

我们有一个要求,要求我们以xml的形式从其他系统接收父级和子级B2BUnit信息,并且需要创建父级B2BUnit和子级B2BUnits及其关系。

要创建子B2BUnit,我们使用B2BUnitService的addMember方法并使用模型服务保存该单元。 {Ref:Hybris Wiki https://wiki.hybris。 com/display/release5/B2B + Units + and + Organization + Tree}。

  public void createSubB2BUnit(B2BUnitModel父级,列表 officeDetails){
     
             用于(最终OfficeDetailsType officeDetail:officeDetails){
          B2BUnitModel anOffice =(B2BUnitModel)getB2bUnitService()。getUnitForUid(officeDetail.getOfficeAccountNumber());
     
              如果(anOffice == null){
     
                  anOffice = getModelService()。create(B2BUnitModel.class);
     
              }
     
              anOffice.setOfficeNumber(officeDetail.getOfficeNumber());
     
              anOffice.setUid(officeDetail.getOfficeAccountNumber());
     
              anOffice.setLocName(officeDetail.getOfficeName());
     
              anOffice.setActive(officeDetail.isOfficeStatus());
     
          anOffice.setGroups(Collections.EMPTY_SET);
     
          b2bUnitService.addMember(parent,anOffice); //设置父项
          this.modelService.save(unit);
           }
     
      }
                                                    (要么)

   公共无效createSubB2BUnit(B2BUnitModel父级,列表 officeDetails){
 
  最终List  customerOffices = new ArrayList ();
 
   用于(最终OfficeDetailsType officeDetail:officeDetails){
  B2BUnitModel anOffice =(B2BUnitModel)getB2bUnitService()。getUnitForUid(officeDetail.getOfficeAccountNumber());
 
          如果(anOffice == null){
 
              anOffice = getModelService()。create(B2BUnitModel.class);
 
          }
 
          anOffice.setOfficeNumber(officeDetail.getOfficeNumber());
 
          anOffice.setUid(officeDetail.getOfficeAccountNumber());
 
          anOffice.setLocName(officeDetail.getOfficeName());
 
          anOffice.setActive(officeDetail.isOfficeStatus());
 
      anOffice.setGroups(Collections.EMPTY_SET);
 
      b2bUnitService.addMember(parent,anOffice); //设置父项
      customerOffices.add(anOffice);
 
       }
 
  this.modelService.saveAll(customerOffices);
 
  }
  

当我们保存模型信息时,父级和子级单元信息都保存在数据库中,但是在将父级和子级B2BUnit信息保存到数据库后,我们将收到以下异常[注意:-如果b2bUnitService.addMember(parent, 那么anOffice)就不存在,只有当b2bUnitService.addMember(parent,anOffice)存在时,我们才不会出现下面的异常,我们看到了此异常]

我们需要addMember功能来创建父子关系。

请帮助我解决此问题? 还有其他方法可以解决此问题吗?

  WARN [pool-2] [ConnectionImpl]连接5(-A)已关闭(线程:Thread [pool-2,5,main])
  返回JDBC连接5(-A)的错误[pool-2] [JDBCConnectionPool]错误
  java.lang.IllegalStateException:对象已经被释放到该池中或无效
      在org.apache.commons.pool2.impl.GenericObjectPool.returnObject(GenericObjectPool.java:595)
      在de.hybris.platform.jdbcwrapper.JDBCConnectionPool.returnConnection(JDBCConnectionPool.java:148)
      在de.hybris.platform.jdbcwrapper.DataSourceImpl.returnToPool(DataSourceImpl.java:535)
      在de.hybris.platform.jdbcwrapper.ConnectionImpl.close(ConnectionImpl.java:378)
      在org.springframework.jdbc.datasource.DataSourceUtils.doCloseConnection(DataSourceUtils.java:341)
      在org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:328)
      在org.springframework.jdbc.datasource.DataSourceUtils.releaseConnection(DataSourceUtils.java:294)
      在org.springframework.jdbc.datasource.DataSourceUtils $ ConnectionSynchronization.beforeCompletion(DataSourceUtils.java:460)处
      在org.springframework.transaction.support.TransactionSynchronizationUtils.triggerBeforeCompletion(TransactionSynchronizationUtils.java:106)处
      在org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerBeforeCompletion(AbstractPlatformTransactionManager.java:938)处
      在org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:739)
      在org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724)
      在org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475)处
      在org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:270)
      在org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
      在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
      在org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
      com.sun.proxy。$ Proxy59.call(未知来源)
      在org.springframework.integration.endpoint.AbstractPollingEndpoint $ Poller $ 1.run(AbstractPollingEndpoint.java:273)
      在org.springframework.integration.util.ErrorHandlingTaskExecutor $ 1.run(ErrorHandlingTaskExecutor.java:52)
      在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)
      在java.lang.Thread.run(Thread.java:745)


  
付费偷看设置
发送
3条回答
hengyuye
1楼-- · 2020-08-19 07:15

而不是仅使用帐号检索..使用完整模型检索。 B2BUnitModel anOffice =(B2BUnitModel)getB2bUnitService()。getUnitForUid(officeDetail.getOfficeAccountNumber());

可能是这样

  B2BUnitModel anOffice =(B2BUnitModel)getB2bUnitService()。get(officeDetail);

  
Nan4612
2楼-- · 2020-08-19 07:22

遇到相同的问题,您是否设法解决了该问题或找到了根本原因

ZJXianG
3楼-- · 2020-08-19 07:30

感谢Vinay的回复 和建议。

第一次收到创建父B2B单位和子单位的请求时,子单位在数据库中不可用,因此在下一行,我们总是将B2BUnitModel设为null。 仅对于后续请求,它将从数据库中获取数据,但就我而言,这是第一次,请求本身遇到上述错误。

  B2BUnitModel anOffice =(B2BUnitModel)getB2bUnitService()。getUnitForUid(officeDetail.getOfficeAccountNumber());
  

一周热门 更多>