SlideShare a Scribd company logo
TOP 50 JAVA EE 7 BEST
PRACTICES
Ryan Cuprak
Michael Remijan
About Us
Ryan
• @ctjava
• rcuprak@gmail.com
• http://www.cuprak.info
• https://www.linkedin.com/in/rcuprak
Michael
• @mjremijan
• mjremijan@yahoo.com
• http://mjremijan.blogspot.com
• http://linkedin.com/in/mjremijan
EJB 3 In Action 2nd Edition
Updated For
• EE 7
• EJB 3.2
Java EE 7
Concurrency
Utilities
Batch
Applications
Java
API for
JSON
Java API for
WebSocket
JSF 2.2
JSX-WS
2.2
JAX-RS
2
EL 3
Servlet 3.1
Common
Annotations 1.2
Interceptors 1.2 CDI 1.1
Managed Beans 1.0 EJB 3.2
Connector
1.7
JPA 2.1 JTA 1.2 JMS 2
JSP 2.3
JAXB
#1 JAX-RS: API Versioning
Version your JAX-RS with one of two approaches:
1. URL
http://ctjava.org/v2/meetings
http://ctjava.org/v1/meetngs
2. Media Content or Header Param
curl -H "Content-Type:application/srv-v4+json” …
Return HTTP Status Codes for services moved/changed:
• 301 Moved Permanently
• 302 Found
#1 JAX-RS: API Versioning (Continued…)
Approach 1: URL
Approach 2: Media Types
#1 JAX-RS: API Versioning (Continued…)
Service Moved Permanently
#2 JAX-RS: Error Handling
Provide ExceptionMappers to handle and process errors.
#2 JAX-RS: Error Handling (Continued…)
HTML content is hardly a friendly response for an API!
#2 JAX-RS: Error Handling (Continued…)
#3 JAX-RS: Caching
Tell clients to cache data!
#4 JAX-RS + Bean Validation
Use Bean Validation to check data.
#5 JAX-RS: Compress Responses
Use gzip compression for responses to reduce bandwidth.
#6 Securing RESTful Services
• Use tokens with RESTful Web Services (OWASP).
• Leverage JASPIC to setup JAAS environment.
#7 JAX-RS + EJB
• Use @Stateless and @Path together
• Pooled, thread safe, monitored
#7 JAX-RS + EJB (Continued…)
• http://localhost:4848/monitoring/domain/server/applications/WebApp
lication1/StatelessResource/bean-methods/getText[.json]
#8 JAX-RS: Asynchronous API Gateway
• Gateway calls multiple microservices asynchronously
• Combines results into a DTO
#8 JAX-RS: Async…(Continued…)
• Gateway calls multiple microservices asynchronously
• Combines results into a DTO
#9 JPA: Pagination
Use pagination for potential large result sets.
#9 JPA: Pagination (Continued…)
#10 JPA: Lazy Relationships
Avoid unnecessary queries – use Fetch on Lazy
relationships.
#10 JPA: Lazy Relationships (Continued…)
1. SELECT MEETINGID, DATE, MEETINGABSTRACT, TITLE FROM MEETING WHERE (MEETINGID
= ?)
2. SELECT t1.SPEAKERID, t1.BIOGRAPHY, t1.FIRSTNAME, t1.LASTNAME FROM meeting_speakers
t0, SPEAKER t1 WHERE ((t0.meetingid = ?) AND (t1.SPEAKERID = t0.speakerid))
#10 JPA: Lazy Relationships (Continued…)
1. SELECT t1.MEETINGID, t1.DATE, t1.MEETINGABSTRACT, t1.TITLE, t0.SPEAKERID, t0.BIOGRAPHY,
t0.FIRSTNAME, t0.LASTNAME FROM SPEAKER t0, meeting_speakers t2, MEETING t1 WHERE
((t1.MEETINGID = ?) AND ((t2.meetingid = t1.MEETINGID) AND (t0.SPEAKERID = t2.speakerid)))
1 Query Not TWO!
#11 JPA: Cascade
• Don’t forget cascade levels to handle child data
• cascade=ALL is equivalent to cascade={PERSIST,
MERGE, REMOVE, REFRESH, DETACH}
#12 JPA: Entity Graphs
#13 JPA + DAO
Put CRUD operations into DAOs.
#14 JPA: hashcode() & equals()
The equals and hashcode are required for:
• Entity is added to a collection
• When re-attaching entities to a new persistence context.
Important points:
• Do not use generated identifiers
• Use business key equality
#14 JPA: hashcode() & equals() Continued…
#15 JPA: Optimistic Locking
• Don’t roll your own
• Use @Version for optimistic locking: Integer
#15 JPA: Optimistic Locking (Continued…)
• Timestamp
#16 JPA: Pessimistic Locking
• PESSIMISTIC_READ, PESSIMISTIC_WRITE
• Lock timeout
HINT
#17 JPA: Mapping Inheritance
• Inheritance can have a big impact upon performance.
• Three approaches:
• Single table
• Joined-tables
• Table-per-class
• Denormalize for better performance
#18 JPA L2 Cache
JPA 2 introduced the L2 Cache, use this cache for:
• Entities that are frequently read
• Entities that are modified infrequently
• Not critical if stale
• L2 cache can consume large amounts of memory
• ALL
• NONE
• ENABLE_SELECTIVE
• DISABLE_SELECTIVE
Are you using a default setting?
#18 JPA L2 Cache (Continued…)
Mark entity for L2 cache
Bypass L2 cache
#19 JPA: Persisting ENUM
• ENUM is a good case of converting data types
• Use a @Converter
#19 JPA: Persisting ENUM (Continued…)
• @Converter
• AttributeConverter<X,Y>
• X is my application, Y is the database
#20 EJB: Transaction Handling
• EJBs exist to handle transactions. Keep them at the right layer
• Don’t ignore transactions. Default: REQUIRED
• JAX-RS endpoints, database reads & performance
#21 EJB: Stateless Thread Safety
• Stateless beans are a pooled, managed resource
• Pools configurable by the application server
#22 EJB: Asynchronous
• @Asynchronous runs in container-managed thread
• Return Future<> to get results later
• Ideal for wrapping JAX-RS calls
• Good way to avoid any of your own threading
#23 EJB: Security
• Use declarative security and let the container handle it
• Avoid programmatic security
• EE servers trust principal/roles passed between
containers.
#23 EJB: Security (Continued…)
• EE Configuration
• web.xml
• @DeclaredRoles
• @RolesAllowed
• Custom Configuration
• EE Server Realm
• glassfish-web.xml
#24 EJB: Avoid Lengthy Initialization
Don’t abuse startup – @PostConconstruct delays
You delay initialization of the container!
#24 EJB: Avoid Lengthy Initialization
#25 CDI: Observers
• In-memory event processing
• Very “reactive”
• Decouple work to be done, avoids unnecessary
dependencies
• Create an event to fire
#25 CDI: Observers (Continued…)
• Fire the event
• Observers process the event
#26 CDI: Producer + Cache
• Use a producer to customize creation of an object
• Producer method is always called, so cache the instance
#27 CDI: Interceptors
• Limit to cross-cutting concerns
• Do not use to change business logic
• Create an annotation
#27 CDI: Interceptors
• Create the interceptor
#27 CDI: Interceptors
• Apply the interceptor
#28 CDI: Decorators
• Use to enhance or decorate existing code
• Open-close principle
• Do not use for cross-cutting concerns
#28 CDI: Decorators (Continued…)
• /WEB-INF/beans.xml
• /META-INF/beans.xml
#29 CDI: Transactions
Java EE introduced @Transactional for non-EJBs.
Pro: Easier to utilize transactions outside of EJB.
Con: Mixes layers – transactions & rest etc.
#30 CDI: Bean Discovery
• Java EE 7 CDI is enabled by default.
• beans.xml is no longer required as in EE 6
• Bean discovery mode:
• Annotated – only annotated classes
• All – includes beans that are not annotated
• None – CDI disabled
• Default mode is ‘annotated’
#31 Batch: Java EE not SE
• Think Java EE for batch, not SE
• Batch API
• Cron like schedule on EJB methods
• META-INF/batch-jobs/processInvoices.xml
#32: Batch Best Practices
• Package/deploy batch jobs separately
• Implement logic to cleanup old jobs
• Implement logic for auto-restart
• Test restart and checkpoint logic
• Configure database to store jobs
• Configure thread pool for batch jobs
• Only invoke batch jobs from logic that is secured (@Role
etc.)
#33 JAXB Primitive Data Types
anySimpleType
decimal
integer
long
int
short
byte
float double
nonPositiveInteger
negativeInteger
nonNegativeInteger
unsigneLong positiveInteger
unsignedInt
unsignedInt
unsignedByte
#34 JAXB: Date & Time Representation
• Use XMLGregorianCalendar for dates
• Avoid java.util.Date and java.util.Calendar
• XMLGregorianCalendar
• Handles long fractions of seconds – important to .NET
interoperability
#35 JAXB: Annotate
Don’t let JAXB generate everything!
#36 JAX-WS: RPC vs. Document
• Four different possibilities:
• RPC/Literal
• RPC/Encoded
• Document/Literal
• Document/Encoded
• Encoded is not supported by WS-I
• Default and most commonly used is Document/Literal
• Use Document/Literal
• RPC/Literal:
• Limited to basic XSD types
• WSDL will not include types section to constrain parameters
#37 JAX-WS: JAXB Gotcha
• JAXB will serialize an entire object graph.
Oops!
Use either:
• DTO – Data Transfer Object
• @XmlTransient
#38 JAX-WS Interoperable Services
• Design service starting with the WSDL
• Create data types using XSD
• Keep data types SIMPLE
• Avoid xsd:anyType
• Avoid sending Null values
• Use byte[] instead of String when character encoding is
unknown
#39 SOAP Faults
• Types of SOAP faults:
• Modeled – exception explicitly thrown by business logic.
• Mapped to wsdl:fault in WSDL file
• Unmodeled – RuntimeException, represented as generic
SOAPFaultException
#40 JAX-WS Input/Output Processing
Use SOAP message handlers to pre/post process
messages and handle SOAP faults.
#40 JAX-WS Input/Output Processing
#41 JAX-WS Security
Specify Roles
#42 JAX-WS Large Files
Use W3C Message Transmission Optimization Mechanism
(MTOM) to handle large files.
#43 Deployment Classpath
• Are you pulling in third-party JAR files?
• Do these JAR files include Java EE annotated classes?
• Are you accidently deploying web services, MDBs etc.?
• Are you including container dependencies?
BAD!
#44 Threading
• Never create create threads.
• Container manages resources.
#44 Threading…
Thread Factory
#45 Distributed Caches
• Don’t treat @Singleton as a “global” singleton!
• Use JCache implementation (ex. HazelCast)
Java EE Server #1
app.war
SingletonBean
Java EE Server #2
app.war
SingletonBean
#46 Testing: Load
Load testing always at 100%?
Scenario:
• Message Driven Bean with a connection to a remote
resource.
• Standing pool size: 3
Oops!
#46 Testing Load (Continued…)
Oops, resource only leak as bean instances fluctuate!
0
5
10
15
20
25
30
35
1 2 3 4 5 6 7 8 9
Leak
Bean
Returning to standing pool size leaks resources.
#47 Testing: Integration
Use Arquillian:
#48 Java EE Tutorial Table of Contents
• What’s in Java EE?
• 918 pages
• TOC is a great summary
• 30+ pages
• Highlights just how much is
in EE
#49 There are no “small” applications
• Don’t fall into these traps:
• “It’s just a simple application”
• “It only needs to do…”
• “Code it up real quick…”
• EE Specification exists for a reason
• Multiple users
• Concurrency
• Multi-threading
• Transaction management
• External resources
• Messaging
#50 Start with an EE Server
• Because there are no “small” applications
• Start with an EE Server
Avoid filling yourWAR with
“EE Features”
because you are not using an EE server
• But Servers are “heavy-weight”?
• Payara
• WildFly
• TomEE
• Benefits
• “Light-weight”
• Regular updates
• Great online community support
Join Us!
https://javaee-guardians.io
Q&A
Ad

