Java EE 6 &
GlassFish v3
Paving the path for future

Arun Gupta, GlassFish Guy
blogs.sun.com/arungupta, @arungupta
Are you tweeting ?



           #glassfish
           #vanjug
Java EE: Past & Present                                                           Flexible
                               ...
Compatible Java EE 5 Implementations
Compatible Java EE 6 Implementations

 Today:




 Coming:
Goals for the Java EE 6 Platform

• Flexible & Light-weight
• Extensible
     – Embrace Open Source Frameworks
• Easier to...
Java EE 6 is Flexible
• Decouple specifications to allow more combinations
• Expands potential licensee ecosystem
• Profil...
Java EE 6 Web Profile 1.0
• Fully functional mid-sized profile
  > Actively discussed in the Java EE 6 Expert Group and
  ...
Java EE 6 is Lightweight
• Pruning
  > Make some technologies optional
• Pruned today, means
  > Optional in the next rele...
Java EE 6 is Extensible
• Embrace open source frameworks
  > Wicket, Lift, Spring, Struts, ...
• Zero-configuration, drag-...
<web-fragment>
    <filter>
           <filter-name>wicket.helloworld</filter-name>
           <filter-class>org.apache.wi...
<web-fragment>
  <filter>
     <filter-name>LiftFilter</filter-name>
      <display-name>Lift Filter</display-name>
      ...
Java EE 6 - Done
• Specifications approved by the JCP
• Reference Implementation is GlassFish v3
• TCK
Java EE 6 Specifications
• The Platform
• Java EE 6 Web Profile 1.0
• Managed Beans 1.0
Java EE 6 Specifications
New
•   Context and Dependency Injection for Java EE (JSR 299)
•   Bean Validation 1.0 (JSR 303)
...
Java EE 6 Specifications
Extreme Makeover

•   Java Server Faces 2.0 (JSR 314)
•   Java Servlets 3.0 (JSR 315)
•   Java Pe...
Java EE 6 Specifications
Updates

