19

I'm just getting to grips with Java EE. I know that adding @Stateful or @Stateless annotations to a class will make it an EJB bean. But what is actually happening in the background once I do that? I see the following listed on Wikipedia in relation to EJBs.

  • Transaction processing
  • Integration with the persistence services offered by the Java Persistence API (JPA)
  • Concurrency control
  • Eventing using Java Message Service and Java EE Connector Architecture
  • Asynchronous method invocation

 

  1. When I mark a class as an EJB do items listed above get 'taken care of' in the background? An entirely different code path is followed that goes through each of the above once I make a class an EJB, is that what's happening?
  2. I see that using CDI I have the option of injecting EJB beans as oppposed to CDI beans. In that case should I always be using EJB beans instead of CDI beans as EJB beans are more powerful than CDI beans?
Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
sonicboom
  • 4,928
  • 10
  • 42
  • 60

1 Answers1

6

See this answer for some insight on both questions.

The highlights to focus on in that answer are that:

  • EJBs and CDI beans are proxied components, the object you get is a fake, the real object is hidden and this is how services are added: caller->proxy->services->realObject
  • CDI and EJB are effectively the same as such, mix them freely. Which you use depends on what you're attempting to do. I tend to use CDI unless I need one of the items listed in that answer. Then I just upgrade or add a new bean.

Note, one thing I did miss in that answer was the entire @MessageDriven concept.

MessageDriven Beans

It's very interesting you put JMS / Connector on the same line as that is exactly how they are implemented. Message-Driven Beans (MDBs) should actually be called "Connector-Driven Beans" as all communication and lifecycle of an MDB is actually tied to the Connector Architecture specification and has nothing to do with JMS directly -- JMS is just the only Connector people ever see. There's a great deal of potential there. Hopefully we'll see some improvements in Java EE 7.

Community
  • 1
  • 1
David Blevins
  • 19,178
  • 3
  • 53
  • 68
  • >It's very interesting you put JMS / Connector on the same line - It's from the EJB Wikipedia article. I put this there for exactly the reason you mention ;) (the MDB explanation further down in the article should clarify this aspect, but I would preferable need a source to refer to. Not sure if this SO answer qualifies as a source though) – Arjan Tijms Dec 19 '12 at 14:43