2015 JavaOne EJB/CDI Alignment
-
Upload
david-blevins -
Category
Technology
-
view
27.896 -
download
1
Transcript of 2015 JavaOne EJB/CDI Alignment
![Page 1: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/1.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
EJB/CDI Alignment (What Does It Mean?)
David Blevins Tomitribe
Jean-Louis Monteiro Tomitribe
![Page 2: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/2.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
CDI - EJB Alignment (understand the conversation)
![Page 3: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/3.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
CDI History In Brief
![Page 4: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/4.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
CDI Influences
• Dependency Injection
• Definite Spring influence
• Strong Google Guice syntax
• Originally called “WebBeans”
• Grew from Seam
• Glued JSF and EJB together
![Page 5: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/5.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
CDI Behind the Scenes
• Achieved through sneaky interceptor trick
• Caused major delay to the Java EE 6 delivery
• Almost didn’t make it
• Criticized for going too far
• Stepped on EE toes (spec overlap)
• Stepped on SE toes (too “enterprisey”)
![Page 6: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/6.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
CDI Rifts
• Creation of @ManagedBean spec at EE level
• Fuzzy aim at unifying EE component models
• Effort to not lose ground in EE
• Too ambiguous
• Creation of @Inject spec at SE level
• Fuzzy aim at being simpler version of the standard
• Effort to not lose ground in SE
• Too simple, no spec
![Page 7: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/7.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
EJB Shortcomings
• Legacy
• Reputation
• Fully loaded by default
• Every method starts a transaction
• Throwing an exception destroys the instance
• Instances are non-concurrent
![Page 8: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/8.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
CDI Takeover
• EJB adopts CDI (Java EE 6)
• JSF adopts CDI (Java EE 7)
• MVC adopts CDI (Java EE 8)
• JAX-RS considers CDI (Java EE 8)
• CDI moves to SE (Java EE 8)
![Page 9: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/9.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Result for EJB?
• Java EE 7
• Focus on realignment: @Transactional
• Java EE 8
• First spec round with no new EJB JSR
• Realignment stalled
• Awkward relationship
![Page 10: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/10.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
CDI from an EJB perspective
![Page 11: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/11.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Proxy (Fake)
Proxy (Fake)
Interceptors
Decorators
Instance (Real)
Security
Transaction
Interceptors
Decorators
Instance (Real)
1. Resolution
2. Services
3. Invocation
(Pool)1. Resolution
2. Services
3. Invocation
(Context/Scope)
CDI 1.0 EJB 3.1
![Page 12: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/12.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Proxy (Fake)
Proxy (Fake)
Security
Transaction
Interceptors
Decorators
Instance (Real)
1. Resolution
2. Services
3. Invocation
(Pool)1. Resolution
2. Services
3. Invocation
(Context/Scope)
CDI 1.1 EJB 3.2
TransactionInterceptors
Decorators
Instance (Real)
![Page 13: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/13.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Lifecycle Lineup
• @Singleton
• same as CDI @ApplicationScoped
• @Stateful
• applies to any CDI Scope, not just @SessionScoped
• @Stateless
• no CDI equivalent
• @RequestScoped sort of close(ish)
![Page 14: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/14.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Awesome Power of Scopes
![Page 15: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/15.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
http://tomitribe.io/projects/microscoped
![Page 16: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/16.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Common Mistakes you will make
• Not putting a beans.xml in your app (Java EE 6)
• No CDI for you!
• Not understanding @Typed
• Psst, think @Local from EJB
• Bites you when using @Produces
• Not understanding what Dependent and NormalScope
• Dependent == plain object
• NormalScoped == proxied object
• Bites you when creating custom scopes
![Page 17: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/17.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Biggest benefits of CDI
• Very active and open expert group
• Fully extendable
• Beans can be added at runtime
• Fully Open Source
• Spec is open source
• All implementations are open source
• Compliance test (TCK) suite is open source
![Page 18: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/18.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
What is Aligned?
![Page 19: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/19.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Transactions - Aligned
• @TransactionAttribute & @ApplicationException
• Usable by
• @Stateless
• @Stateful
• @Singleton
• @Transactional (CDI equivalent, new in Java EE 7)
![Page 20: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/20.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Transaction - EJB flavor
![Page 21: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/21.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Transaction - CDI flavor
![Page 22: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/22.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Observations
• Pros
• New API is Better
• Doesn’t say “EJB”
• Cons
• Duplicating APIs
• Slight changes
• Conflicting usage?
![Page 23: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/23.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Observations - What happens?
• More work for servers to check for mistakes
• More work for IDEs to check for mistakes
• New users won’t know which to use and where
• Old users won’t remember how they are different
• One more place for us all to make mistakes and be confused
![Page 24: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/24.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
When you still need EJB (not yet aligned)
![Page 25: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/25.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Security
• @RolesAllowed, @PermitAll, @DenyAll
• Usable by
• @Stateless
• @Stateful
• @Singleton
• Alignment
• Low likelihood
• Pandora’s box
• Not actively being discussed
![Page 26: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/26.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Startup
• @Startup
• Eagerly creates the instance upon startup
• Usable by
• @Singleton
• Alignment
• Strong Candidate
![Page 27: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/27.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Asynchronous
• @Asynchronsous
• Allows method calls to be asynchronous and return Future objects
• Usable by
• @Stateless
• @Stateful
• @Singleton
• Alignment
• Strong Candidate
• Tracked in JIRA, high votes
![Page 28: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/28.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Schedule
• @Schedule
• Effectively Cron -- schedule invocations by minute or date, etc.
• Usable by
• @Stateless
• @Singleton
• Not @Stateful
• Alignment
• Strong Candidate
• Could be a challenge -- timers are stateless, scopes are not
![Page 29: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/29.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Locking
• @Lock(READ) / @Lock(WRITE) / @AccessTimeout
• Allows for synchronization of methods without complex code
• Usable by
• @Singleton
• Not @Stateless
• Not @Stateful
• Alignment
• Medium Candidate
• Applying to CDI possibly easier than EJB
![Page 30: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/30.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
MDBs
• @MessageDriven
• Connector-Driven Beans
• Usable by
• Not @Singleton
• Not @Stateless
• Not @Stateful
• Alignment
• Medium Candidate
• Pandora’s Box -- very complicated
![Page 31: 2015 JavaOne EJB/CDI Alignment](https://reader031.fdocuments.net/reader031/viewer/2022030317/586fdc7a1a28ab18428b64cd/html5/thumbnails/31.jpg)
Java
On
e
@dblevins @tomitribe #EJBCDI
Thank You