Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multi-threading in EJB's

I am learning about EJB's, so far I have read that multi-threading is not allowed in EJB'S, because it is the container who should care about thread-safety and let the developer only focus in the business logic, so basically that means that EJB ensures that only one thread has access at the same time to a method in a Session bean.

What happens then when we have many users accessing to the same method in a EJB? Is the container serializing the acceses, or is creating different instances of the bean, one per thread?

Could someone explain me what is the policy about that? Also I am a bit confused, why if multithreading is not allowed, so we cannot create our own threads, why we have this @Asynchronous annotation?

like image 790
fgonzalez Avatar asked May 03 '15 11:05

fgonzalez


1 Answers

Yes, it creates several instances, and pools them. See the official Oracle documentation:

Because a stateless session bean is never passivated, its lifecycle has only two stages: nonexistent and ready for the invocation of business methods. Figure 22-4 illustrates the stages of a stateless session bean.

The EJB container typically creates and maintains a pool of stateless session beans, beginning the stateless session bean’s lifecycle. The container performs any dependency injection and then invokes the method annotated @PostConstruct, if it exists. The bean is now ready to have its business methods invoked by a client.

At the end of the lifecycle, the EJB container calls the method annotated @PreDestroy, if it exists. The bean’s instance is then ready for garbage collection.

like image 175
JB Nizet Avatar answered Oct 16 '22 10:10

JB Nizet