Don't Design Websites. Design Web SYSTEMS! (UT Austin Drupal Users Group)
The Next Generation - Austin Java Users Group
Transcript of The Next Generation - Austin Java Users Group
The Next Generation
Prabhat JhaPrincipal 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: HierarchicalClassloading
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!
• 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
Key Features
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.
High Octane Development | Automated Testing for Java EE6 | Andrew Lee Rubinger
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.
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
@WebServlet("/report")
public class ReportServlet extends HttpServlet
@WebFilter@WebFilter
@WebFilter(filterName = "TimeOfDayFilter",
urlPatterns = {"/*"},
initParams = {
@WebInitParam(name = "report", value = "dev")})
public class TimeOfDayFilter implements Filter {
@HttpConstraint @HttpMethodConstraint @MultipartConfig@HttpConstraint @HttpMethodConstraint @MultipartConfig
@ServletSecurity @WebInitParam @WebListener@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, deployment-time 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, deployment-time 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 JSR-330, Dependency Injection?
Community or Enterprise?
Community or Enterprise?
Demo
• Administration Console
• Domain Model
• Quickstart with maven archetype• Deployments
• OpenShift mvn archetype:generate \-DarchetypeArtifactId=jboss-javaee6-webapp \-DarchetypeGroupId=org.jboss.spec.archetypes \-DarchetypeVersion=7.0.0.CR1 \-DarchetypeRepository=repository.jboss.org/ nexus/content/groups/public
mvn archetype:generate \-DarchetypeArtifactId=jboss-javaee6-webapp \-DarchetypeGroupId=org.jboss.spec.archetypes \-DarchetypeVersion=7.0.0.CR1 \-DarchetypeRepository=repository.jboss.org/ nexus/content/groups/public
OpenShift – EE6 In the Cloud!