•   Java API for XML-based Web Services 2.2 (JSR 224)
•   Java API for XML Binding 2.2 (...
Java EE 6 Specifications
As is
    JDBC 3.0 API
•
    Java Naming and Directory Interface 1.2
•
    Java Message Service 1...
Java EE 6 & Ease-of-development
• Continue advancements of Java EE 5
• Primary focus: Web Tier
• General principles
  > An...
EoD: Servlets
Servlet in Java EE 5: Two Files
<!--Deployment descriptor     /* Code in Java Class */
  web.xml -->
<web-ap...
EoD: Servlets in Java EE 6

package com.sun;
@WebServlet(name=”MyServlet”, urlPattern=”/myApp/*”)
public class MyServlet e...
Servlet 3.0
• Annotations to declare Servlets, Filters, Init param, ...
   > “web.xml” is optional in most of the cases
• ...
EJB 3.1
• @Singleton beans – shared state per server VM
• No interface view – one source file per bean
• Calendar timers –...
EoD: EJB Simplified Packaging
           Java EE 5                                        Java EE 6
                      ...
Java Server Faces 2.0
• Facelets as “templating language” for the page
  > Custom components much easier to develop
• Ajax...
Java Persistence API 2.0
• Expanded object/relational mapping functionality
  > @ElementCollection, @OrderColumn, ...
• Ad...
JPA 2.0
• Type-safe Criteria API
  > CriteriaQuery – select, where
  > QueryBuilder – expressions, predicates
• Standard c...
Bean Validation (JSR 303)
• Tier-independent mechanism to define constraints
  for data validation
  > Represented by anno...
Contexts & Dependency Injection for
Java EE (JSR 299)
• Type-safe Dependency Injection
  > Builds on @Inject API
• Context...
CDI Clients
• Injection Points
  > Field, Method, Constructor
                                 Which one ?
  > 0 or more q...
CDI Basics
• Separate from @Resource but can co-exist
  > @Resource for container managed DI
  > @Inject for application m...
CDI – Sample Client Code
Field and Method Injection


 public class CheckoutHandler {

     @Inject @LoggedIn User user;

...
CDI – Sample Client Code
Constructor Injection


   public class CheckoutHandler {

       @Inject
       CheckoutHandler(...
CDI - Sample Client Code
Multiple Qualifiers and Qualifiers with Arguments

  public class CheckoutHandler {

      @Injec...
CDI - Declaring Qualifiers
With a meta-annotation

 • Write your own annotation types and annotate them with
   @Qualifier...
CDI - How to configure ?
There is none!


• CDI discovers bean in all modules in which CDI is
  enabled
• Beans are automa...
CDI - Scopes
• Beans can be declared in a scope
  >   Everywhere: @ApplicationScoped, @RequestScoped
  >   Web app: @Sessi...
CDI - Named Beans
Built-in support for the Unified EL

 • Beans give themselves a name with @Named(“cart”)
 • Then refer t...
CDI - Events
Even more decoupling

• Annotation-based event model
• A bean @Observes an event
void onLogin(@Observes Login...
CDI - Much more ...
•   Producer methods and fields
•   Bridging Java EE resources
•   Alternatives
•   Interceptors
•   D...
IDE Support
• NetBeans 6.8
• Eclipse 3.4+
• IntelliJ 9.0
Java EE 6 Training & Certification
• Java EE6 Training Curriculum - Feb 2010
• Java EE6 Certifications available - Mar 201...
What is GlassFish ?
• A community
  > Users, Partners, Testers, Developers, ...
  > Started in 2005 on java.net
• Applicat...
Sun GlassFish Enterprise Server

                          Enterprise Manager



               Customer
               Ad...
GlassFish v3
• Modular:
  > Maven 2 – Build & Module description
  > Felix – OSGi runtime (216 bundles)
  > Allow any type...
Dynamic Languages & Frameworks




http://glassfish-scripting.dev.java.net
Rails Deployment Choices




                    Credits: http://birdwatchersdigest.com
Demo
NetBeans / Eclipse & Java EE 6


http://blogs.sun.com/arungupta/entry/screencast_27_simple_web_application
http://blo...
Embeddable GlassFish
 Server.Builder builder = new Server.Builder("testBuilder");


 // Get the builder for EmbeddedFileSy...
Embeddable GlassFish
 // Setup machinery to deploy
 deployer = server.getDeployer(); // type is EmbeddedDeployer
 DeployCo...
CLI-based Administration

●
  “asadmin” CLI utility
●
  Administrative commands can be added with each container :
       ...
Demo
GlassFish v3 Administration
Light Weight & On-demand Monitoring
 • Event-driven light-weight and non-intrusive monitoring
 • Modules provide domain sp...
Demo
GlassFish v3 Monitoring




http://blogs.sun.com/arungupta/entry/totd_104_glassfish_v3_monitoring
REST Interface

REST interface to management and monitoring data
●

    ●
        Configuration data, Commands invocation ...
Demo
GlassFish v3 REST Interface




http://blogs.sun.com/arungupta/entry/totd_113_javafx_front_end
http://blogs.sun.com/a...
GlassFish Partners
References
•   glassfish.org
•   sun.com/glassfish
•   blogs.sun.com/theaquarium
•   twitter.com/glassfish
•   glassfish@s...
Java EE 6 &
GlassFish v3
Paving the path for future

Arun Gupta, GlassFish Guy
blogs.sun.com/arungupta, @arungupta
       ...
Java EE 6 & GlassFish v3 at Vancouver JUG, Jan 26, 2010
Upcoming SlideShare
Loading in …5
×

Java EE 6 & GlassFish v3 at Vancouver JUG, Jan 26, 2010

2,294 views
2,168 views

Published on

Java EE 6 & GlassFish v3 at Vancouver JUG, Jan 26, 2010

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,294
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
93
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java EE 6 & GlassFish v3 at Vancouver JUG, Jan 26, 2010

  1. 1. Java EE 6 & GlassFish v3 Paving the path for future Arun Gupta, GlassFish Guy blogs.sun.com/arungupta, @arungupta
  2. 2. Are you tweeting ? #glassfish #vanjug
  3. 3. Java EE: Past & Present Flexible Ease of Development Java EE 6 Pruning Java EE 5 Extensibility Web Ease of Profiles Services Development Ease-of-dev Annotations EJB Lite J2EE 1.4 EJB 3.0 RESTful WS Web Services, Persistence API Robustness Management, New and CDI Enterprise Deployment, Updated Java J2EE 1.3 Async. Web Services Platform CMP, Connector Connector Architecture ` Java EE 6 J2EE 1.2 Servlet, JSP, Web Profile EJB, JMS JPE RMI/IIOP Project
  4. 4. Compatible Java EE 5 Implementations
  5. 5. Compatible Java EE 6 Implementations Today: Coming:
  6. 6. Goals for the Java EE 6 Platform • Flexible & Light-weight • Extensible – Embrace Open Source Frameworks • Easier to use, develop on – Continue on path set by Java EE 5
  7. 7. Java EE 6 is Flexible • Decouple specifications to allow more combinations • Expands potential licensee ecosystem • Profiles > Targeted bundle of technologies > Defined through the JCP > Web Profile Defined – Defined by the Java EE 6 Expert Group
  8. 8. Java EE 6 Web Profile 1.0 • Fully functional mid-sized profile > Actively discussed in the Java EE 6 Expert Group and outside it > Technologies – Servlets 3.0, JSP 2.2, EL 2.2, Debugging Support for Other Languages 1.0, JSTL 1.2, JSF 2.0, Common Annotations 1.1, EJB 3.1 Lite, JTA 1.1, JPA 2.0, Bean Validation 1.0, Managed Beans 1.0, Interceptors 1.1, Context & Dependency Injection 1.0, Dependency Injection for Java 1.0
  9. 9. Java EE 6 is Lightweight • Pruning > Make some technologies optional • Pruned today, means > Optional in the next release > Deleted in the subsequent releases • Pruned technologies will be marked in Javadocs • Technologies > JAX-RPC, EJB 2.x Entity Beans, JAXR, JSR 88
  10. 10. Java EE 6 is Extensible • Embrace open source frameworks > Wicket, Lift, Spring, Struts, ... • Zero-configuration, drag-and-drop for web frameworks > Servlets, servlet filters, context listeners for a framework get discovered and registered automatically • Plugin libraries using web fragments
  11. 11. <web-fragment> <filter> <filter-name>wicket.helloworld</filter-name> <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class> <init-param> <param-name>applicationClassName</param-name> <param-value>...</param-value> </init-param> </filter> <filter-mapping> <filter-name>wicket.helloworld</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-fragment> http://blogs.sun.com/arungupta/entry/totd_91_applying_java_ee
  12. 12. <web-fragment> <filter> <filter-name>LiftFilter</filter-name> <display-name>Lift Filter</display-name> <description>The Filter that intercepts lift calls</description> <filter-class>net.liftweb.http.LiftFilter</filter-class> </filter> <filter-mapping> <filter-name>LiftFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-fragment> http://blogs.sun.com/arungupta/entry/totd_101_applying_servlet_3
  13. 13. Java EE 6 - Done • Specifications approved by the JCP • Reference Implementation is GlassFish v3 • TCK
  14. 14. Java EE 6 Specifications • The Platform • Java EE 6 Web Profile 1.0 • Managed Beans 1.0
  15. 15. Java EE 6 Specifications New • Context and Dependency Injection for Java EE (JSR 299) • Bean Validation 1.0 (JSR 303) • Java API for RESTful Web Services (JSR 311) • Dependency Injection for Java (JSR 330)
  16. 16. Java EE 6 Specifications Extreme Makeover • Java Server Faces 2.0 (JSR 314) • Java Servlets 3.0 (JSR 315) • Java Persistence 2.0 (JSR 317) • Enterprise Java Beans 3.1 & Interceptors 1.1 (JSR 318) • Java EE Connector Architecture 1.6 (JSR 322)
  17. 17. Java EE 6 Specifications Updates • Java API for XML-based Web Services 2.2 (JSR 224) • Java API for XML Binding 2.2 (JSR 222) • Web Services Metadata MR3 (JSR 181) • JSP 2.2/EL 2.2 (JSR 245) • Web Services for Java EE 1.3 (JSR 109) • Common Annotations 1.1 (JSR 250) • Java Authorization Contract for Containers 1.3 (JSR 115) • Java Authentication Service Provider Interface for Containers 1.0 (JSR 196)
  18. 18. Java EE 6 Specifications As is JDBC 3.0 API • Java Naming and Directory Interface 1.2 • Java Message Service 1.1 • Java Transaction API 1.1 • Java Transaction Service 1.0 • JavaMail API Specification 1.4 • JavaBeans Activation Framework 1.1 • Java API for XML Processing 1.3 • Java API for XML-based RPC 1.1 • SOAP with Attachments API for Java 1.3 • Java API for XML Registries 1.0 • Java EE Management Specification 1.1 (JSR 77) • Java EE Deployment Specification 1.2 (JSR 88) • Java Management Extensions 1.2 • Java Authentication and Authorization Service 1.0 • Debugging Support for Other Languages (JSR 45) • Standard Tag Library for JSP 1.2 (JSR 52) • Streaming API for XML 1.0 (JSR 173) •
  19. 19. Java EE 6 & Ease-of-development • Continue advancements of Java EE 5 • Primary focus: Web Tier • General principles > Annotation-based programming model > Reduce or eliminate need for DD > Traditional API for advanced users
  20. 20. EoD: Servlets Servlet in Java EE 5: Two Files <!--Deployment descriptor /* Code in Java Class */ web.xml --> <web-app> package com.sun; <servlet> public class MyServlet extends <servlet-name>MyServlet HttpServlet { </servlet-name> public void <servlet-class> doGet(HttpServletRequest com.sun.MyServlet req,HttpServletResponse res) </servlet-class> </servlet> { <servlet-mapping> <servlet-name>MyServlet ... </servlet-name> <url-pattern>/myApp/* } </url-pattern> </servlet-mapping> ... ... </web-app> }
  21. 21. EoD: Servlets in Java EE 6 package com.sun; @WebServlet(name=”MyServlet”, urlPattern=”/myApp/*”) public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { ... } http://blogs.sun.com/arungupta/entry/totd_81_getting_started_with
  22. 22. Servlet 3.0 • Annotations to declare Servlets, Filters, Init param, ... > “web.xml” is optional in most of the cases • Pluggable frameworks using web fragments • Async support • Programmatic authentication and logout • Default error page, File upload support • Using new language features – for example Generics
  23. 23. EJB 3.1 • @Singleton beans – shared state per server VM • No interface view – one source file per bean • Calendar timers – cron like semantics > @Schedule(dayOfWeek=”Mon,Wed”) > (hour=”14”, dayOfMonth=”Last Thu”, month=”Nov”) > (minute=”*/5”, hour=”*”) • Application startup/shutdown callbacks • EJB “Lite” > Small subset of EJB 3.1 for use in Web profile
  24. 24. EoD: EJB Simplified Packaging Java EE 5 Java EE 6 foo.war foo.ear WEB-INF/classes foo_web.war com.sun.FooServlet com.sun.TickTock WEB-INF/web.xml com.sun.FooBean WEB-INF/classes com.sun.FooHelper com.sun.FooServlet com.sun.TickTock foo_ejb.jar com.sun.FooBean com.sun.FooHelper web.xml ? http://blogs.sun.com/arungupta/entry/totd_95_ejb_3_1
  25. 25. Java Server Faces 2.0 • Facelets as “templating language” for the page > Custom components much easier to develop • Ajax support integrated • “faces-config.xml” not required in common cases • Mojarra is the Reference Implementation of JSF 2
  26. 26. Java Persistence API 2.0 • Expanded object/relational mapping functionality > @ElementCollection, @OrderColumn, ... • Additions to the Java Persistence query language > INDEX, CASE/WHEN/ELSE • Metamodel API (javax.persistence.metamodel)
  27. 27. JPA 2.0 • Type-safe Criteria API > CriteriaQuery – select, where > QueryBuilder – expressions, predicates • Standard caching configuration > 2nd level caching > @Cache on entities
  28. 28. Bean Validation (JSR 303) • Tier-independent mechanism to define constraints for data validation > Represented by annotations > javax.validation • Integrated with JSF and JPA > JSF: f:validateRequired, f:validateRegexp > JPA: pre-persist, pre-update, and pre-remove • @NotNull(message=”...”), @Max, @Min, @Size • Fully Extensible > @Email String recipient;
  29. 29. Contexts & Dependency Injection for Java EE (JSR 299) • Type-safe Dependency Injection > Builds on @Inject API • Context/scope management • Works with multiple bean types • Includes ELResolver
  30. 30. CDI Clients • Injection Points > Field, Method, Constructor Which one ? > 0 or more qualifiers (Qualifier) > Type @Inject @LoggedIn User user Request What ? Injection (Type)
  31. 31. CDI Basics • Separate from @Resource but can co-exist > @Resource for container managed DI > @Inject for application managed DI • Strong typing, loose coupling > Clients only declare dependencies via injection points > Bean selection is done by CDI
  32. 32. CDI – Sample Client Code Field and Method Injection public class CheckoutHandler { @Inject @LoggedIn User user; @Inject PaymentProcessor processor; @Inject void setShoppingCart(@Default Cart cart) { … } }
  33. 33. CDI – Sample Client Code Constructor Injection public class CheckoutHandler { @Inject CheckoutHandler(@LoggedIn User user, PaymentProcessor processor, @Default Cart cart) { ... } }
  34. 34. CDI - Sample Client Code Multiple Qualifiers and Qualifiers with Arguments public class CheckoutHandler { @Inject CheckoutHandler(@LoggedIn User user, @Reliable @PayBy(CREDIT_CARD) PaymentProcessor processor, @Default Cart cart) { ... } }
  35. 35. CDI - Declaring Qualifiers With a meta-annotation • Write your own annotation types and annotate them with @Qualifier • For example: @Qualifier @Retention(RUNTIME) @Target({FIELD,TYPE}) public @interface Red {}
  36. 36. CDI - How to configure ? There is none! • CDI discovers bean in all modules in which CDI is enabled • Beans are automatically selected for injection • Possible to enable groups of bean selectively via a descriptor
  37. 37. CDI - Scopes • Beans can be declared in a scope > Everywhere: @ApplicationScoped, @RequestScoped > Web app: @SessionScoped > JSF app: @ConversarionScoped > Pseudo-scope (default): @Dependent • The CDI runtime will make sure the right bean is created at the right time • Client do NOT have to be scope-aware
  38. 38. CDI - Named Beans Built-in support for the Unified EL • Beans give themselves a name with @Named(“cart”) • Then refer to it from a JSF or JSP page using the EL: <h:commandButton value=”Checkout” action=“#{cart.checkout}”/>
  39. 39. CDI - Events Even more decoupling • Annotation-based event model • A bean @Observes an event void onLogin(@Observes LoginEvent event) { … } • Another bean fires an event using the Event.fire(T event) method
  40. 40. CDI - Much more ... • Producer methods and fields • Bridging Java EE resources • Alternatives • Interceptors • Decorators • Sterotypes
  41. 41. IDE Support • NetBeans 6.8 • Eclipse 3.4+ • IntelliJ 9.0
  42. 42. Java EE 6 Training & Certification • Java EE6 Training Curriculum - Feb 2010 • Java EE6 Certifications available - Mar 2010 • Register your interest in the courses and certifications and receive information about promotions > https://dct.sun.com/dct/forms/reg_us_1611_480_0.jsp
  43. 43. What is GlassFish ? • A community > Users, Partners, Testers, Developers, ... > Started in 2005 on java.net • Application Server > Enterprise Quality and Open Source (CDDL & GPL v2) > Java EE Reference Implementation > Full Commercial Support from Sun
  44. 44. Sun GlassFish Enterprise Server Enterprise Manager Customer Advocate eLearning Credit Customer Focused 24x7 Support Support Team GlassFish Sun VIP Open Source Interoperability Patches & Application Server Support Upgrades
  45. 45. GlassFish v3 • Modular: > Maven 2 – Build & Module description > Felix – OSGi runtime (216 bundles) > Allow any type of Container to be plugged – Start Container and Services on demand • Embeddable: runs in-VM • Extensible > Rails, Grails, Django, ...
  46. 46. Dynamic Languages & Frameworks http://glassfish-scripting.dev.java.net
  47. 47. Rails Deployment Choices Credits: http://birdwatchersdigest.com
  48. 48. Demo NetBeans / Eclipse & Java EE 6 http://blogs.sun.com/arungupta/entry/screencast_27_simple_web_application http://blogs.sun.com/arungupta/entry/screencast_28_simple_web_application http://blogs.sun.com/arungupta/entry/screencast_26_develop_run_debug/ http://blogs.sun.com/arungupta/entry/totd_93_getting_started_with/ http://blogs.sun.com/arungupta/entry/totd_94_a_simple_java http://blogs.sun.com/arungupta/entry/totd_95_ejb_3_1 http://blogs.sun.com/arungupta/entry/totd_102_java_ee_6 http://blogs.sun.com/arungupta/entry/totd_99_creating_a_java http://blog.arungupta.me/2008/11/screencast-28-simple-web-application-using-eclipse-and-glassfish-v3-prelude/
  49. 49. Embeddable GlassFish Server.Builder builder = new Server.Builder("testBuilder"); // Get the builder for EmbeddedFileSystem EmbeddedFileSystem.Builder efsb = new EmbeddedFileSystem.Builder(); EmbeddedFileSystem efs = efsb.build(); builder.embeddedFileSystem(efs); // Start the embedded server (should take no more than a few of seconds) server = builder.build(); // Add a WEB container (other containers: ejb, jps, all, ...) ContainerBuilder containerBuilder = server.createConfig(ContainerBuilder.Type.web); server.addContainer(containerBuilder); containerBuilder.create(server); server.createPort(port);
  50. 50. Embeddable GlassFish // Setup machinery to deploy deployer = server.getDeployer(); // type is EmbeddedDeployer DeployCommandParameters deployParams = new DeployCommandParameters(); deployParams.name = "myApplication"; // needed for undeploy deployParams.contextroot = context; // overrides whatever the WAR contains // Creates default virtual server, web listener, does the deploy and // returns the applicationName as a String (null means something went wrong) // duration depends on application size and nature. Heavy lifting done here. File archive = new File(archiveName); applicationName = deployer.deploy(archive, deployParams); return (applicationName == null) ? false : true;
  51. 51. CLI-based Administration ● “asadmin” CLI utility ● Administrative commands can be added with each container : @Service(name=”myCommand”) public class ChangeRandomCtr implements AdminCommand { @Param String s1; @Param String s2; …} ● Available as : asadmin myCommand –s1 foo –s2 bar
  52. 52. Demo GlassFish v3 Administration
  53. 53. Light Weight & On-demand Monitoring • Event-driven light-weight and non-intrusive monitoring • Modules provide domain specific probes (monitoring events) > EJB, Web, Connector, JPA, Jersey, Orb, Ruby • End-to-end monitoring on Solaris using DTrace • 3rd party scripting clients > JavaScript to begin with
  54. 54. Demo GlassFish v3 Monitoring http://blogs.sun.com/arungupta/entry/totd_104_glassfish_v3_monitoring
  55. 55. REST Interface REST interface to management and monitoring data ● ● Configuration data, Commands invocation (start/stop instance, deploy, undeploy, ...), CRUD resources (JMS, JDBC, ...) ● localhost:4848/management/domain ● localhost:4848/monitoring/domain ●GET, POST, DELETE methods ● XML, JSON, HTML reps
  56. 56. Demo GlassFish v3 REST Interface http://blogs.sun.com/arungupta/entry/totd_113_javafx_front_end http://blogs.sun.com/arungupta/entry/totd_116_glassfish_v3_administration
  57. 57. GlassFish Partners
  58. 58. References • glassfish.org • sun.com/glassfish • blogs.sun.com/theaquarium • twitter.com/glassfish • glassfish@sun.com
  59. 59. Java EE 6 & GlassFish v3 Paving the path for future Arun Gupta, GlassFish Guy blogs.sun.com/arungupta, @arungupta 60

×