We followed code samples from the book troughout the training.
Other general resources
Java EE 7 javadoc lists all of the relevant APIs defined by Java EE spec.
Adam Bien’s book Real World Java EE Patterns – Rethinking Best Practices will help you put EJB and CDI in practice.
Java EE 7 samples demonstrates Java EE 7 features in Arquillian-based tests.
Arquillian helps testing parts of your Java EE applications within container - be it just Weld, embedded Payara or remote standalone servers.
Read Weld Reference Documentation for in-depth details about all CDI features.
Apache Deltaspike is collection of CDI extensions covering various infrastructure aspects of your application.
For in-depth look into JPA, design of the entities and trade-offs of the features, read Pro JPA 2 by Mike Keith and Merrick Schincariol.
Another great source of JPA knowledge is Vlad Mihalcea.
Instead of Criteria API, consider using QueryDSL.
For managing of database schema I recommend FlyWay.
Ultimate source on JAAS and JASPIC is Arjan Tijms (and also for JSF and OmniFaces).
To understand cases, where distributed transactions are not a good
Coffee Shop Doesn’t
Use Two-Phase Commit by Gregor Hohpe.
Also good source for understanding distributed systems, that usually reach outside scope of Java EE, look at Distributed Systems for Fun and Profit by Mikito Takada.
Even though Java Serialization is very comfortable, for high performance systems consider other serialization libraries that might give you smaller payloads, less CPU usage, and better interface evolution options.
For building business processes based on message passing you may want to read Enterprise Integration Patterns by Gregor Hohpe (yes, the one of the coffee shop article).
Serialization frameworks from above may also be a good option for message exchange over REST.
TomEE Java EE 6 application server built on top of Tomcat from Tomcat maintainers
WebShpere Liberty free version of WebShere with heap limit 2GB (total over all instances)
At heart of every server there is bytecode manipulation library like ASM. Other good use cases are writing tests, that verify correctness of the code (e. g. security check is invoked in every method).