More Related Content

What's hot (20)

Oak, the architecture of Apache Jackrabbit 3
Oak, the architecture of Apache Jackrabbit 3Oak, the architecture of Apache Jackrabbit 3
Oak, the architecture of Apache Jackrabbit 3
Jukka Zitting
 
Getting Started With Docker | Docker Tutorial | Docker Training | Edureka
Getting Started With Docker | Docker Tutorial | Docker Training | EdurekaGetting Started With Docker | Docker Tutorial | Docker Training | Edureka
Getting Started With Docker | Docker Tutorial | Docker Training | Edureka
Edureka!
 
Docker Security: Are Your Containers Tightly Secured to the Ship?
Docker Security: Are Your Containers Tightly Secured to the Ship?Docker Security: Are Your Containers Tightly Secured to the Ship?
Docker Security: Are Your Containers Tightly Secured to the Ship?
Michael Boelen
 
Java EE Introduction
Java EE IntroductionJava EE Introduction
Java EE Introduction
ejlp12
 
Applications secure by default
Applications secure by defaultApplications secure by default
Applications secure by default
SecuRing
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Matt Raible
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
Jeevesh Pandey
 
Docker Basics
Docker BasicsDocker Basics
Docker Basics
DuckDuckGo
 
A Hands-on Introduction on Terraform Best Concepts and Best Practices
A Hands-on Introduction on Terraform Best Concepts and Best Practices A Hands-on Introduction on Terraform Best Concepts and Best Practices
A Hands-on Introduction on Terraform Best Concepts and Best Practices
Nebulaworks
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
Santosh Kumar Kar
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
Pubudu Jayawardana
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
Nicolas Hennion
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
fazalraja
 
