0
votes

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,

  1. You cannot specify scope on stateless bean, except @dependent.
  2. 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.

1

1 Answers

0
votes

I think your issue is that your stateless bean is not really stateless. The container is free to re-use it since it's supposed to be stateless, but you're interpreting this as an error.