0

到目前为止,我听说不建议将同步用于 ejb 会话 bean。

我有一个问题,我通过使用同步解决了。

我使用同步的代码。

if(strBatchID != null && strBatchNumber != null){                       
                pinGenerateSessionBeanLocalHome=getPINGenerateSessionBeanLocalHome();
                if(pinGenerateSessionBeanLocalHome != null){
                    IPINGenerateSessionBeanLocal  pinGenerateSessionBean = pinGenerateSessionBeanLocalHome.create();
                    synchronized(pinGenerateSessionBean){
                        if(pinGenerateSessionBean != null){
                            resultObject= pinGenerateSessionBean.generatePIN(pinBatchCustomData,iSessionInfo);
                            if(resultObject.getResponseCode() == PINResponseCode.SUCCESS_RESPONSE_CODE){
                                pinBatchCustomData= (PINBatchCustomData)resultObject.getResponseObject();                        
                                bSuccess = true;   
                            }else{
                                bSuccess = false;
                                debugLog(PIN_MODULE_NAME,"Insertions regarding PINs could not be made successfully ");
                            }   
                        }else{
                            bSuccess = false;
                            debugLog(PIN_MODULE_NAME,"PINGenerateSession Local Is Null ");
                        }
                    }
                }else{
                    bSuccess = false;
                    debugLog(PIN_MODULE_NAME,"PINGenerateSession Local Home Is Null ");
                }
            }

检查我用来synchronized(pinGenerateSessionBean)同步 pingeneration 会话 bean 对象的行。

它工作正常。在此之前,当我尝试同时生成两个批次时遇到问题。

它会产生任何问题吗?性能对我来说不是问题。

4

1 回答 1

1

synchronizedEJB 2.1 规范不允许使用关键字。

25.1.2 编程限制

本节描述 Bean Provider 必须遵循的编程限制,以确保企业 bean 是可移植的并且可以部署在任何兼容的 EJB 2.1 容器中。这些限制适用于业务方法的实现。

[...]

  • 企业 bean 不得使用线程同步原语来同步多个实例的执行。

我认为最好使用单例模式Singleton Beans在 EJB 3.1 中可用)用于“引脚生成”。

您也可以在 EJB 2.1 中采用这种方法,方法是调整 EJB 容器中相应池的大小。

于 2012-04-04T14:18:49.057 回答