Java 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgradeJava 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgrade
Simone Bordet
 
Monitoring Kubernetes with Prometheus
Monitoring Kubernetes with PrometheusMonitoring Kubernetes with Prometheus
Monitoring Kubernetes with Prometheus
Grafana Labs
 
Docker introduction for the beginners
Docker introduction for the beginnersDocker introduction for the beginners
Docker introduction for the beginners
Juneyoung Oh
 
AMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does It
AMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does ItAMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does It
AMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does It
Nikhil Mittal
 
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Edureka!
 
Selenium Tutorial Java
Selenium Tutorial  JavaSelenium Tutorial  Java
Selenium Tutorial Java
Ahmed HARRAK
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
Docker, Inc.
 
Oak, the architecture of Apache Jackrabbit 3
Oak, the architecture of Apache Jackrabbit 3Oak, the architecture of Apache Jackrabbit 3
Oak, the architecture of Apache Jackrabbit 3
Jukka Zitting
 
Getting Started With Docker | Docker Tutorial | Docker Training | Edureka
Getting Started With Docker | Docker Tutorial | Docker Training | EdurekaGetting Started With Docker | Docker Tutorial | Docker Training | Edureka
Getting Started With Docker | Docker Tutorial | Docker Training | Edureka
Edureka!
 
Docker Security: Are Your Containers Tightly Secured to the Ship?
Docker Security: Are Your Containers Tightly Secured to the Ship?Docker Security: Are Your Containers Tightly Secured to the Ship?
Docker Security: Are Your Containers Tightly Secured to the Ship?
Michael Boelen
 
Java EE Introduction
Java EE IntroductionJava EE Introduction
Java EE Introduction
ejlp12
 
Applications secure by default
Applications secure by defaultApplications secure by default
Applications secure by default
SecuRing
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Matt Raible
 
Spring boot Introduction
Spring boot IntroductionSpring boot Introduction
Spring boot Introduction
Jeevesh Pandey
 
A Hands-on Introduction on Terraform Best Concepts and Best Practices
A Hands-on Introduction on Terraform Best Concepts and Best Practices A Hands-on Introduction on Terraform Best Concepts and Best Practices
A Hands-on Introduction on Terraform Best Concepts and Best Practices
Nebulaworks
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
Nicolas Hennion
 
Docker: From Zero to Hero
Docker: From Zero to HeroDocker: From Zero to Hero
Docker: From Zero to Hero
fazalraja
 
Java 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgradeJava 9/10/11 - What's new and why you should upgrade
Java 9/10/11 - What's new and why you should upgrade
Simone Bordet
 
Monitoring Kubernetes with Prometheus
Monitoring Kubernetes with PrometheusMonitoring Kubernetes with Prometheus
Monitoring Kubernetes with Prometheus
Grafana Labs
 
