50 EJB 3 Best Practices in 50 Minutes

Slides:



Advertisements
Similar presentations
J0 1 Marco Ronchetti - Basi di Dati Web e Distribuite – Laurea Specialistica in Informatica – Università di Trento.
Advertisements

21 Copyright © 2005, Oracle. All rights reserved. Oracle Application Server 10g Transaction Support.
J2EE Architecture Overview
ISE 390 Dynamic Web Development Java EE Web Applications.
Spring, Hibernate and Web Services 13 th September 2014.
Module 20 Troubleshooting Common SQL Server 2008 R2 Administrative Issues.
Transactions Celsina Bignoli Motivations Atomic operations –Group of operation that must all succeed or all fail Network or machine.
An architecture for webb applications, J2EE
Component Patterns – Architecture and Applications with EJB copyright © 2001, MATHEMA AG Component Patterns Architecture and Applications with EJB JavaForum.
JBoss Seam: Contextual Components Jason Bechtel
Enterprise Applications & Java/J2EE Technologies Dr. Douglas C. Schmidt Professor of EECS.
Java 2 – Enterprise Edition Kevin J. LaFata April 21, 2003 UM – St. Louis.
1.
Copyright © 2012, Oracle and/or its affiliates. All rights reserved.Public 1 Testing Java EE Applications using Arquillian Reza Rahman Java EE/GlassFish.
Introduction to EJB INFORMATICS ENGINEERING – UNIVERSITY OF BRAWIJAYA Eriq Muhammad Adams J
TRANSACTION PROCESSING TECHNIQUES BY SON NGUYEN VIJAY RAO.
Session-02. Index. Jsp in Struts 2 Web.xml File in Struts 2.
Emmanuel Cecchet et al.  Performance Scalability of J2EE application servers.  Test effect of: ◦ Application Implementation Methods ◦ Container Design.
Distributed System Using Java 2 Enterprise Edition (J2EE)
Distributed Multitiered Applications The J2EE platform uses a multitiered distributed application model. Application logic is divided into components 1.
Kuali Rice at Indiana University Rice Setup Options July 29-30, 2008 Eric Westfall.
Ing. Ignacio Roqueta ARTech GeneXus and J2EE.
EJB Container services Presentation by Arun Kalluri (04/02/2001)
Entity Java Beans Jorg Janke Open Source ERP & CRM.
Enterprise JavaBeans. What is EJB? l An EJB is a specialized, non-visual JavaBean that runs on a server. l EJB technology supports application development.
TDDD05 EJB Lab (Part of slides reused from Mikhail’s) Lu Li
Message-Driven Beans and EJB Security Lesson 4B / Slide 1 of 37 J2EE Server Components Objectives In this lesson, you will learn about: Identify features.
Dependency Injection in Action Jan Västernäs. CADEC2006, DI, Slide 2 Copyright 2006, Callista Enterprise AB Agenda (DI=Dependency Injection) Background.
第十四章 J2EE 入门 Introduction What is J2EE ?
Enterprise Java v120131Intro to JavaEE1 Java EE 5 TM Introduction.
Lecturer: Prof. Piero Fraternali, Teaching Assistant: Alessandro Bozzon, Advanced Web Technologies: Struts–
Source: Peter Eeles, Kelli Houston, and Wojtek Kozaczynsky, Building J2EE Applicationa with the Rational Unified Process, Addison Wesley, 2003 Prepared.
Ch 2 – Application Assembly and Deployment COSC 617 Jeff Schmitt September 14, 2006.
1 Apache TomEE // JavaEE Web Profile on Tomcat Jonathan #TomEE.
FESA (Framework for Enterprise StegAnalysis) Charles D. George, Jr. Masters Project Fall Semester 2012.
Collaborate Lesson 4C / Slide 1 of 22 Collaborate Knowledge Byte In this section, you will learn about: The EJB timer service Message linking in EJB 2.1.
Overview and update Pete Raymond. » Purpose of this presentation » Background » JSR Requirements » Key concepts » Relationship to other standards/approaches.
Enterprise Java Overview Panos Konstantinidis Java Developer JUG Leader & Java Champion
Assignment of JAVA id : BSSE-F10-M-10-JAVA1 Overview of J2EE/Session 2/Slide 1 of 38.
Jonathan Gallimore | Tomitribe Cluster your application with JCache and CDI.
© FPT SOFTWARE – TRAINING MATERIAL – Internal use 04e-BM/NS/HDCV/FSOFT v2/3 JSP Application Models.
JAVA EE 6 Best Practices for Migrating Spring to WTF ?!?
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Introduction to Data Access with Spring.
JPA Transactions
Component Patterns – Architecture and Applications with EJB copyright © 2001, MATHEMA AG Component Patterns Architecture and Applications with EJB Markus.
Introduction to EJB. What is an EJB ?  An enterprise java bean is a server-side component that encapsulates the business logic of an application. By.
Java Programming: Advanced Topics 1 Enterprise JavaBeans Chapter 14.
Enterprise Java v121030Java EE Transactions1. Enterprise Java v121030Java EE Transactions2 Goals Understand the basic concepts behind a transaction Be.
Enterprise Java v JNDI Enterprise Naming Conext (ENC) and Injection JNDI ENC.
EJB Enterprise Java Beans JAVA Enterprise Edition
Apache TomEE Tomcat with a kick. Apache TomEE: Overview ● Java EE 6 Web Profile certification in progress ● Apache TomEE Includes support for: ● Servlet.
Enterprise Java Beans. Contents  Understanding EJBs  Practice Section.
Session Beans and The Timer Service. Contents  Session Beans  The Timer Service.
Callbacks and Interceptors. Contents  Session Beans Life Cycle  Interceptors.
The Holmes Platform and Applications
Top 50 Java EE 7 Best Practices
Enterprise JAVA Bean.
Structure of a web application
Java EE Overview The problem Java Enterprise Edition attempts to solve: maximize the use of Java technologies by providing a suite of Java technology specifications.
ISE 390 Dynamic Web Development
Java EE Overview The problem Java Enterprise Edition attempts to solve: maximize the use of Java technologies by providing a suite of Java technology specifications.
ESIS Consulting LLC (C) ESIS Consulting LLC. All rights reserved
Objectives In this lesson, you will learn to:
Component-based Applications
Component Technology Bina Ramamurthy 2/25/2019 B.Ramamurthy.
Developing and testing enterprise Java applications
Enterprise Java Beans.
CONCURRENCY VULNERABILITIES
Knowledge Byte In this section, you will learn about:
Objectives In this lesson, you will learn about:
Presentation transcript:

