modern, lightweight development with java ee 6
TRANSCRIPT
<Insert Picture Here>
©2011 Oracle Corporation
Modern, Lightweight Development and Java EE 6 Alexis Moussine-Pouchkine http://blogs.oracle.com/theaquarium, @alexismp
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.
The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
©2011 Oracle Corporation 2
©2011 Oracle Corporation 3
Terminology
• What does “Modern” Development mean? • The obvious: leveraging recent innovation • Balancing of cutting and bleeding edge • Simpler, easier to use
• What does “Lightweight” Development mean? • What you want, not more than what you want
• Smaller runtime memory footprint • Easy install and download • Less deployment unit / library bloat • Decoupling container – application dependencies
©2011 Oracle Corporation 4
• Choice – Your tool selection, your dev/test environment, your
persistence provider • Productivity
– IDEs (or not), lots of OSS Libraries / Frameworks • Familiarity
– Standard-based with extension points, not proprietary • Simplicity
– Leaner, POJO driven API with annotations • Quality
– Facilitate Agile and Test Driven Development • Agility
– Server Modularity, Extensibility, Linked Portfolio
Modern and Lightweight is not enough
©2011 Oracle Corporation
Developer Productivity
Flexible, Lightweight Extensible
Web Profile API Pruning
Injection
Embrace open source frameworks Enables Drag & Drop framework installation
More annotations, better IDEs POJO development
Less XML configuration
Java EE
Java EE 6 meets and exceeds those requirements
Java EE 7: Cloud Foundation
• Formalize new roles, PaaS, multi-tenancy • Pluggable cloud services • Revision of underlying Java EE specs
©2011 Oracle Corporation
Agenda
Modern, Lightweight approaches in Java EE6:
! Development Approach
! Developer Tools
! Build Environment, Continuous Integration
! Testing, Diagnostics, Tuning
! Modular Runtime Services
! Easier Web Application Packaging
! New Approaches to Persistence
! Conclusion
Use Lightweight, Testable Plain Old Java Objects
• Less configuration complexity
• Easier testability and alignment with OS tools – Ant / Maven / Hudson
• Java EE 6 makes advances in this area – (CDI) Context and
Dependency Injection – EJB 3.1, JPA – JSF 2.0 (Beans, etc) – Java EE will only
continue to improve • Caching with clusterable
hashmaps becoming the norm
©2011 Oracle Corporation
Managed Beans
JPA 2
Context Dependency & Injection
JSF2
EJB 3.1
JAX-RS
JAX-WS
Persistence
Facelets
JSR 330
Basic Component
Presentation
Dependency Injection
Business Services
REST
SOAP
Caching In-memory grid
Developer Tools
• A comprehensive, modular IDE > First to support Java SE 7 > Best-in-Class support for Java EE 6 > GlassFish 3.1.1 support, WebLogic 10.3.4 > Extensive dynamic language support (PHP,
Ruby, Groovy, etc.) > Connected Developer improvements > Intuitive workflow, Java FX, Swing, C++ > Debugger, Profiler, Refactoring, etc.
• A platform for building applications > RCP = Rich Client Platform > Modular architecture allows easy reuse > Rich framework of windows, menus, tool bars,
actions
• A thriving open source community > Large set of 3rd party plug-ins > Over 20 Million Downloads > Over 100 Partner Companies > Active blogging community
NetBeans IDE
©2011 Oracle Corporation
Artifact
AppXRay™
Presentation
Component
Data Access
External Resources
JSP CSS JSF ADF Faces HTML TLD
Faces Config POJO Resource
bundles XML
schema Java
Variable
Java / Java EE / ADF
Oracle Coherence
WebLogic, GlassFish
Spring, ORM, DB, JPA
Spring DAO
EJB 3 JPA POJO Eclipse
Link
Oracle Enterprise Pack for Eclipse Free Eclipse Plug-ins for Fusion Middleware
12 ©2011 Oracle Corporation
• Excellent Multi Language Support – Java 7, JavaScript, Ruby, Groovy, HTML, CSS, XML – Recognizes languages inside of other languages
• Strong Refactoring, Source Editing • Very current support of 3rd party technology
– Maven, Groovy, Spring, Flex, Android, Ruby, Python, Scala, PHP
• Great for Java • May not be the best for Java EE, relative to other options
– GlassFish / WebLogic Server plug-ins are tricky – Comparatively less Java EE wizards – No EE javadoc code completion in the editor
IntelliJ IDEA
©2011 Oracle Corporation
• Editors were always lightweight, but perhaps not modern
Text Editors (VI, Emacs, VIM, UltraEdit, etc)
©2011 Oracle Corporation
+/- No IDE project model to conform to + Good for any programming language (usually) + Doesn’t even show up on corporate architecture radar
- No integrated debugging, wizards, validation - Search and replace ≠ refactoring, D-I-Y codegen - Potentially lots of ongoing work to configure
Build Environment, Continuous Integration
F/OSS Java tools ecosystem Leverage free and open source software
©2011 Oracle Corporation 16
Hudson
Dependency Management
Tools
Automation Tools
Tracking Tools
Version Control Tools
Testing
Continuous Integration
Tools
WebLogic
GlassFish
Maven, if you can Build and Dependency Management
• Maven wants to control everything, including directory structure • If your project can work with the constraints, Maven will: • Enable repeatable builds • Embed build knowledge into the project • Make it possible to create automated builds • Enable CI • Can enforce uniform project setup • No need to have all developers script their own build.xml files • No duplication of build code • Simplify dependency management • A lot of plug-ins available
©2011 Oracle Corporation
Maven Repo URI
• glassfish:create-domain • glassfish:start-domain • glassfish:deploy • glassfish:redeploy • glassfish:undeploy • glassfish:stop-domain • glassfish:delete-domain
http://download.java.net/maven/glassfish/
Maven with WebLogic and GlassFish
©2011 Oracle Corporation
GlassFish • wls:install* • wls:create-domain* • wls:start-server* • wls:deploy • wls:undeploy • wls:re-deploy • wls:start-app • wls:list-apps • wls:stop-app • wls:wlst (run script) • wls:stop-server*
WebLogic
* Coming in Java EE 6 Release
An agile imperative: Hudson CI Continuous integration
• Written in Java, has IDE plug-ins • Works on any Java container • No install required, java –jar hudson.war!• Easy to use, browser based config • REST API and CLI • Vibrant Ecosystem of 330+ plug-ins
– GlassFish Plug-in – Coming soon: WebLogic Plug-in
• How it works: – Dev commits – which triggers a build – Hudson detects changes, checks out code – Builds project on another machine – Organizes Build Output (libs, docs, installers) – Records and Publishes results – Feedback – only when necessary
©2011 Oracle Corporation
Testing, Diagnostics, Tuning
Test Driven Development
refactor Commit updates
Add test
Make small change
Commit updates
©2011 Oracle Corporation
• Small steps • Frequent check-ins • Design for
testability • Interface first, then
implement • Mock objects
Category Tool Continuous Integration Hudson/Jenkins, CruiseControl, Continuum Acceptance FitNesse, Selenium Load Test JMeter, Eclipse TPTP Coverage Cobertura, Emma Web Apps Selenium, HttpUnit Java EE Servers Cargo, Cactus, Arquillian Database DBUnit Mock Objects jMock, EasyMock, Mockito Unit tests JUnit, TestNG Build Ant, Maven, Ivy Race/Deadlock JRockit Mission Control Profiling JRockit Mission Control, NetBeans Memory Leak JRockit Mission Control
U N I T T E S T I N G
©2011 Oracle Corporation
Lots of F/OSS to leverage when in development
Deploy
Profiling & performance
tuning
Regression testing
Troubleshooting
Monitoring
Alerts & triggers
23 ©2011 Oracle Corporation
Plug-in to leverage when in deployment: JRMC JRockit Mission Control and JRockit Flight Recorder
Operations
Production
diagnostics
Development
JRockit Flight Recorder ”Black box”
24 ©2011 Oracle Corporation
Mission Control Server
1. A serious failure occurs • JVM crash • Out of memory • Application terminates unexpectedly • Hardware failure or power outage
2. Buffered data is saved to a file • Contents include both in-memory and on-
disk buffer data • Exception: HW failure will only yield on-
disk data 3. User opens file in JRMC for analysis
In-memory/on-disk buffer
Flight Recorder ”Real-time Application Diagnostics”
Mission Control Server
1. Monitoring system detects an issue • Too long JSP response time • Unexpected memory growth • (anything exposed through JMX)
2. JRMC requests diagnostics data • “Give me all diagnostics data leading up to the issue”
3. Data is sent to JRMC • Analyze immediately (manual or automatic) • And/or store for later analysis
In-memory/on-disk buffer
Flight Recorder Benefits
• Always available – No need to instrument application – No runtime overhead
• Dramatically decrease time & cost for troubleshooting – Both in-house and when working with Oracle Support
• Enable positive feedback loop in production – Collect data from all SLA breaches – Analyze, fix, update application, repeat until no more
errors
• Improved datacenter performance & availability
Modular Runtime Services
Rich Features in a Lightweight Runtime
• Pay for what you use – Starts in seconds – Features dynamically loaded as needed, like …
• … Administration console • … EJB container, embedded JMS server • … Web services container • … Clustering
• Standard distributions of Java EE Servers becoming the norm – Java EE 6 Web Profile – Full Java EE 6 – Minimize runtime to avoid the need to build custom platform
©2011 Oracle Corporation
Java EE Server Modularity
Application Container Runtime Container Kernel
Con
tain
er S
DK
Deployment
Configuration
NIO
Monitoring
AdminGUI
Application Container Runtime Approach Taken on WebLogic Server and GlassFish
©2011 Oracle Corporation
What Does it Mean to Developers?
• Expect to see lighter weight distributions of Java EE Servers – GlassFish Server Web Profile – 29M
• Expect to see runtime profiles – WebLogic Server having runtime Web Profile support turning
off EJB, JMS and JCA containers
• Expect to see experimentation with OSGi programming models – GlassFish OSGi/Java EE Hybrid specifications and
implementation • e.g. JPA, EJB, JDBC, JTA, ... as OSGi services
• We need your feedback as to how important this is for Java EE 7 and 8 going forward
©2010 Oracle Corporation 30
Easier Web Application Packaging
Simplified Packaging of Web Applications
WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class
WEB-INF/web.xml
index.html main.css jquery-1.4.2.js ui/jquery.ui.core.js ui/jquery.ui.widget.js
WEB-INF/lib someframework.jar
Web Application
Simplified Packaging of Web Applications
WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class
index.html main.css jquery-1.4.2.js ui/jquery.ui.core.js ui/jquery.ui.widget.js
Web Application
@WebServlet(urlPatterns=”/foo”)public class MyServlet { … }
@WebFilter(urlPatterns=”/foo”)public class MyFilter { … }WEB-INF/lib
someframework.jar
Simplified Packaging of Web Applications
WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class
WEB-INF/lib someframework.jar
index.html main.css jquery-1.4.2.js ui/jquery.ui.core.js ui/jquery.ui.widget.js
Web Application
META-INF/web-fragment.xml com/fw/FwServlet.class com/fw/FwFilter.class
Framework Jar
Simplified Packaging of Web Applications
WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class
WEB-INF/lib someframework.jar jquery-ui-1.8.4.jar
index.html main.css
Web Application
META-INF/resources/jquery-1.4.2.js META-INF/resources/ui/jquery.ui.core.js META-INF/resources/ui/jquery.ui.widget.js
jQuery Resource Jar
Simplified Packaging of Web Applications
WEB-INF/classes com/acme/MyServlet.class com/acme/MyFilter.class
WEB-INF/lib someframework.jar jquery-ui-1.8.4.jar
index.html main.css
Web Application
• Self-contained • Generic • Reusable
New approaches to persistence
New approaches to structured storage
©2011 Oracle Corporation
RDBMS
• Ubiquitous • Newer, higher level
APIs
In-memory Data Grids • Mature • Distributed storage,
processing, and caching
NRDBMS (noSQL)
• Emerging • Often distributed
A quick look at Java Persistence API 2.0
• Why JPA and not other Java persistence methods? – Incredible productivity gain using annotations – Reduce errors from repetitive coding with lower level APIs – Standard, not proprietary – many providers exist – Integration point for in-memory data grid – JPA 2.0’s ORM can handle real life database schemas
• JPA in a nutshell – Concrete classes (POJOs) – No required interfaces or inheritance – new() for instance creation – Mapping using annotations and/or XML – “Managed” by an EntityManager – Can leave the Container (“detached”)
©2011 Oracle Corporation
A quick look at in-memory caching
• Why an in-memory data grid? – For public internet scale – For solid-state response times – Processing large event volumes
• In-memory data grid in a nutshell – Container-less Clustering of Java Processes – Data Structures to manage Data across a Cluster / Grid – Real-Time Event Observation – Listener Pattern – Materialized Views of Data – Parallel Queries and Aggregation – Object-based Queries – Parallel Data Processing – Parallel Grid Processing – RemoteException Free Distributed Computing
©2011 Oracle Corporation
A quick look at NRDBMS (a.k.a NoSQL)
• Why NRDBMS? – indexing a large number of documents – serving data intensive pages at commercial internet loads – delivering streaming media – when you can sacrifice data consistency for performance
• NRDBMS in a nutshell – Document store, graph, key-value store, multivalue
databases, OODBMS, Tabular, Tuple Store – May not require fixed table schemas – Usually avoid joins – Scale horizontally
©2011 Oracle Corporation
Conclusion
©2011 Oracle Corporation 43
• Enterprises need commercial support & services • Commercial upgrade options abound • Contractual Technical Support & ProServ
• Agile often means projects have unforeseen futures • Having a linked commercial portfolio means you aren’t stuck in a point solution
• Enterprises need platforms with healthy ecosystems • Java EE and open source are constantly inspiring each other, and should be considered together
• Java EE6 meets the requirements out of the box • Together with F/OSS for testing, quality, troubleshooting
• Server extensibility means your investment will survive the: • Next point solution • Next cool language that is narrow in scope
Conclusion: Java EE 6 is best for enterprise
<Insert Picture Here>
©2011 Oracle Corporation