Docker introduction for the beginners
Docker introduction for the beginnersDocker introduction for the beginners
Docker introduction for the beginners
Juneyoung Oh
 
AMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does It
AMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does ItAMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does It
AMSI: How Windows 10 Plans to Stop Script-Based Attacks and How Well It Does It
Nikhil Mittal
 
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Spring Interview Questions and Answers | Spring Tutorial | Spring Framework T...
Edureka!
 
Selenium Tutorial Java
Selenium Tutorial  JavaSelenium Tutorial  Java
Selenium Tutorial Java
Ahmed HARRAK
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
Docker, Inc.
 

Similar to Top 50 java ee 7 best practices [con5669] (20)

Rails Tips and Best Practices
Rails Tips and Best PracticesRails Tips and Best Practices
Rails Tips and Best Practices
David Keener
 
Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Ontico
 
Byte code manipulation and instrumentalization in Java
Byte code manipulation and instrumentalization in JavaByte code manipulation and instrumentalization in Java
Byte code manipulation and instrumentalization in Java
Alex Moskvin
 
Oracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Oracle Fuson Middleware Diagnostics, Performance and TroubleshootOracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Oracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Michel Schildmeijer
 
Loom promises: be there!
Loom promises: be there!Loom promises: be there!
Loom promises: be there!
Jean-Francois James
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
Speedment, Inc.
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
Malin Weiss
 
mjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profilingmjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profiling
Haim Yadid
 
The Latest in Enterprise JavaBeans Technology
The Latest in Enterprise JavaBeans TechnologyThe Latest in Enterprise JavaBeans Technology
The Latest in Enterprise JavaBeans Technology
Simon Ritter
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
elliando dias
 
BTV PHP - Building Fast Websites
BTV PHP - Building Fast WebsitesBTV PHP - Building Fast Websites
BTV PHP - Building Fast Websites
Jonathan Klein
 
Fundamentals of java --- version 2
Fundamentals of java --- version 2Fundamentals of java --- version 2
Fundamentals of java --- version 2
Uday Sharma
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database
Speedment, Inc.
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your database
Speedment, Inc.
 
JavaOne_2010
JavaOne_2010JavaOne_2010
JavaOne_2010
Tadaya Tsuyukubo
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
Ryan Cuprak
 
Building Dynamic AWS Lambda Applications with BoxLang
Building Dynamic AWS Lambda Applications with BoxLangBuilding Dynamic AWS Lambda Applications with BoxLang
Building Dynamic AWS Lambda Applications with BoxLang
Ortus Solutions, Corp
 
Building Dynamic AWS Lambda Applications with BoxLang
Building Dynamic AWS Lambda Applications with BoxLangBuilding Dynamic AWS Lambda Applications with BoxLang
Building Dynamic AWS Lambda Applications with BoxLang
Ortus Solutions, Corp
 
Java- JDBC- Mazenet Solution
Java- JDBC- Mazenet SolutionJava- JDBC- Mazenet Solution
Java- JDBC- Mazenet Solution
Mazenetsolution
 
Fun with EJB 3.1 and Open EJB
Fun with EJB 3.1 and Open EJBFun with EJB 3.1 and Open EJB
Fun with EJB 3.1 and Open EJB
Arun Gupta
 
Rails Tips and Best Practices
Rails Tips and Best PracticesRails Tips and Best Practices
Rails Tips and Best Practices
David Keener
 
Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Memcached-инъекции - они существуют и работают, Иван Новиков (ONsec)
Ontico
 
Byte code manipulation and instrumentalization in Java
Byte code manipulation and instrumentalization in JavaByte code manipulation and instrumentalization in Java
Byte code manipulation and instrumentalization in Java
Alex Moskvin
 
Oracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Oracle Fuson Middleware Diagnostics, Performance and TroubleshootOracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Oracle Fuson Middleware Diagnostics, Performance and Troubleshoot
Michel Schildmeijer
 
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
JavaOne2016 - How to Generate Customized Java 8 Code from Your Database [TUT4...
Speedment, Inc.
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
Malin Weiss
 
mjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profilingmjprof: Monadic approach for JVM profiling
mjprof: Monadic approach for JVM profiling
Haim Yadid
 
The Latest in Enterprise JavaBeans Technology
The Latest in Enterprise JavaBeans TechnologyThe Latest in Enterprise JavaBeans Technology
The Latest in Enterprise JavaBeans Technology
Simon Ritter
 
Polyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better AgilityPolyglot and Poly-paradigm Programming for Better Agility
Polyglot and Poly-paradigm Programming for Better Agility
elliando dias
 
BTV PHP - Building Fast Websites
BTV PHP - Building Fast WebsitesBTV PHP - Building Fast Websites
BTV PHP - Building Fast Websites
Jonathan Klein
 
Fundamentals of java --- version 2
Fundamentals of java --- version 2Fundamentals of java --- version 2
Fundamentals of java --- version 2
Uday Sharma
 
How to generate customized java 8 code from your database
How to generate customized java 8 code from your databaseHow to generate customized java 8 code from your database
How to generate customized java 8 code from your database
Speedment, Inc.
 
Silicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your databaseSilicon Valley JUG - How to generate customized java 8 code from your database
Silicon Valley JUG - How to generate customized java 8 code from your database
Speedment, Inc.
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
Ryan Cuprak
 
Building Dynamic AWS Lambda Applications with BoxLang
Building Dynamic AWS Lambda Applications with BoxLangBuilding Dynamic AWS Lambda Applications with BoxLang
Building Dynamic AWS Lambda Applications with BoxLang
Ortus Solutions, Corp
 
Building Dynamic AWS Lambda Applications with BoxLang
Building Dynamic AWS Lambda Applications with BoxLangBuilding Dynamic AWS Lambda Applications with BoxLang
Building Dynamic AWS Lambda Applications with BoxLang
Ortus Solutions, Corp
 
Java- JDBC- Mazenet Solution
Java- JDBC- Mazenet SolutionJava- JDBC- Mazenet Solution
Java- JDBC- Mazenet Solution
Mazenetsolution
 
Fun with EJB 3.1 and Open EJB
Fun with EJB 3.1 and Open EJBFun with EJB 3.1 and Open EJB
Fun with EJB 3.1 and Open EJB
Arun Gupta
 
Ad

More from Ryan Cuprak (20)

Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)
Ryan Cuprak
 