50 EJB 3 Best Practices in 50 Minutes Michael Remijan – Fusion Technology Solutions Ryan Cuprak – Dassault Systemès

About Us Michael Ryan @mjremijan mjremijan@yahoo.com http://mjremijan.blogspot.com http://linkedin.com/in/mjremijan Ryan @ctjava rcuprak@gmail.com http://www.cuprak.info

EJB 3 In Action 2nd Edition Updated For EE 7 EJB 3.2

#1 Where to use EJBs Full EE server not needed Web profiles TomEE @since 2009 Introduced in EE 6 JSF 2.2, CDI 1.1, EJB 3.2 Lite, JPA 2.1, JTA 1.2, bean validation. TomEE Resin GlassFish WebLogic WildFly JBoss App Server Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

@Singleton Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#2 Concurrency Singleton beans are unique per deployment. Default concurrency on singleton beans is WRITE. Default type is CONTAINER @ConcurrencyManagement ConcurrencyManagementType.CONTAINER Use @Lock(LockType.READ) – on non-mutable methods Use @AccessTimeout() – to reduce the chances of a deadlock. value = -1 – Wait indefinitely value = 0 – Timeout immediately if locked value = 1+ - Wait this many time units (default millis) unit = java.util. concurrent.TimeUnit ConcurrencyManagementType.BEAN Program for multiple threads – use sparingly. Don’t mix approaches! Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#3 Batch Use Singletons to schedule batch jobs Java Batch API (JSR 352) @Startup – Container starts automatically @Schedule – CRON scheduler Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#4 Batch Server Common question Does the batch API handle clustering? No. How do you handle deployment to a cluster? Each cluster will run the job Synchronization strategies Database lock @Resource environment entry File system file/directory check Avoid it all together Dedicated server just for batch operations Typically need special resources anyway Separate from application server stack Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

@Stateful Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#5 JSF Bean Stateful bean can store session state Used directly by JSF Target of JSF actions Produce bean JSF pages want. Use CDI instead @SessionScoped @ConversationScoped Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

