синхронизированный блок в сеансовом компоненте ejb2 без сохранения состояния

До сих пор я слышал, что синхронизация не рекомендуется для сеансового компонента ejb.

У меня есть одна проблема, которую я решил с помощью synchronized.

Код, в котором я использовал синхронизированный.

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) для синхронизации объекта bean-компонента сеанса пингенерации.

Это работает нормально. До этого у меня была проблема, когда я пытался создать две партии одновременно.

Это создает какие-либо проблемы? Производительность для меня не проблема.


person chetan    schedule 04.04.2012    source источник


Ответы (1)


Ключевое слово synchronized не разрешено спецификацией EJB 2.1. .

25.1.2 Программные ограничения

В этом разделе описываются программные ограничения, которым должен следовать поставщик компонентов, чтобы гарантировать, что корпоративный компонент является переносимым и может быть развернут в любом контейнере, совместимом с EJB 2.1. Ограничения распространяются на реализацию бизнес-методов.

[...]

  • Корпоративный компонент не должен использовать примитивы синхронизации потоков для синхронизации выполнения нескольких экземпляров.

Я думаю, было бы лучше использовать одиночный шаблон (Singleton Beans доступны в EJB 3.1) для "генерации выводов".

Вы можете следовать этому подходу также с EJB 2.1, определив размер соответствующего пула в контейнере EJB.

person fglez    schedule 04.04.2012