0
我試圖用(@SessionScoped)在有狀態ejb中注入默認(@Dependent)作用域的無狀態ejb。在有狀態EJB中注入無狀態EJB不能按預期工作
StatelessBean.java
@Stateless
@LocalBean
public class StatelessBean implements Serializable {
private static final long serialVersionUID = -9166485686181431397L;
private long stamp; // + getter/setter
public StatelessBean() {
super();
}
@PostConstruct
void init() {
setStamp(new Random().nextLong());
System.out.println("Created stateless " + getStamp());
}
}
StatefulBean.java
@SessionScoped
@Named("bean")
@Stateful
@LocalBean
public class StatefulBean implements Serializable {
private static final long serialVersionUID = 8358897101178976319L;
@Inject
private StatelessBean statelessBean; // + getter/setter
@PostConstruct
void init() {
System.out.println("Created stateful " + new Random().nextLong());
}
public long getStamp() {
return getStatelessBean().getStamp();
}
}
scope.xhtml
.
.
.
<h:body>
<h:outputText value="#{bean.stamp}" />
</h:body>
</html>
正如我理解過程rstand,
- 您不能在無狀態bean上指定範圍,除了@dependent。
- 如果注入@dependent範圍對象,它將遵循客戶端生命週期。它永遠不會共享。
所以,我期待每一個會話,容器將注入不同的StatelessBean。但它似乎在所有會議中都注入了相同的一個。
任何幫助,爲什麼發生這種情況?
我正在使用GlassFish 3.1。
謝謝。
@convener感謝您的回覆。但我現在認爲,這個問題本身可能是無關緊要的。我最近讀了(不記得在哪裏)CDI是有狀態的豆。無狀態bean將總是像沒有CDI一樣運行。我想,應該記住,你只有一種方法調用無狀態bean,有或沒有CDI。學習到教訓了! –