@Stateless Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#6 Injection Am I a POJO? Am I an EJB? Answer is YES! Both are valid Prefer @Inject for @Local, @LocalBean, no-interface EJB Running in web profile Must use @EJB for: @Remote EJB Running in full EE server Remote XA Transactions Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#7 DAO Pattern Pooled! Do not implement DAOs as EJBs! EJB chaining is bad for performance Wait for pooled instance? Pooled! Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#8 Inject DAO Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#9 DTO Pattern 15 years ago Data Transfer Object (DTO) pattern created EJBs are mysterious things All EJB calls remote Container managed Entity beans SQL select for getter methods Data Transfer Object (DTO) pattern created Get massive object with one call All data, even unrelated Now EJBs are POJOs EJBs are local EJBs are injectable Avoid the DTO pattern Multiple injects to get different data Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#10 @Observes EJBs can observe CDI events Method must be Static || method on @Local interface || public method on @LocalBean || public method on no-interace bean Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#11 @Named Beware! @Named on EJBs is convenient but dangerous. Code below results in 2 transactions in rendering 2 Transactions Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#12 Threading Never been a good idea to do your own threading. Even worse idea now More communication between client and server JAX-WS JAX-RS WebSockets All fighting for threads Threads must be managed Use ManagedExecutorService Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#13 SOAP Web Service Expose EJB directly as a Web Service Basically RMI Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#14 REST Web Service Do not expose EJB methods directly as RESTful services. Aggregate operations into a single message. Service should be a façade over EJBs. RESTful services are stateless – no Stateful Session Beans. Stay true to RESTful services design principles: PUT/POST/GET/DELETE Don’t let transport specific code creep into EJBs: JsonGenerator, JsonGeneratorFactory, etc. Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#15 @Remote Beans Full EE Server Why? @Remote Implementation Bean EJBs are accessible remotely Not available in web profile Why? Heavy CPU or data processing Clients need to be transactional @Remote Must be on an interface. . .AccountService Implementation Bean Must implement interface. . .AccountServiceBean No-interface bean not allowed Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#16 @Remote ejb-xml ejb-jar.xml Use <module-name> to control portable JNDI name Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#17 @Remote web.xml web.xml Make funny application-level lookups Helps ensure you are getting the right bean Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#18 @Remote glassfish-web.xml Application server specific mapping Link funny name to real location in JNDI Use EE standard global JNDI name Avoid using proprietary names. . .they may change <module-name> Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#19 @Remote Inject as EJB @Inject cannot be used Use @EJB with lookup Proxied remote resource Use @EJB with lookup “module” is preferred over “comp” Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Security & Transactions Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#20 Security in beans Define @DeclaredRoles Protect with @RolesAllowed Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#21 Security mapping Roles in code Roles in your enterprise Database, LDAP Not necessarily the same Develop code to meet security requirements Map code roles to enterprise roles Application server specific glassfish-ejb-jar.xml Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#22 Transactions This is the default Let the container handle it Avoid Bean Managed Transaction! Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#23 Transaction Rollback Avoid programmatic rollback! Error prone Going to miss a rollback somewhere Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#24 Transactions and Exceptions Don’t assume automatic rollback on Exceptions! System Exceptions Container managed Rolled back Bean managed Marked for rollback RemoteException, RuntimeException, EJBException, etc. Application Exceptions No automatic rollback of transaction Use @ApplicationException Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#25 Isolation Levels Configure your isolation levels on your JDBC pools Glassfish Use multiple Persistence Units and different pools to access different isolation levels. Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Transaction Isolation Level Description read-uncommitted Dirty reads, non-repeatable reads, and phantom reads can occur.  read-committed Dirty reads are prevented; non-repeatable reads and phantom reads can occur.  repeatable-read Dirty reads and non-repeatable reads are prevented; phantom reads can occur.  serializable Dirty reads, non-repeatable reads and phantom reads are prevented.  Dirty Reads: Technically speaking a dirty read happens when a transaction reads some data that is being changed by another transaction which is not committed yet. Non-Repeatable Reads:  A Non-Repeatable Read happens when a transaction reads some records that another transaction is modifying. If the reader transaction tries the same query within the same transaction again, the result will be different compared to the first time. Phantom Reads: Occur when we are reading a set of records with a specific WHERE clause and another operation inserts new records matching our WHERE clause. Our transaction has read the records without including the record being inserted. Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#26 XADataSource Mixing JMS and Database? Make sure you configure an XADataSource GlassFish Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#27 EJB Decoupling Avoid unnecessary coupling Use CDI Events Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#28 WebSockets Exposing an EJB as a WebSocket endpoint? Not well defined in the Java EE 7 specification Implementation specific at this point Invoking an EJB from a WebSocket endpoint Use @Inject or @EJB Inject into a WebSocket Similar to JAX-RS Stateful and SingleBeans are the best match. Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Messaging Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#29 Classic JMS After 10 years, this classic code can go away! (Arun Gupta) [Michael] Specify the locking policy on singleton beans. Singleton beans are are unique per JVM. By Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#30 JMSContext Greatly simplied API (Arun Gupta) Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#31 Poison JMS - Redelivery Message that keeps getting re-delivered! Use getJMSRedelivered() Surround with try-catch Wrong type! Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#32 Poison JMS - Transaction A JPA rollback will cause a JMS rollback Use helper method with REQUIRES_NEW Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Interceptors Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#33 Class Interceptors Simplified AOP interceptors for around-invoke Invoked before any of the EJB’s methods are invoked Not called again for internal method calls Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#34 Method Interceptors Simplified AOP interceptors for around-invoke Invoked before the specific EJB’s method is invoked Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#35 Default Interceptor The ejb-jar.xml must be used for a default interceptor Attaches to all methods of every bean Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#36 Interceptor Ordering Called from most general to most specific Default -> Class -> Method Called in the order they appear in XML or annotations Use ejb-jar.xml to change ordering Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#37 Interceptor Exclusion All interceptors are applied Exclusion by annotation @ExcludeDefaultInterceptors @ExcludeClassInterceptors Exclusion by ejb-jar.xml Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Testing Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#38 Unit Testing EJB classes are POJOs! Unit test one class at a time Mock external resources JUnit, Mockito maven-surefire-plugin *Test.java Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#39 Integration Testing Embedded Embedded container API EJBContainer Mimic (In-memory) resources JUnit maven-failsafe-plugin *IT.java Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#40 Integration Testing Alternative Alternatives are additional implementations of a Bean Ignored by CDI when looking for an injection match Enabled by beans.xml Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Packaging Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#41 EAR Recall global JNDI lookup names for EJBs Default value for [app-name] is EAR file name. ejbrace-business-ear-1.0.0.0-SNAPSHOT.ear Use application.xml <application-name> <display-name> java:<namespace>/[app-name]/<module-name> /<bean-name>[!fully-qualified-interface-name] Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#42 EJB-JAR Recall global JNDI lookup names for EJBs Default value for <module-name> is EJB-JAR file name. ejbrace-ejb-1.0.0.0-SNAPSHOT.jar Use ejb-jar.xml <module-name> java:<namespace>/[app-name]/<module-name> /<bean-name>[!fully-qualified-interface-name] Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#43 JPA Auto-scanning for entities not in the JAR with persistence.xml Core (Entites) Server (EJBs) JavaFX (Client) Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#44 Override Annotations The ejb-jar.xml can override certain annotations Method permission Annotations allow all roles for testing Production adds role security ebj-jar.xml glassfish-ejb-jar.xml Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#45 Alternatives Per Environment The bean.xml can specify alternate beans Have Maven builds for different environments Alternatives provide environment specific implementations Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#46 Batching EAR Don’t have batch jobs on you application stack Avoid hacks to only get one instance to run Dedicated batch server Separate EJB-JAR project Job XML documents Readers Processors Writers EAR project Combines Batch EJB-JAR and application EJB-JAR Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Miscellaneous Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#47 Which Remote Technology? Remote EJB, JAX-RS, JAX-WS, Servlets Speed? Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#48 JNDI Lookup Injection is great JNDI lookups still needed? Changing environment properties Non-container managed classes – new SomeBean() Multiple resources determined by user input Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

#49 Securing RESTful Services Use tokens with RESTful Web Services (OWASP). Leverage JASPIC to setup JAAS environment.

#50 Timers Use programmatic or declarative timers? Considerations: Programmatic - defined at runtime Declarative – annotated methods on an EJB Considerations: Clustering Persistence

#50 Timers

Final Thoughts Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Don’t Panic Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Buy the Book Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne

Evangelize EJB is a super technology Michael Remijan | Ryan Cuprak | https://github.com/mjremijan/JavaOne