2012-01-31 5 views
6

Я знал, сохраняющие состояние фасоль поддерживать разговорную сеанс между различными методом экземпляра вызова, но без гражданства будет not.My вопрос, предположим, что у меня есть лица без реализации компонента, как показано нижеразница между Stateless и сессионного компонента

import javax.ejb.Stateful; 
import javax.ejb.Stateless; 

import com.tata.ejb3.data.HelloEJBInterface; 

@Stateless 
public class ValueEJB implements ValueEJBInterface{ 

    private int value; 
    @Override 
    public int getValue() { 
     return this.value; 
    } 

    @Override 
    public void setValue(int value) { 
     this.value = value; 
    } 
} 

У меня есть рожкового клиент (сервлет), который инициирует вызов боба, как показано ниже

@EJB(mappedName="E/ValueEJB /remote") 
ValueEJBInterface value; 

.... 

value.setValue(250); 
System.out.println(value.getValue());//This statement prints the value 250 

.... 

Согласно моему пониманию, как моей фасоль имеет состояние бобов он не должен отображаться со значением 250.

значение частного значения; - это мгновенная переменная, если один из методов без сохранения установленным значением, значение будет истекло при выходе метода. Но здесь я могу получить значение «250» даже через мой второй вызов метода. Является ли это нарушением концепции без гражданства? Мне чего-то не хватает?

ответ

2

Интересный вопрос, и в основном вы совершенно правы. Я сделал некоторые исследования и общий совет: «Ожидайте, что ваш компонент будет забывать все после каждого вызова метода ...» (page 81). Кроме того, согласно этому ресурсу, алгоритм, отвечающий за сохранение состояния сессионных компонентов без состояния, является специфичным для контейнера/поставщика. Таким образом, контейнер может решить уничтожить, воссоздать или очистить экземпляр после выполнения метода.

Вы можете создать многопоточный тест и посмотреть, как он ведет себя с многочисленными клиентами.

+0

Okay.You являются right.if я не ошибаюсь, подобный сценарий ведет себя по-разному в EJB2.0/WebLogic EJB контейнер, где мой клиент получил EJB 0, как ПолучитьЗначение, значит на мой следующий вызов, контейнер подается с другой экземпляр ejb. – ASChakkalakal

2

Нарушений нет. Это потому, что один и тот же экземпляр компонента выбирается контейнером из пула для обслуживания другого запроса.

Фасонированные фасоли объединены &, поэтому они имеют преимущество в производительности по сравнению с statefull beans, а также их основная цель заключается в обработке без какого-либо состояния.

Чувствительные или пользовательские данные не должны храниться в переменных экземпляра без фасов. Они должны широко использоваться для обработки данных без какого-либо рассмотрения состояния.

Может ссылаться на here на их события жизненного цикла, обрабатываемые контейнером.

+0

Спасибо за подробности. Еще один вопрос здесь. @stateless (mappedName = "XXX"), будет ли мой ejb передаваться через XXX здесь после? Я видел, что JBoss AS предоставил различное JNDI-отображение, несмотря на XXX. Это чисто специфический поставщик? – ASChakkalakal

+0

Нет, mappedName является необязательным атрибутом и остается поставщику, JBoss отказывается от этого атрибута и использует свое собственное соглашение. –

+0

Я заметил еще одну интересную вещь, mappedName принимается только тогда, когда мой сервисный интерфейс был удаленным интерфейсом. Когда я указал mappedName для EJB, чей служебный интерфейс, аннотированный с помощью @Local (или даже не указан ничего здесь), мой контейнер JBoss проигнорировал его и связанный со своим собственным JNDI, somthing like xxxxx/Local – ASChakkalakal

5

Разница между Stateful v Поведение бродяги без гражданства при вызове разных методов.

STATEFUL: При вызове разных методов в компоненте Stateful Bean создаются разные экземпляры bean.

((MyStatefulBeanRemote) ctx.lookup("ejb/MyStatefulBean")).doingStatefulThing(); 

((MyStatefulBeanRemote) ctx.lookup("ejb/MyStatefulBean")).doingNothingStatefulThing(); 

***Output: Note the creation of separate objects.*** 

INFO: Calling doingStatefulThing...com.myeclipseide.ejb3.stateful.**[email protected]** 

INFO: Calling doingNothingStatefulThing...com.myeclipseide.ejb3.stateful.**[email protected]** 

Безгражданство,: При вызове различных методов без гражданства Bean, бобы собирают, следовательно, никаких новые экземпляры компоненты не будут созданы.

((MyStatelessBeanRemote) ctx.lookup("ejb/MyStatelessBean")).doSomething(); 

((MyStatelessBeanRemote) ctx.lookup("ejb/MyStatelessBean")).doNothing(); 

***Output: Note the reuse of he bean object.*** 

INFO: Doing something ...com.myeclipseide.ejb3.stateless.**[email protected]** 

INFO: Doing Nothing ...com.myeclipseide.ejb3.stateless.**[email protected]** 
Смежные вопросы