The Next Generation Prabhat Jha Principal Engineer
What do you wish you had in an Open Source JEE Application Server?
Faster Startup Time?
Lighter Memory Footprint?
Easier Administration?
7 Reasons To Love AS7...
7 Reasons To Love AS7... Blazing fast startup time
7 Reasons To Love AS7... Blazing fast startup time Lightweight
7 Reasons To Love AS7... Blazing fast startup time Lightweight Modular core
7 Reasons To Love AS7... Blazing fast startup time Lightweight Modular core Hot, parallel deployment
7 Reasons To Love AS7... Blazing fast startup time Lightweight Modular core Hot, parallel deployment Elegant administration
7 Reasons To Love AS7... Blazing fast startup time Lightweight Modular core Hot, parallel deployment Elegant administration Domain management
7 Reasons To Love AS7... Blazing fast startup time Lightweight Modular core Hot, parallel deployment Elegant administration Domain management First class components
Bonus for Austin JUG Testable by design :-)
Details
Blazing Fast Startup Time
Lightweight Footprint
New Possibilities Execute an entire Java EE container in a unit test! Use an appserver VM per application Run in constrained environments (light cloud, plug computers, mobile devices) Develop faster than you ever have before. Run multiple staging servers on your laptop.
JBoss AS7 Architecture
Modular Core Isolated Classes vs. One Size Fits All!
JBoss Modules Provides extremely fast modular class loading O(1) Dependency resolution Concurrent CL (lockless in most VMs) Pure modular class loading Modules only see what they import (includes JDK classes!) External module definitions Don t have to break open the JAR Dynamic Modules can be redefined Extensible JBoss OSGi implemented on modules
OLD: Hierarchical Classloading NEW: Modular Classloading
User Deployments User deployments are modules too Sets up dependencies on some modules automatically (e.g. JPA, Hibernate, WebServices) The user can also set up their own dependencies on app server modules
Hot, Parallel Deployment Services Load Concurrently!
Services In AS7 almost everything is a service Services are objects that can be started and stopped Services can have dependencies on other services When all a services dependencies are satisfied it will attempt to start If a dependency going to be stopped, then MSC will stop all dependent services first Services can inject dependent services
Elegant Administration
First Class Components Infinispan CDI/Weld HornetQ Hibernate JSF OSGI PicketBox
EAP 6 Test Drive Now!
Key Features Fast and Lightweight Supports domain (multi-node) management Multiple consistent management interfaces CLI, Java API, HTTP API, Console Unified, user-focused configuration Modular Only APIs, no AS implementation exposure True isolation
Two Operational Models Standalone Traditional JBoss single JVM server Management facilities IN-VM Domain Multi-JVM, multi-server model Management coordinated by Domain Controller Process Multiple server instances (JVMs) per Host Full lifecycle managed by Process Controller
Standalone Mode Standalone is a single AS process for use in development, where the additional management functionality is not required Provides a similar development experience to previous versions of the AS, allowing for a deployment to be dropped in the deployments folder and automatically deployed Can still be managed by the same tools and API's as domain mode
Standalone Mode Demo
Domain Mode Easy management of multiple AS instances Managed from a single point, all have access to the same domain configuration Allows for management and configuration updates to be pushed out to all servers Domain Mode has three separate processes: Process Controller Host Controller Server Instance
Domain Mode Architecture
Domain Mode.. Multi-server management as a core part of AS 7 /EAP 6 itself Start/quiesce/stop servers Rolling deployment to a set of servers Roll a config change out of a set of servers Roll back changes
Domain Model Concepts Subsystem : a particular set of capabilities that extend the app server core WebServer, Transaction Manager, EJB3 Profile: the set of subsystem a server or a group of server runs Change your profile to expand or narrow the capabilities of your servers
Management ONE configuration file standalone.xml / domain.xml Management API that allows for persistent changes to the configuration Management API can manage all servers in the domain Management console to provide user friendly management in a web browser Command line tool for use in scripts
Management via Configuration
Management via API
Management via CLI Scriptable command line management tool Uses the management API internally Allows access to high level user friendly commands: create-jms-queue -name testqueue Also allows direct access to the domain model, giving access to the full functionality of the management API
Testing with Arquillian AS7 supports easy testing with ArquillIan Arquillian is used both in the internal test suite and by end users to test their applications Combined with the fast startup speed of AS7 testing in the container is just as easy as running normal JUnit tests.
A simple API for constructing archives as Java objects: WebArchive archive = ShrinkWrap.create(WebArchive.class, archive.war ).addclasses(myclass.class,myotherclass.class, WecomeServlet.class).addAsResource("mystuff.properties"); myserver.deploy(archive); // And done. High Octane Development Automated Testing for Java EE6 Andrew Lee Rubinger
Java EE 6 Intro Extensibility Profiles Subsets of full EE platform Web Profile Pruning CMP, JAX-RPC, JAXR, JSR-88 are pruned in EE6 New Technology & Improvements to Existing Dependency Injection, CDI, Servlet 3, JPA 2, JSF 2, JAX-RS, Bean Validation
Servlet 3 Ease of Development Annotations Zero configuration in XML for the most part. Web framework pluggability Programmatic access to web.xml Dynamic changes to configuration of webapp Async and Commet support Non blocking input and output Delay request handing Delay response close
Servlet 3 @WebServlet @WebServlet("/report") public class ReportServlet extends HttpServlet @WebFilter @WebFilter(filterName = "TimeOfDayFilter", urlpatterns = {"/*"}, initparams = { @WebInitParam(name = "report", value = "dev")}) public class TimeOfDayFilter implements Filter { @HttpConstraint @HttpMethodConstraint @MultipartConfig @ServletSecurity @WebInitParam @WebListener
JSF 2 Ajax Easy component creation Bookmarkable URLs Templating (think Facelets)
JPA 2 O/R mapping enhancements Embedded objects, collections, ordered lists Query and Entity Manager Enhancements First result, max results, typed results Criteria API 2nd Level Caching Pessimistic Locking
JPA 2...
JAX-RS Web services through REST instead of SOAP REST counterpart of JAX-WS Annotations from ground up Integration with CDI and EJB @Path("users/{username: [a-za-z][a-za-z_0-9]}") public class HelloWorldResource { @GET @Produces("text/xml") public String getmessage(@pathparam("username") String username) { return "Hi + username +!! Howz JBoss AS 7??"; }
EJB 3.1 ( Lite) Removal of the requirement for a separate local business interface. Support for direct use of EJBs in the servlet container, including simplified packaging options. Singleton beans with different locking options. Support for asynchronous session bean invocation. Application-level callback notifications, including for container initialization and shutdown. EJB Timer Service enhancements to support cron-like scheduling, deploymenttime timer creation, and stateful session bean timed objects. Lite: Local Session Bean, Annotation, Security, Interceptors. MDB, Timer, Web Services End Point, RMI-IIOP
EJB 3.1 ( Lite)... @javax.ejb.stateless public class CarHotelAndAirLineBookingServiceBean { @javax.ejb.asynchronous public Future<BookingConfirmation> bookcarhotelandairline( Car rental, Hotel hotel, AirLine airline) {...} }//end async service //-------------------------In your JSF bean, you can then do-----------------------------public String makerequest() { confirmation = bookingservice.bookcarhotelandairline(...); return "showconfirmationpending"; } public Future<BookingConfirmation> getconfirmation(){ /*... */ }
EJB 3.1 ( Lite) Removal of the requirement for a separate local business interface. Support for direct use of EJBs in the servlet container, including simplified packaging options. Singleton beans with different locking options. Support for asynchronous session bean invocation. Application-level callback notifications, including for container initialization and shutdown. EJB Timer Service enhancements to support cron-like scheduling, deploymenttime timer creation, and stateful session bean timed objects. Lite: Local Session Bean, Annotation, Security, Interceptors. MDB, Timer, Web Services End Point, RMI-IIOP
Bean Validation Specify constraints only once across application layers @NotNull @Size(min = 1, max = 25) @Pattern(regexp = "[A-Za-z ]*", message = "must contain only letters and spaces") private String name; @NotNull @Size(min = 10, max = 12) @Digits(fraction = 0, integer = 12) private String phonenumber;
CDI Makes Java EE development more productive.!! Provides a declarative way to manage the scope, state and life-cycle of components bound to contexts. Provides a standardised, annotation-driven, type-safe dependency injection framework for the platform. Provides a Service Provider Interface (SPI) for developing portable extensions for the Java EE platform What is CDI aka JSR-299's relationship with respect to JSR330, Dependency Injection?
Community or Enterprise?
Community or Enterprise?
Demo Administration Console Domain Model Quickstart with maven archetype Deployments mvn archetype:generate \ mvn archetype:generate \ OpenShift -DarchetypeArtifactId=jboss-javaee6-webapp \ -DarchetypeArtifactId=jboss-javaee6-webapp \ -DarchetypeGroupId=org.jboss.spec.archetypes \ -DarchetypeGroupId=org.jboss.spec.archetypes \ -DarchetypeVersion=7.0.0.CR1 \ -DarchetypeVersion=7.0.0.CR1 \ -DarchetypeRepository=repository.jboss.org/ -DarchetypeRepository=repository.jboss.org/ nexus/content/groups/public nexus/content/groups/public
OpenShift EE6 In the Cloud!