2013-08-30 2 views
0

ОС: Windows 7 JVM: JavaSE 1,7 Java EE: JBoss AS 7.1.1Ошибка в Weld (реализация CDI)?

сценария:

@Path("/test") 
@RequestScoped 
public class TestService { 

    @Inject 
    private Instance<Dummy> dummyinInstance; 


    @Path("/execute") 
    @GET 
    public void execute() { 
     dummyinInstance.get().execute(); 
    } 

} 

@Stateless 
public class Dummy { 
    private Date date=new Date(); 

    public void execute() { 
     System.out.println("current date="+date); 
    } 
} 

Когда я выполнить удаленно (с клиентом покоя) Teservice: выполнить много раз, печатается такая же дата.

ответ

1

Отсутствие Session Session Bean означает, что Session Bean не имеет состояния стажа. После вызова переменные не становятся пустыми. И SLSB не будет уничтожен так быстро (ну, вы можете его настроить). Значения внутренних переменных.

Но клиент к прокси-серверу без гражданства не имеет гарантии, что он получит тот же SLSB после нескольких вызовов. На самом деле это может выглядеть так, как будто вы взаимодействуете с SFSB, потому что контейнер вызывает методы на одном SLSB из своего пула SLSB, но вы никогда не должны полагаться на него.

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

Edit: sequencey вызовов выглядит немного как это (simplefied)


TestService-> SLSB-Proxy-> Container-Magic-> бассейн-> Еще более Container-Magic-> пустышки

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

+0

Спасибо, что у меня проблема с решением проблемы. Help – Belin

+0

. Вы также получите больше того, что ищете, если задаете дату с помощью метода '@ PostConstruct'. –

Смежные вопросы