DIY Home Weather Station (Devoxx Poland 2023)
DIY Home Weather Station (Devoxx Poland 2023)DIY Home Weather Station (Devoxx Poland 2023)
DIY Home Weather Station (Devoxx Poland 2023)
Ryan Cuprak
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
Ryan Cuprak
 
Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVM
Ryan Cuprak
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
Ryan Cuprak
 
Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeans
Ryan Cuprak
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
Ryan Cuprak
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
Ryan Cuprak
 
Java EE 8
Java EE 8Java EE 8
Java EE 8
Ryan Cuprak
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
Ryan Cuprak
 
Containerless in the Cloud with AWS Lambda
Containerless in the Cloud with AWS LambdaContainerless in the Cloud with AWS Lambda
Containerless in the Cloud with AWS Lambda
Ryan Cuprak
 
Java EE 8 Update
Java EE 8 UpdateJava EE 8 Update
Java EE 8 Update
Ryan Cuprak
 
Batching and Java EE (jdk.io)
Batching and Java EE (jdk.io)Batching and Java EE (jdk.io)
Batching and Java EE (jdk.io)
Ryan Cuprak
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
Ryan Cuprak
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
Ryan Cuprak
 
Jms deep dive [con4864]
Jms deep dive [con4864]Jms deep dive [con4864]
Jms deep dive [con4864]
Ryan Cuprak
 
Developing in the Cloud
Developing in the CloudDeveloping in the Cloud
Developing in the Cloud
Ryan Cuprak
 
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Ryan Cuprak
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and
Ryan Cuprak
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
Ryan Cuprak
 
Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)Jakarta EE Test Strategies (2022)
Jakarta EE Test Strategies (2022)
Ryan Cuprak
 
DIY Home Weather Station (Devoxx Poland 2023)
DIY Home Weather Station (Devoxx Poland 2023)DIY Home Weather Station (Devoxx Poland 2023)
DIY Home Weather Station (Devoxx Poland 2023)
Ryan Cuprak
 
Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)Why jakarta ee matters (ConFoo 2021)
Why jakarta ee matters (ConFoo 2021)
Ryan Cuprak
 
Polygot Java EE on the GraalVM
Polygot Java EE on the GraalVMPolygot Java EE on the GraalVM
Polygot Java EE on the GraalVM
Ryan Cuprak
 
Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)Exploring Java Heap Dumps (Oracle Code One 2018)
Exploring Java Heap Dumps (Oracle Code One 2018)
Ryan Cuprak
 
Node.js Development with Apache NetBeans
Node.js Development with Apache NetBeansNode.js Development with Apache NetBeans
Node.js Development with Apache NetBeans
Ryan Cuprak
 
Preparing for java 9 modules upload
Preparing for java 9 modules uploadPreparing for java 9 modules upload
Preparing for java 9 modules upload
Ryan Cuprak
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
Ryan Cuprak
 
Faster Java EE Builds with Gradle
Faster Java EE Builds with GradleFaster Java EE Builds with Gradle
Faster Java EE Builds with Gradle
Ryan Cuprak
 
Containerless in the Cloud with AWS Lambda
Containerless in the Cloud with AWS LambdaContainerless in the Cloud with AWS Lambda
Containerless in the Cloud with AWS Lambda
Ryan Cuprak
 
Java EE 8 Update
Java EE 8 UpdateJava EE 8 Update
Java EE 8 Update
Ryan Cuprak
 
Batching and Java EE (jdk.io)
Batching and Java EE (jdk.io)Batching and Java EE (jdk.io)
Batching and Java EE (jdk.io)
Ryan Cuprak
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
Ryan Cuprak
 
Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]Java script nirvana in netbeans [con5679]
Java script nirvana in netbeans [con5679]
Ryan Cuprak
 
Jms deep dive [con4864]
Jms deep dive [con4864]Jms deep dive [con4864]
Jms deep dive [con4864]
Ryan Cuprak
 
Developing in the Cloud
Developing in the CloudDeveloping in the Cloud
Developing in the Cloud
Ryan Cuprak
 
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Combining R With Java For Data Analysis (Devoxx UK 2015 Session)
Ryan Cuprak
 
Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and Hybrid Mobile Development with Apache Cordova and
Hybrid Mobile Development with Apache Cordova and
Ryan Cuprak
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
Ryan Cuprak
 
Ad

Recently uploaded (20)

Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
University of Hawai‘i at Mānoa
 
Designing AI-Powered APIs on Azure: Best Practices& Considerations
Designing AI-Powered APIs on Azure: Best Practices& ConsiderationsDesigning AI-Powered APIs on Azure: Best Practices& Considerations
Designing AI-Powered APIs on Azure: Best Practices& Considerations
Dinusha Kumarasiri
 
Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025
kashifyounis067
 
