I'm trying to inject a stateless ejb with default (@Dependent) scope, in a stateful ejb with (@SessionScoped).
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>
As I understand,
- You cannot specify scope on stateless bean, except @dependent.
- If you inject a @dependent scoped object, it follows the client lifecycle. It is never shared.
So, I am expecting that for every session, container will inject different StatelessBean. But it seems to inject same one in all sessions.
Any help on why this is happening?
I'm using GlassFish 3.1.
Thanks.