Adobe Illustrator Crack FREE Download 2025 Latest Version
Adobe Illustrator Crack FREE Download 2025 Latest VersionAdobe Illustrator Crack FREE Download 2025 Latest Version
Adobe Illustrator Crack FREE Download 2025 Latest Version
kashifyounis067
 
EASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License CodeEASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License Code
aneelaramzan63
 
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Dele Amefo
 
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Ranjan Baisak
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software DevelopmentSecure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Shubham Joshi
 
Revolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptxRevolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptx
nidhisingh691197
 
How to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud PerformanceHow to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud Performance
ThousandEyes
 
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Andre Hora
 
WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)
sh607827
 
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New VersionPixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
saimabibi60507
 
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Lionel Briand
 
Solidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license codeSolidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license code
aneelaramzan63
 
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
Andre Hora
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
F-Secure Freedome VPN 2025 Crack Plus Activation  New VersionF-Secure Freedome VPN 2025 Crack Plus Activation  New Version
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
saimabibi60507
 
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
ssuserb14185
 
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...Exploring Code Comprehension  in Scientific Programming:  Preliminary Insight...
Exploring Code Comprehension in Scientific Programming: Preliminary Insight...
University of Hawai‘i at Mānoa
 
Designing AI-Powered APIs on Azure: Best Practices& Considerations
Designing AI-Powered APIs on Azure: Best Practices& ConsiderationsDesigning AI-Powered APIs on Azure: Best Practices& Considerations
Designing AI-Powered APIs on Azure: Best Practices& Considerations
Dinusha Kumarasiri
 
Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025Adobe Master Collection CC Crack Advance Version 2025
Adobe Master Collection CC Crack Advance Version 2025
kashifyounis067
 
Adobe Illustrator Crack FREE Download 2025 Latest Version
Adobe Illustrator Crack FREE Download 2025 Latest VersionAdobe Illustrator Crack FREE Download 2025 Latest Version
Adobe Illustrator Crack FREE Download 2025 Latest Version
kashifyounis067
 
EASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License CodeEASEUS Partition Master Crack + License Code
EASEUS Partition Master Crack + License Code
aneelaramzan63
 
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Salesforce Data Cloud- Hyperscale data platform, built for Salesforce.
Dele Amefo
 
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Proactive Vulnerability Detection in Source Code Using Graph Neural Networks:...
Ranjan Baisak
 
Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025Avast Premium Security Crack FREE Latest Version 2025
Avast Premium Security Crack FREE Latest Version 2025
mu394968
 
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software DevelopmentSecure Test Infrastructure: The Backbone of Trustworthy Software Development
Secure Test Infrastructure: The Backbone of Trustworthy Software Development
Shubham Joshi
 
Revolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptxRevolutionizing Residential Wi-Fi PPT.pptx
Revolutionizing Residential Wi-Fi PPT.pptx
nidhisingh691197
 
How to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud PerformanceHow to Optimize Your AWS Environment for Improved Cloud Performance
How to Optimize Your AWS Environment for Improved Cloud Performance
ThousandEyes
 
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Exceptional Behaviors: How Frequently Are They Tested? (AST 2025)
Andre Hora
 
WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)WinRAR Crack for Windows (100% Working 2025)
WinRAR Crack for Windows (100% Working 2025)
sh607827
 
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New VersionPixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
Pixologic ZBrush Crack Plus Activation Key [Latest 2025] New Version
saimabibi60507
 
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Requirements in Engineering AI- Enabled Systems: Open Problems and Safe AI Sy...
Lionel Briand
 
Solidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license codeSolidworks Crack 2025 latest new + license code
Solidworks Crack 2025 latest new + license code
aneelaramzan63
 
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
TestMigrationsInPy: A Dataset of Test Migrations from Unittest to Pytest (MSR...
Andre Hora
 
Kubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptxKubernetes_101_Zero_to_Platform_Engineer.pptx
Kubernetes_101_Zero_to_Platform_Engineer.pptx
CloudScouts
 
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
F-Secure Freedome VPN 2025 Crack Plus Activation  New VersionF-Secure Freedome VPN 2025 Crack Plus Activation  New Version
F-Secure Freedome VPN 2025 Crack Plus Activation New Version
saimabibi60507
 
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...Explaining GitHub Actions Failures with Large Language Models Challenges, In...
Explaining GitHub Actions Failures with Large Language Models Challenges, In...
ssuserb14185
 

Top 50 java ee 7 best practices [con5669]

  • 1. TOP 50 JAVA EE 7 BEST PRACTICES Ryan Cuprak Michael Remijan
  • 2. About Us Ryan • @ctjava • [email protected] • http://www.cuprak.info • https://www.linkedin.com/in/rcuprak Michael • @mjremijan • [email protected] • http://mjremijan.blogspot.com • http://linkedin.com/in/mjremijan
  • 3. EJB 3 In Action 2nd Edition Updated For • EE 7 • EJB 3.2
  • 4. Java EE 7 Concurrency Utilities Batch Applications Java API for JSON Java API for WebSocket JSF 2.2 JSX-WS 2.2 JAX-RS 2 EL 3 Servlet 3.1 Common Annotations 1.2 Interceptors 1.2 CDI 1.1 Managed Beans 1.0 EJB 3.2 Connector 1.7 JPA 2.1 JTA 1.2 JMS 2 JSP 2.3 JAXB
  • 5. #1 JAX-RS: API Versioning Version your JAX-RS with one of two approaches: 1. URL http://ctjava.org/v2/meetings http://ctjava.org/v1/meetngs 2. Media Content or Header Param curl -H "Content-Type:application/srv-v4+json” … Return HTTP Status Codes for services moved/changed: • 301 Moved Permanently • 302 Found
  • 6. #1 JAX-RS: API Versioning (Continued…) Approach 1: URL Approach 2: Media Types
  • 7. #1 JAX-RS: API Versioning (Continued…) Service Moved Permanently
  • 8. #2 JAX-RS: Error Handling Provide ExceptionMappers to handle and process errors.
  • 9. #2 JAX-RS: Error Handling (Continued…) HTML content is hardly a friendly response for an API!
  • 10. #2 JAX-RS: Error Handling (Continued…)
  • 11. #3 JAX-RS: Caching Tell clients to cache data!
  • 12. #4 JAX-RS + Bean Validation Use Bean Validation to check data.
  • 13. #5 JAX-RS: Compress Responses Use gzip compression for responses to reduce bandwidth.
  • 14. #6 Securing RESTful Services • Use tokens with RESTful Web Services (OWASP). • Leverage JASPIC to setup JAAS environment.
  • 15. #7 JAX-RS + EJB • Use @Stateless and @Path together • Pooled, thread safe, monitored
  • 16. #7 JAX-RS + EJB (Continued…) • http://localhost:4848/monitoring/domain/server/applications/WebApp lication1/StatelessResource/bean-methods/getText[.json]
  • 17. #8 JAX-RS: Asynchronous API Gateway • Gateway calls multiple microservices asynchronously • Combines results into a DTO
  • 18. #8 JAX-RS: Async…(Continued…) • Gateway calls multiple microservices asynchronously • Combines results into a DTO
  • 19. #9 JPA: Pagination Use pagination for potential large result sets.
  • 20. #9 JPA: Pagination (Continued…)
  • 21. #10 JPA: Lazy Relationships Avoid unnecessary queries – use Fetch on Lazy relationships.
  • 22. #10 JPA: Lazy Relationships (Continued…) 1. SELECT MEETINGID, DATE, MEETINGABSTRACT, TITLE FROM MEETING WHERE (MEETINGID = ?) 2. SELECT t1.SPEAKERID, t1.BIOGRAPHY, t1.FIRSTNAME, t1.LASTNAME FROM meeting_speakers t0, SPEAKER t1 WHERE ((t0.meetingid = ?) AND (t1.SPEAKERID = t0.speakerid))
  • 23. #10 JPA: Lazy Relationships (Continued…) 1. SELECT t1.MEETINGID, t1.DATE, t1.MEETINGABSTRACT, t1.TITLE, t0.SPEAKERID, t0.BIOGRAPHY, t0.FIRSTNAME, t0.LASTNAME FROM SPEAKER t0, meeting_speakers t2, MEETING t1 WHERE ((t1.MEETINGID = ?) AND ((t2.meetingid = t1.MEETINGID) AND (t0.SPEAKERID = t2.speakerid))) 1 Query Not TWO!
  • 24. #11 JPA: Cascade • Don’t forget cascade levels to handle child data • cascade=ALL is equivalent to cascade={PERSIST, MERGE, REMOVE, REFRESH, DETACH}
  • 25. #12 JPA: Entity Graphs
  • 26. #13 JPA + DAO Put CRUD operations into DAOs.
  • 27. #14 JPA: hashcode() & equals() The equals and hashcode are required for: • Entity is added to a collection • When re-attaching entities to a new persistence context. Important points: • Do not use generated identifiers • Use business key equality
  • 28. #14 JPA: hashcode() & equals() Continued…
  • 29. #15 JPA: Optimistic Locking • Don’t roll your own • Use @Version for optimistic locking: Integer
  • 30. #15 JPA: Optimistic Locking (Continued…) • Timestamp
  • 31. #16 JPA: Pessimistic Locking • PESSIMISTIC_READ, PESSIMISTIC_WRITE • Lock timeout HINT
  • 32. #17 JPA: Mapping Inheritance • Inheritance can have a big impact upon performance. • Three approaches: • Single table • Joined-tables • Table-per-class • Denormalize for better performance
  • 33. #18 JPA L2 Cache JPA 2 introduced the L2 Cache, use this cache for: • Entities that are frequently read • Entities that are modified infrequently • Not critical if stale • L2 cache can consume large amounts of memory • ALL • NONE • ENABLE_SELECTIVE • DISABLE_SELECTIVE Are you using a default setting?
  • 34. #18 JPA L2 Cache (Continued…) Mark entity for L2 cache Bypass L2 cache
  • 35. #19 JPA: Persisting ENUM • ENUM is a good case of converting data types • Use a @Converter
  • 36. #19 JPA: Persisting ENUM (Continued…) • @Converter • AttributeConverter<X,Y> • X is my application, Y is the database
  • 37. #20 EJB: Transaction Handling • EJBs exist to handle transactions. Keep them at the right layer • Don’t ignore transactions. Default: REQUIRED • JAX-RS endpoints, database reads & performance
  • 38. #21 EJB: Stateless Thread Safety • Stateless beans are a pooled, managed resource • Pools configurable by the application server
  • 39. #22 EJB: Asynchronous • @Asynchronous runs in container-managed thread • Return Future<> to get results later • Ideal for wrapping JAX-RS calls • Good way to avoid any of your own threading
  • 40. #23 EJB: Security • Use declarative security and let the container handle it • Avoid programmatic security • EE servers trust principal/roles passed between containers.
  • 41. #23 EJB: Security (Continued…) • EE Configuration • web.xml • @DeclaredRoles • @RolesAllowed • Custom Configuration • EE Server Realm • glassfish-web.xml
  • 42. #24 EJB: Avoid Lengthy Initialization Don’t abuse startup – @PostConconstruct delays You delay initialization of the container!
  • 43. #24 EJB: Avoid Lengthy Initialization
  • 44. #25 CDI: Observers • In-memory event processing • Very “reactive” • Decouple work to be done, avoids unnecessary dependencies • Create an event to fire
  • 45. #25 CDI: Observers (Continued…) • Fire the event • Observers process the event
  • 46. #26 CDI: Producer + Cache • Use a producer to customize creation of an object • Producer method is always called, so cache the instance
  • 47. #27 CDI: Interceptors • Limit to cross-cutting concerns • Do not use to change business logic • Create an annotation
  • 48. #27 CDI: Interceptors • Create the interceptor
  • 49. #27 CDI: Interceptors • Apply the interceptor
  • 50. #28 CDI: Decorators • Use to enhance or decorate existing code • Open-close principle • Do not use for cross-cutting concerns
  • 51. #28 CDI: Decorators (Continued…) • /WEB-INF/beans.xml • /META-INF/beans.xml
  • 52. #29 CDI: Transactions Java EE introduced @Transactional for non-EJBs. Pro: Easier to utilize transactions outside of EJB. Con: Mixes layers – transactions & rest etc.
  • 53. #30 CDI: Bean Discovery • Java EE 7 CDI is enabled by default. • beans.xml is no longer required as in EE 6 • Bean discovery mode: • Annotated – only annotated classes • All – includes beans that are not annotated • None – CDI disabled • Default mode is ‘annotated’
  • 54. #31 Batch: Java EE not SE • Think Java EE for batch, not SE • Batch API • Cron like schedule on EJB methods • META-INF/batch-jobs/processInvoices.xml
  • 55. #32: Batch Best Practices • Package/deploy batch jobs separately • Implement logic to cleanup old jobs • Implement logic for auto-restart • Test restart and checkpoint logic • Configure database to store jobs • Configure thread pool for batch jobs • Only invoke batch jobs from logic that is secured (@Role etc.)
  • 56. #33 JAXB Primitive Data Types anySimpleType decimal integer long int short byte float double nonPositiveInteger negativeInteger nonNegativeInteger unsigneLong positiveInteger unsignedInt unsignedInt unsignedByte
  • 57. #34 JAXB: Date & Time Representation • Use XMLGregorianCalendar for dates • Avoid java.util.Date and java.util.Calendar • XMLGregorianCalendar • Handles long fractions of seconds – important to .NET interoperability
  • 58. #35 JAXB: Annotate Don’t let JAXB generate everything!
  • 59. #36 JAX-WS: RPC vs. Document • Four different possibilities: • RPC/Literal • RPC/Encoded • Document/Literal • Document/Encoded • Encoded is not supported by WS-I • Default and most commonly used is Document/Literal • Use Document/Literal • RPC/Literal: • Limited to basic XSD types • WSDL will not include types section to constrain parameters
  • 60. #37 JAX-WS: JAXB Gotcha • JAXB will serialize an entire object graph. Oops! Use either: • DTO – Data Transfer Object • @XmlTransient
  • 61. #38 JAX-WS Interoperable Services • Design service starting with the WSDL • Create data types using XSD • Keep data types SIMPLE • Avoid xsd:anyType • Avoid sending Null values • Use byte[] instead of String when character encoding is unknown
  • 62. #39 SOAP Faults • Types of SOAP faults: • Modeled – exception explicitly thrown by business logic. • Mapped to wsdl:fault in WSDL file • Unmodeled – RuntimeException, represented as generic SOAPFaultException
  • 63. #40 JAX-WS Input/Output Processing Use SOAP message handlers to pre/post process messages and handle SOAP faults.
  • 66. #42 JAX-WS Large Files Use W3C Message Transmission Optimization Mechanism (MTOM) to handle large files.
  • 67. #43 Deployment Classpath • Are you pulling in third-party JAR files? • Do these JAR files include Java EE annotated classes? • Are you accidently deploying web services, MDBs etc.? • Are you including container dependencies? BAD!
  • 68. #44 Threading • Never create create threads. • Container manages resources.
  • 70. #45 Distributed Caches • Don’t treat @Singleton as a “global” singleton! • Use JCache implementation (ex. HazelCast) Java EE Server #1 app.war SingletonBean Java EE Server #2 app.war SingletonBean
  • 71. #46 Testing: Load Load testing always at 100%? Scenario: • Message Driven Bean with a connection to a remote resource. • Standing pool size: 3 Oops!
  • 72. #46 Testing Load (Continued…) Oops, resource only leak as bean instances fluctuate! 0 5 10 15 20 25 30 35 1 2 3 4 5 6 7 8 9 Leak Bean Returning to standing pool size leaks resources.
  • 74. #48 Java EE Tutorial Table of Contents • What’s in Java EE? • 918 pages • TOC is a great summary • 30+ pages • Highlights just how much is in EE
  • 75. #49 There are no “small” applications • Don’t fall into these traps: • “It’s just a simple application” • “It only needs to do…” • “Code it up real quick…” • EE Specification exists for a reason • Multiple users • Concurrency • Multi-threading • Transaction management • External resources • Messaging
  • 76. #50 Start with an EE Server • Because there are no “small” applications • Start with an EE Server Avoid filling yourWAR with “EE Features” because you are not using an EE server • But Servers are “heavy-weight”? • Payara • WildFly • TomEE • Benefits • “Light-weight” • Regular updates • Great online community support
  • 78. Q&A

Editor's Notes

  • #2: [Ryan] - Welcome to the Top 50 Java Best Practices
  • #3: I am Ryan, this is Michael,