SlideShare a Scribd company logo
GlassFish v3
The future of Java EE is here

Alexis Moussine-Pouchkine
GlassFish Team
This is no science fiction

Java EE 6 and GlassFish v3 shipped
th
final releases on December 10 2009
GlassFish Around You
GlassFish Around You
Some History and Context
Tomcat
Jasper
Catalina
JSTL
Struts
Crimson
XSLTC
Xalan
Xerces
JAXB
JAX-RPC
JSF

GlassFish v3
(Java EE 6)

GlassFish v1
(Java EE 5)
GlassFish
Launch

June
2005

v2

May
2006

Sept.
2007

v2.1

v2.1.1

Jan
2008

(you are here)

Dec.
2009
GlassFish
●

A Community
●
●
●

Users, Partners, Testers, Developers
Started in 2005 on java.net
Sub-projects
–

●

Jersey (JAX-RS), Metro (JAX-WS), Grizzly (nio),
Atmosphere (Comet), OpenMQ (JMS), and scripting

Application Server
●
●
●

Enterprise Quality and Open Source
Java EE 5 / 6 Reference Implementation
Full Commercial Support from Oracle
Oracle GlassFish Server
GlassFish going forward
●

No change to operation of open source project
●
●
●
●

●

GlassFish 3.0.1
●

●

GlassFish Open Source Edition under existing license
Remains transparent and participatory
Strengthened by Oracle leadership
Customer and community driven product roadmap
Additional platforms, jrockit, ...

Feature releases
●
●
●

GlassFish v3.1 in 2010, v3.2 in 2011, v4 in 2012
Clustering, centralized admin, Coherence, virtualization
Details at http://glassfish.org/roadmap
Demo

Painless development with
GlassFish v3
Painless Java EE development !
●
●

Incremental compile of all Java EE artifacts
Auto-deploy of all Java EE and static artifacts
Session Retention
●

Deployment option to maintain stateful
sessions across re-deployments

$ asadmin redeploy --properties
keepSessions=true myapp.war
●

●

Greatly simplifies the
development paradigm
Integrated in IDEs
Introducing
GlassFish v3
Modular and Dynamic
●

Modular : Apache Felix (OSGi)

●

Extensible : HK2

●

Yet very Fast !
Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010
Java EE, a brief History
Ease of
development
(web)
Ease of
development
Java EE 5

Web Services

Enterprise
Application

Robust
Scalable

J2EE 1.4

J2EE 1.3

J2EE 1.2

Project JPE
May 1998

Servlet
JSP
EJB
JMS
RMI/IIOP

Dec 1999
10 specs

CMP
JCA

Sept 2001
13 specs

WS
Management
Deployment

Nov 2003
20 specs

Annotations
EJB 3
JPA 1.0
WS-*
JSF

May 2006
23 specs

Java EE 6
EJB 3.1
JPA 2.0
Servlet 3.0
JSF 2.0
JAX-RS 1.1
CDI 1.0
@Inject
Bean Validat°

Web Profile
Managed
Bean

Q4 2009
28 specs
Java EE 6 – What's New?
●
●
●
●
●

Several new APIs
Web Profile
Extensibility & Pluggability
Dependency Injection
Improvement to many APIs
New and improved specifications
●
●
●
●
●
●
●

EJB 3.1
JPA 2.0
Servlet 3.0
JSF 2.0
JAX-RS 1.1
Connectors 1.6
Bean Validation 1.0

●
●
●
●
●
●
●
●

DI 1.0
CDI 1.0
Managed Beans 1.0
Interceptors 1.1
JAX-WS 2.2
JSR-109 1.3
JSP 2.2 / EL 2.2
JSR-250 1.1
JAX-RS
●

RESTful web services API

●

Already widely adopted

●

Really a general, high-level HTTP API

●

Annotation-based programming model

●

Programmatic API when needed

●

JAX-RS 1.1 integration with EJBs
JAX-RS sample code
@Path("widgets/{id}")
@Produces("application/widgets+xml")
public class WidgetResource {
public WidgetResource(
@PathParam("id") String id) {
...
}
@GET
Widget getWidget() {
...
}
}
Bean Validation 1.0
public class Address {
@NotNull @Size(max=30,
message="longer than {max} characters")
private String street1;
...
@NotNull @Valid
private Country country;
}
public class Country {
@NotNull @Size(max=20)
private String name;
...
}

request recursive
object graph
validation
Build your own!
@Size(min=5, max=5)
@ConstraintValidator(ZipcodeValidator.class)
@Documented
@Target({ANNOTATION_TYPE, METHOD, FIELD})
@Retention(RUNTIME)
public @interface ZipCode {
String message() default "Wrong zipcode";
String[] groups() default {};
}

Integrated in JPA and JSF
Bootstrap APIs
Java EE 6 Web Profile
●
●
●
●
●
●
●

Servlet 3.0
JSP 2.2 / EL 2.2
JSR-45 1.0
JSTL 1.2
JSF 2.0
Bean Validation 1.0
EJB 3.1 Lite

●
●
●
●
●
●
●

JPA 2.0
JTA 1.1
DI 1.0
CDI 1.0
Managed Beans 1.0
Interceptors 1.1
JSR-250 1.1
Modular Web Applications
●
●
●
●
●
●

Libraries can contain web-fragment.xml
web.xml is optional
@WebServlet, @WebFilter annotations
ServletContainerInitializer interface
Programmatic registration
Resource jars
JSF 2.0
●

Standardized facelets

●

Auto-discovery of component libraries

●

Composite components

●

Ajax support with partial views

●

Even a JavaScript API !
EJB 3.1
●

@Singleton beans

●

@Startup beans

●

@Asynchronous invocations

●

@Schedule tasks

●

EJBContainer API works on Java SE

●

Define EJBs directly inside a web app
Packaging in a war
foo.ear
lib/foo_common.jar
com/acme/Foo.class

foo_web.war
WEB-INF/web.xml
WEB-INF/classes
com/acme/FooServlet.class

foo_ejb.jar
com/acme/FooEJB.class
com/acme/FooEJBLocal.class

foo.war
WEB-INF/classes
com/acme/Foo.class
com/acme/FooServlet.class
com/acme/FooEJB.class
JPA 2.0
●

●

Support for collections of basic types and
embeddable objects
JPQL enhancements
e.g. CASE WHEN, NULLIF
Pessimistic locking
●

●
●

Criteria API for dynamic query construction
Dependency Injection
●

JSR-299 + JSR-330

●

Added @Inject support
@Inject @LoggedIn User user;

●

Beans discovered at startup

●

Injection metamodel (BeanManager API)

●

@Resource still around
@Resource DataSource myDB;
Dependency Injection Sample
public class CheckoutHandler {
@Inject
CheckoutHandler(@LoggedIn User user,
@Reliable @PayBy(CREDIT_CARD)
PaymentProcessor processor,
@Default Cart cart) {
...
}
}
Demo

Painless (Java EE 6) development
Yes, Eclipse too !

GlassFish Tools Bundle for Eclipse : http://download.java.net/glassfish/eclipse/
More Painless Development
●

●

Fast auto-deploy of all Java EE and static
artifacts
Application runner
●

●

java -jar glassfish.jar toto.war

Integration with maven 2
●

mvn gf:run, gf:start, gf:deploy, ...

●

Containers can be added/removed dynamically

●

Excellent Tools integration
How hard should it be to test
EJBs?

EJBContainer c = EJBContainer.createEJBContainer();
Context ic = c.getContext();
SimpleEjb ejb = (SimpleEjb)
ic.lookup("java:global/sample/SimpleEjb");
ejb.sayHello();
How hard should it be to test
EJBs?
New in EJB 3.1
EJBContainer c = EJBContainer.createEJBContainer();
Context ic = c.getContext();
SimpleEjb ejb = (SimpleEjb)
ic.lookup("java:global/sample/SimpleEjb");
ejb.sayHello();

Portable JNDI name
How hard should it be to test
EJBs?
@Test public void test() {
EJBContainer c = EJBContainer.createEJBContainer();
Context ic = c.getContext();
SimpleEjb ejb = (SimpleEjb)
ic.lookup("java:global/sample/SimpleEjb");
ejb.sayHello();
}

Demo
GlassFish Embedded
org.glassfish.api.embedded.Server server;
Server.Builder builder = new Server.Builder();
server = builder.build();
GlassFish Embedded
org.glassfish.api.embedded.Server server;
Server.Builder builder = new Server.Builder();
server = builder.build();
ContainerBuilder b =
server.createConfig(ContainerBuilder.Type.web);
server.addContainer(b);
GlassFish Embedded
org.glassfish.api.embedded.Server server;
Server.Builder builder = new Server.Builder();
server = builder.build();
ContainerBuilder b =
server.createConfig(ContainerBuilder.Type.web);
server.addContainer(b);
File archive = new File("hello.war");
server.getDeployer().deploy(archive);

Same bits, different entry point
All in one JAR available
GlassFish Embedded
@BeforeClass public static void initContainer() {
org.glassfish.api.embedded.Server server;
Server.Builder builder = new Server.Builder();
server = builder.build();
ContainerBuilder b =
server.createConfig(ContainerBuilder.Type.web);
server.addContainer(b);
File archive = new File("hello.war");
server.getDeployer().deploy(archive);
}

@Test public static void pingApplication() {
...
}
GlassFish Embedded
public static void main(String[] args) {
org.glassfish.api.embedded.Server server;
Server.Builder builder = new Server.Builder();
server = builder.build();
ContainerBuilder b =
server.createConfig(ContainerBuilder.Type.web);
server.addContainer(b);
File archive = new File("realApplication.war");
server.getDeployer().deploy(archive);
}

Ship app server inside the application
What's the deal with OSGi?
●

GlassFish runs on top of OSGi (Felix by default)
●
●
●
●
●

●

Also runs unmodified on Equinox (and Knopflerfish)
GlassFish ships with 200+ bundles
Can run without OSGi (Static mode)
Can use OSGi management tools (CLI or Web)
Can be installed on top of existing OSGi runtime

Any OSGi bundle will run in GlassFish v3
●
●
●

Drop it in glassfish/modules{/autostart}
Can also asadmin deploy it using --type osgi
GlassFish OSGi admin console
Extending GlassFish v3
OSGi-style – an example, a demo and a picture
●

●

●

●

●

OSGi declarative service
Service-Component
entry in the JAR Manifest
Invoke the service from a
servlet using standard
@Resource injection
Never use a GlassFish
API !
No need to chose
between OSGi and
Java EE

Step by step: http://blogs.sun.com/dochez/entry/glassfish_v3_extensions_part_4
Demo

Extending GlassFish v3
OSGi-style
Extending GlassFish v3
SpringDM – another example, demo and picture
●

●

●

●

●

Extend GlassFish with
an unmodified Spring dm
container
Simple Spring bean
implementing the service
Invoke the service from a
servlet using standard
@Resource injection
Still no use of a
GlassFish API
Single runtime for both
Spring and full Java EE

Step by step: http://blogs.sun.com/dochez/entry/glassfish_v3_extensions_part_4
OSGi + Java EE = Hybrid Apps
●

GlassFish as the modular runtime
●
●

●

●

Assembled spontaneously
Admin tools (Web & CLI)

Implementation of Java EE related OSGi
services & standards
Support for Java EE 6 platform
●

●

e.g. JPA or EJB as OSGi services

Web Application Bundle (WAB)
●

WAR + OSGi metadata + Web-ContextPath header
Update Center
Demo

GlassFish à la Carte
GlassFish à la carte
●

Unzip 5-MB bootstrap
●

Install core IPS packages
GlassFish à la carte
●

Unzip 5-MB bootstrap
●

●

Install core IPS packages

Define the repository to use
GlassFish à la carte
●

Unzip 5-MB bootstrap
●

●
●

Install core IPS packages

Define the repository to use
Install individual packages
●
●

Start with core glassfish-nucleus package
Drags dependencies of course
GlassFish à la carte
●

Unzip 5-MB bootstrap
●

●
●

Define the repository to use
Install individual packages
●
●

●

Install core IPS packages

Start with core glassfish-nucleus package
Drags dependencies of course

Install umbrella package (a distro really)
●

Enough to run a JAX-RS/EJB31 demo
GlassFish à la carte
●

Unzip 5-MB bootstrap
●

●
●

Define the repository to use
Install individual packages
●
●

●

●

Start with core glassfish-nucleus package
Drags dependencies of course

Install umbrella package (a distro really)
●

●

Install core IPS packages

Enough to run a JAX-RS/EJB31 demo

Create GlassFish server instance
Deploy application
GlassFish à la carte
●

Unzip 5-MB bootstrap
●

●
●

Define the repository to use
Install individual packages
●
●

●

●
●

Start with core glassfish-nucleus package
Drags dependencies of course

Install umbrella package (a distro really)
●

●

Install core IPS packages

Enough to run a JAX-RS/EJB31 demo

Create GlassFish server instance
Deploy application
Run!
Monitoring and Management
Beyond web console and asadmin
●

Dynamic and non-intrusive monitoring of events
from any GlassFish runtime classes
●

BTrace integration new!
–
–

●

Probe Providers defined in java or XML new!
–

●
●

●

Portable, dynamic and safe tracing tool for Java
Btrace annotations and API to write scripts
Default providers & roll out your own

RESTful interface new!
DTrace for end-to-end new!

Still exposed via JMX
●

jconsole and visualvm as natural clients
RESTful admin
●

JAX-RS/Jersey + Grizzly to provide REST
interfaces to :
●
●
●

●

Available from :
●
●

●

●

http://localhost:4848/management/domain
http://localhost:4848/monitoring/domain

Use REST clients as Admin GUI substitute
●

●

Configure runtime (via GET, POST, DELETE)
Invoke commands (restart, stop, deploy, etc..)
Monitoring (GET only)

Use you favorite glue/scripting language or tool

Data offered as either XML, HTML or JSON
Extensible
Demo

RESTful admin
A lot more ...
●

Management and Monitoring
●

●

Dynamic languages
●

●
●

●

mod_jk
WebDAV, CGI, SSI

Web Services Metro
●

●

Rails, Grails, Django, Scala/Lift...

Comet, Atmosphere
Full support for
●

●

Dynamic, Btrace, ...

.Net 3.5 interop

OpenMQ

E

te
x

s
n

le
ib
GlassFish v3 – Practical
●

Get it from http://glassfish.org
●
●

●

Choice !
●
●

●
●

GlassFish v3 now final !
Also from http://www.oracle.com/goto/glassfish

Eclipse or NetBeans (or vi...)
Felix or Equinox

Graphical Installer, Zip version
Download size starting at 30MB
●

Can move from Web profile to full (and vice-versa)
Questions

alexis.mp@sun.com
http://blogs.sun.com/alexismp
twitter: alexismp

More Related Content

What's hot (20)

PDF
NetBeans Support for EcmaScript 6
Kostas Saidis
 
PDF
Project Fuji/OpenESB Aquarium Paris
Alexis Moussine-Pouchkine
 
PDF
OSGi Presentation
Michal Malohlava
 
PDF
Java 9 Modularity in Action
Sander Mak (@Sander_Mak)
 
PDF
OpenJDK-Zulu talk at JEEConf'14
Ivan Krylov
 
PPTX
Discuss about java 9 with latest features
NexSoftsys
 
PDF
OSGi Blueprint Services
Guillaume Nodet
 
PDF
Preparing your code for Java 9
Deepu Xavier
 
KEY
OSGi in 5 minutes
Serge Huber
 
KEY
うさぎ組 in G* WorkShop -うさみみの日常-
kyon mm
 
PDF
Polygot Java EE on the GraalVM
Ryan Cuprak
 
PDF
Implementing Quality on Java projects
Vincent Massol
 
PDF
OpenWebBeans and DeltaSpike at ApacheCon
os890
 
PDF
Running JavaScript Efficiently in a Java World
irbull
 
PPTX
JSF2
Alex Tumanoff
 
PDF
Java FX Tools Aquarium Paris
Alexis Moussine-Pouchkine
 
PDF
Module, AMD, RequireJS
偉格 高
 
PPTX
Dynamic Groovy Edges
Jimmy Ray
 
PDF
Scala and Play with Gradle
Wei Chen
 
ODP
Gradle - time for another build
Igor Khotin
 
NetBeans Support for EcmaScript 6
Kostas Saidis
 
Project Fuji/OpenESB Aquarium Paris
Alexis Moussine-Pouchkine
 
OSGi Presentation
Michal Malohlava
 
Java 9 Modularity in Action
Sander Mak (@Sander_Mak)
 
OpenJDK-Zulu talk at JEEConf'14
Ivan Krylov
 
Discuss about java 9 with latest features
NexSoftsys
 
OSGi Blueprint Services
Guillaume Nodet
 
Preparing your code for Java 9
Deepu Xavier
 
OSGi in 5 minutes
Serge Huber
 
うさぎ組 in G* WorkShop -うさみみの日常-
kyon mm
 
Polygot Java EE on the GraalVM
Ryan Cuprak
 
Implementing Quality on Java projects
Vincent Massol
 
OpenWebBeans and DeltaSpike at ApacheCon
os890
 
Running JavaScript Efficiently in a Java World
irbull
 
Java FX Tools Aquarium Paris
Alexis Moussine-Pouchkine
 
Module, AMD, RequireJS
偉格 高
 
Dynamic Groovy Edges
Jimmy Ray
 
Scala and Play with Gradle
Wei Chen
 
Gradle - time for another build
Igor Khotin
 

Viewers also liked (20)

PDF
Apache Camel - Stéphane Kay - April 2011
JUG Lausanne
 
PPSX
E6 misterios del cuerpo humano
enquica
 
PDF
Antenas tdt
Antenistas Madrid
 
DOC
χημ.θετ.κατ.οξεα βασεις
Agathi Bonia
 
PDF
Travel talk september 2015 - MAU SHA TAB
Beachcomber Hotels
 
PPS
El paquete de_galletas
enquica
 
PDF
9789740331469
CUPress
 
PPTX
Additive Manufacturing: The Future is Now
Audio Solutionz
 
PDF
Transcript.compressed
Varun Patel
 
DOC
Resume
giri Yadu
 
PPTX
Cироты войны
pnextorg
 
PDF
10-12 Marksheet.compressed
Varun Patel
 
PDF
Sudhir Solar panel Catalogue
ritika
 
PDF
CloudBees - Sacha Labourey - May 2011
JUG Lausanne
 
PDF
Workshop scrum voor product owners
ANGI studio
 
PPTX
First aid tips
Try Food Lovers
 
PPT
Gamification
wypasmaras
 
PDF
Arconics-Brochure-Nov-2015
Gary Byrnes
 
PPTX
Ge 04-relieve-1 b
teresart
 
Apache Camel - Stéphane Kay - April 2011
JUG Lausanne
 
E6 misterios del cuerpo humano
enquica
 
Antenas tdt
Antenistas Madrid
 
χημ.θετ.κατ.οξεα βασεις
Agathi Bonia
 
Travel talk september 2015 - MAU SHA TAB
Beachcomber Hotels
 
El paquete de_galletas
enquica
 
9789740331469
CUPress
 
Additive Manufacturing: The Future is Now
Audio Solutionz
 
Transcript.compressed
Varun Patel
 
Resume
giri Yadu
 
Cироты войны
pnextorg
 
10-12 Marksheet.compressed
Varun Patel
 
Sudhir Solar panel Catalogue
ritika
 
CloudBees - Sacha Labourey - May 2011
JUG Lausanne
 
Workshop scrum voor product owners
ANGI studio
 
First aid tips
Try Food Lovers
 
Gamification
wypasmaras
 
Arconics-Brochure-Nov-2015
Gary Byrnes
 
Ge 04-relieve-1 b
teresart
 
Ad

Similar to Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010 (20)

PDF
Java EE 6, Eclipse, GlassFish @EclipseCon 2010
Ludovic Champenois
 
PDF
Java EE 6, Eclipse @ EclipseCon
Ludovic Champenois
 
ODP
GlassFish and JavaEE, Today and Future
Alexis Moussine-Pouchkine
 
PDF
Deploying Java EE 6 Apps in a Cluster: GlassFish 3.1 at Dallas Tech Fest 2011
Arun Gupta
 
PDF
GlassFish Server 3.1: Deploying your Java EE 6 Applications
Arun Gupta
 
PDF
GlassFish 3.1 at JCertif 2011
Arun Gupta
 
PDF
GlassFish OSGi Server
Artur Alves
 
PDF
OTN Developer Days - GlassFish
glassfish
 
PDF
GlassFish Community and future larochelle
Alexis Moussine-Pouchkine
 
PDF
GlassFish OSGi - Java2days 2010
Alexis Moussine-Pouchkine
 
PDF
Andrei Niculae - glassfish - 24mai2011
Agora Group
 
PDF
Glass Fish V3 University Amers May2009
Eugene Bogaart
 
PDF
Boston 2011 OTN Developer Days - GlassFish
Arun Gupta
 
PDF
GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...
Arun Gupta
 
PDF
Java EE 6 Clustering with Glassfish 3.1
Shreedhar Ganapathy
 
PDF
Server Day 2009: GlassFish 3 by Alexis Moussine-Pouchkine
JUG Genova
 
PDF
JavaEE 6 tools coverage
Ludovic Champenois
 
PDF
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010
Arun Gupta
 
ODP
OTN Developer Days - Java EE 6
glassfish
 
PDF
Java EE 6 workshop at Dallas Tech Fest 2011
Arun Gupta
 
Java EE 6, Eclipse, GlassFish @EclipseCon 2010
Ludovic Champenois
 
Java EE 6, Eclipse @ EclipseCon
Ludovic Champenois
 
GlassFish and JavaEE, Today and Future
Alexis Moussine-Pouchkine
 
Deploying Java EE 6 Apps in a Cluster: GlassFish 3.1 at Dallas Tech Fest 2011
Arun Gupta
 
GlassFish Server 3.1: Deploying your Java EE 6 Applications
Arun Gupta
 
GlassFish 3.1 at JCertif 2011
Arun Gupta
 
GlassFish OSGi Server
Artur Alves
 
OTN Developer Days - GlassFish
glassfish
 
GlassFish Community and future larochelle
Alexis Moussine-Pouchkine
 
GlassFish OSGi - Java2days 2010
Alexis Moussine-Pouchkine
 
Andrei Niculae - glassfish - 24mai2011
Agora Group
 
Glass Fish V3 University Amers May2009
Eugene Bogaart
 
Boston 2011 OTN Developer Days - GlassFish
Arun Gupta
 
GlassFish 3.1 – Simplifying your Java EE 6 Development and Deployment @ JAX L...
Arun Gupta
 
Java EE 6 Clustering with Glassfish 3.1
Shreedhar Ganapathy
 
Server Day 2009: GlassFish 3 by Alexis Moussine-Pouchkine
JUG Genova
 
JavaEE 6 tools coverage
Ludovic Champenois
 
Tools Coverage for the Java EE Platform @ Silicon Valley Code Camp 2010
Arun Gupta
 
OTN Developer Days - Java EE 6
glassfish
 
Java EE 6 workshop at Dallas Tech Fest 2011
Arun Gupta
 
Ad

More from JUG Lausanne (20)

PDF
Introduction aux algorithmes génétiques
JUG Lausanne
 
PDF
Développer un moteur d'exécution symbolique en partant de rien
JUG Lausanne
 
PDF
Reverse engineering Java et contournement du mécanisme de paiement inapp Android
JUG Lausanne
 
PDF
Exemple d'IOT et ML avec Android, Cassandra et Spark
JUG Lausanne
 
PDF
Play! chez Zaptravel - Nicolas Martignole - December 2012
JUG Lausanne
 
PDF
Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012
JUG Lausanne
 
PDF
Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...
JUG Lausanne
 
PDF
OpenDS - Ludovic Poitou - December 2010
JUG Lausanne
 
PDF
Spring Batch - Julien Jakubowski - November 2010
JUG Lausanne
 
PDF
Infinispan - Galder Zamarreno - October 2010
JUG Lausanne
 
PDF
No Sql - Olivier Mallassi - September 2010
JUG Lausanne
 
PDF
Introduction à Scala - Michel Schinz - January 2010
JUG Lausanne
 
PDF
Introduction Groovy / Grails - Cyril Picat - December 2009
JUG Lausanne
 
PDF
Initiation aux tests fonctionnels - Philippe Kernevez - October 2009
JUG Lausanne
 
PDF
Sonar - Freddy Mallet - April 2009
JUG Lausanne
 
PDF
Maven2 - Philippe Kernevez - March 2009
JUG Lausanne
 
PDF
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
JUG Lausanne
 
PDF
XML & Java - Raphaël Tagliani - March 2008
JUG Lausanne
 
PDF
Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008
JUG Lausanne
 
PDF
Scripting with Java FX - Cédric Tabin - December 2007
JUG Lausanne
 
Introduction aux algorithmes génétiques
JUG Lausanne
 
Développer un moteur d'exécution symbolique en partant de rien
JUG Lausanne
 
Reverse engineering Java et contournement du mécanisme de paiement inapp Android
JUG Lausanne
 
Exemple d'IOT et ML avec Android, Cassandra et Spark
JUG Lausanne
 
Play! chez Zaptravel - Nicolas Martignole - December 2012
JUG Lausanne
 
Playframework Realtime Web - Guillaume Bort & Sadek Drobi - December 2012
JUG Lausanne
 
Session dédiée à l'analyse de la qualité du code Java - Cyril Picat - Februar...
JUG Lausanne
 
OpenDS - Ludovic Poitou - December 2010
JUG Lausanne
 
Spring Batch - Julien Jakubowski - November 2010
JUG Lausanne
 
Infinispan - Galder Zamarreno - October 2010
JUG Lausanne
 
No Sql - Olivier Mallassi - September 2010
JUG Lausanne
 
Introduction à Scala - Michel Schinz - January 2010
JUG Lausanne
 
Introduction Groovy / Grails - Cyril Picat - December 2009
JUG Lausanne
 
Initiation aux tests fonctionnels - Philippe Kernevez - October 2009
JUG Lausanne
 
Sonar - Freddy Mallet - April 2009
JUG Lausanne
 
Maven2 - Philippe Kernevez - March 2009
JUG Lausanne
 
Introduction à Google Web Toolkit (GWT) - Philippe Kernevez - February 2009
JUG Lausanne
 
XML & Java - Raphaël Tagliani - March 2008
JUG Lausanne
 
Visual Mobile Applications with Netbeans 6.0 - Cédric Tabin - February 2008
JUG Lausanne
 
Scripting with Java FX - Cédric Tabin - December 2007
JUG Lausanne
 

Recently uploaded (20)

PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
Blockchain Transactions Explained For Everyone
CIFDAQ
 
PDF
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PDF
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Blockchain Transactions Explained For Everyone
CIFDAQ
 
IoT-Powered Industrial Transformation – Smart Manufacturing to Connected Heal...
Rejig Digital
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Smart Trailers 2025 Update with History and Overview
Paul Menig
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
LLMs.txt: Easily Control How AI Crawls Your Site
Keploy
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 

Java EE 6 & GlassFish V3 - Alexis Moussine-Pouchkine - May 2010

  • 1. GlassFish v3 The future of Java EE is here Alexis Moussine-Pouchkine GlassFish Team
  • 2. This is no science fiction Java EE 6 and GlassFish v3 shipped th final releases on December 10 2009
  • 5. Some History and Context Tomcat Jasper Catalina JSTL Struts Crimson XSLTC Xalan Xerces JAXB JAX-RPC JSF GlassFish v3 (Java EE 6) GlassFish v1 (Java EE 5) GlassFish Launch June 2005 v2 May 2006 Sept. 2007 v2.1 v2.1.1 Jan 2008 (you are here) Dec. 2009
  • 6. GlassFish ● A Community ● ● ● Users, Partners, Testers, Developers Started in 2005 on java.net Sub-projects – ● Jersey (JAX-RS), Metro (JAX-WS), Grizzly (nio), Atmosphere (Comet), OpenMQ (JMS), and scripting Application Server ● ● ● Enterprise Quality and Open Source Java EE 5 / 6 Reference Implementation Full Commercial Support from Oracle
  • 8. GlassFish going forward ● No change to operation of open source project ● ● ● ● ● GlassFish 3.0.1 ● ● GlassFish Open Source Edition under existing license Remains transparent and participatory Strengthened by Oracle leadership Customer and community driven product roadmap Additional platforms, jrockit, ... Feature releases ● ● ● GlassFish v3.1 in 2010, v3.2 in 2011, v4 in 2012 Clustering, centralized admin, Coherence, virtualization Details at http://glassfish.org/roadmap
  • 10. Painless Java EE development ! ● ● Incremental compile of all Java EE artifacts Auto-deploy of all Java EE and static artifacts
  • 11. Session Retention ● Deployment option to maintain stateful sessions across re-deployments $ asadmin redeploy --properties keepSessions=true myapp.war ● ● Greatly simplifies the development paradigm Integrated in IDEs
  • 13. Modular and Dynamic ● Modular : Apache Felix (OSGi) ● Extensible : HK2 ● Yet very Fast !
  • 15. Java EE, a brief History Ease of development (web) Ease of development Java EE 5 Web Services Enterprise Application Robust Scalable J2EE 1.4 J2EE 1.3 J2EE 1.2 Project JPE May 1998 Servlet JSP EJB JMS RMI/IIOP Dec 1999 10 specs CMP JCA Sept 2001 13 specs WS Management Deployment Nov 2003 20 specs Annotations EJB 3 JPA 1.0 WS-* JSF May 2006 23 specs Java EE 6 EJB 3.1 JPA 2.0 Servlet 3.0 JSF 2.0 JAX-RS 1.1 CDI 1.0 @Inject Bean Validat° Web Profile Managed Bean Q4 2009 28 specs
  • 16. Java EE 6 – What's New? ● ● ● ● ● Several new APIs Web Profile Extensibility & Pluggability Dependency Injection Improvement to many APIs
  • 17. New and improved specifications ● ● ● ● ● ● ● EJB 3.1 JPA 2.0 Servlet 3.0 JSF 2.0 JAX-RS 1.1 Connectors 1.6 Bean Validation 1.0 ● ● ● ● ● ● ● ● DI 1.0 CDI 1.0 Managed Beans 1.0 Interceptors 1.1 JAX-WS 2.2 JSR-109 1.3 JSP 2.2 / EL 2.2 JSR-250 1.1
  • 18. JAX-RS ● RESTful web services API ● Already widely adopted ● Really a general, high-level HTTP API ● Annotation-based programming model ● Programmatic API when needed ● JAX-RS 1.1 integration with EJBs
  • 19. JAX-RS sample code @Path("widgets/{id}") @Produces("application/widgets+xml") public class WidgetResource { public WidgetResource( @PathParam("id") String id) { ... } @GET Widget getWidget() { ... } }
  • 20. Bean Validation 1.0 public class Address { @NotNull @Size(max=30, message="longer than {max} characters") private String street1; ... @NotNull @Valid private Country country; } public class Country { @NotNull @Size(max=20) private String name; ... } request recursive object graph validation
  • 21. Build your own! @Size(min=5, max=5) @ConstraintValidator(ZipcodeValidator.class) @Documented @Target({ANNOTATION_TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface ZipCode { String message() default "Wrong zipcode"; String[] groups() default {}; } Integrated in JPA and JSF Bootstrap APIs
  • 22. Java EE 6 Web Profile ● ● ● ● ● ● ● Servlet 3.0 JSP 2.2 / EL 2.2 JSR-45 1.0 JSTL 1.2 JSF 2.0 Bean Validation 1.0 EJB 3.1 Lite ● ● ● ● ● ● ● JPA 2.0 JTA 1.1 DI 1.0 CDI 1.0 Managed Beans 1.0 Interceptors 1.1 JSR-250 1.1
  • 23. Modular Web Applications ● ● ● ● ● ● Libraries can contain web-fragment.xml web.xml is optional @WebServlet, @WebFilter annotations ServletContainerInitializer interface Programmatic registration Resource jars
  • 24. JSF 2.0 ● Standardized facelets ● Auto-discovery of component libraries ● Composite components ● Ajax support with partial views ● Even a JavaScript API !
  • 25. EJB 3.1 ● @Singleton beans ● @Startup beans ● @Asynchronous invocations ● @Schedule tasks ● EJBContainer API works on Java SE ● Define EJBs directly inside a web app
  • 26. Packaging in a war foo.ear lib/foo_common.jar com/acme/Foo.class foo_web.war WEB-INF/web.xml WEB-INF/classes com/acme/FooServlet.class foo_ejb.jar com/acme/FooEJB.class com/acme/FooEJBLocal.class foo.war WEB-INF/classes com/acme/Foo.class com/acme/FooServlet.class com/acme/FooEJB.class
  • 27. JPA 2.0 ● ● Support for collections of basic types and embeddable objects JPQL enhancements e.g. CASE WHEN, NULLIF Pessimistic locking ● ● ● Criteria API for dynamic query construction
  • 28. Dependency Injection ● JSR-299 + JSR-330 ● Added @Inject support @Inject @LoggedIn User user; ● Beans discovered at startup ● Injection metamodel (BeanManager API) ● @Resource still around @Resource DataSource myDB;
  • 29. Dependency Injection Sample public class CheckoutHandler { @Inject CheckoutHandler(@LoggedIn User user, @Reliable @PayBy(CREDIT_CARD) PaymentProcessor processor, @Default Cart cart) { ... } }
  • 30. Demo Painless (Java EE 6) development
  • 31. Yes, Eclipse too ! GlassFish Tools Bundle for Eclipse : http://download.java.net/glassfish/eclipse/
  • 32. More Painless Development ● ● Fast auto-deploy of all Java EE and static artifacts Application runner ● ● java -jar glassfish.jar toto.war Integration with maven 2 ● mvn gf:run, gf:start, gf:deploy, ... ● Containers can be added/removed dynamically ● Excellent Tools integration
  • 33. How hard should it be to test EJBs? EJBContainer c = EJBContainer.createEJBContainer(); Context ic = c.getContext(); SimpleEjb ejb = (SimpleEjb) ic.lookup("java:global/sample/SimpleEjb"); ejb.sayHello();
  • 34. How hard should it be to test EJBs? New in EJB 3.1 EJBContainer c = EJBContainer.createEJBContainer(); Context ic = c.getContext(); SimpleEjb ejb = (SimpleEjb) ic.lookup("java:global/sample/SimpleEjb"); ejb.sayHello(); Portable JNDI name
  • 35. How hard should it be to test EJBs? @Test public void test() { EJBContainer c = EJBContainer.createEJBContainer(); Context ic = c.getContext(); SimpleEjb ejb = (SimpleEjb) ic.lookup("java:global/sample/SimpleEjb"); ejb.sayHello(); } Demo
  • 36. GlassFish Embedded org.glassfish.api.embedded.Server server; Server.Builder builder = new Server.Builder(); server = builder.build();
  • 37. GlassFish Embedded org.glassfish.api.embedded.Server server; Server.Builder builder = new Server.Builder(); server = builder.build(); ContainerBuilder b = server.createConfig(ContainerBuilder.Type.web); server.addContainer(b);
  • 38. GlassFish Embedded org.glassfish.api.embedded.Server server; Server.Builder builder = new Server.Builder(); server = builder.build(); ContainerBuilder b = server.createConfig(ContainerBuilder.Type.web); server.addContainer(b); File archive = new File("hello.war"); server.getDeployer().deploy(archive); Same bits, different entry point All in one JAR available
  • 39. GlassFish Embedded @BeforeClass public static void initContainer() { org.glassfish.api.embedded.Server server; Server.Builder builder = new Server.Builder(); server = builder.build(); ContainerBuilder b = server.createConfig(ContainerBuilder.Type.web); server.addContainer(b); File archive = new File("hello.war"); server.getDeployer().deploy(archive); } @Test public static void pingApplication() { ... }
  • 40. GlassFish Embedded public static void main(String[] args) { org.glassfish.api.embedded.Server server; Server.Builder builder = new Server.Builder(); server = builder.build(); ContainerBuilder b = server.createConfig(ContainerBuilder.Type.web); server.addContainer(b); File archive = new File("realApplication.war"); server.getDeployer().deploy(archive); } Ship app server inside the application
  • 41. What's the deal with OSGi? ● GlassFish runs on top of OSGi (Felix by default) ● ● ● ● ● ● Also runs unmodified on Equinox (and Knopflerfish) GlassFish ships with 200+ bundles Can run without OSGi (Static mode) Can use OSGi management tools (CLI or Web) Can be installed on top of existing OSGi runtime Any OSGi bundle will run in GlassFish v3 ● ● ● Drop it in glassfish/modules{/autostart} Can also asadmin deploy it using --type osgi GlassFish OSGi admin console
  • 42. Extending GlassFish v3 OSGi-style – an example, a demo and a picture ● ● ● ● ● OSGi declarative service Service-Component entry in the JAR Manifest Invoke the service from a servlet using standard @Resource injection Never use a GlassFish API ! No need to chose between OSGi and Java EE Step by step: http://blogs.sun.com/dochez/entry/glassfish_v3_extensions_part_4
  • 44. Extending GlassFish v3 SpringDM – another example, demo and picture ● ● ● ● ● Extend GlassFish with an unmodified Spring dm container Simple Spring bean implementing the service Invoke the service from a servlet using standard @Resource injection Still no use of a GlassFish API Single runtime for both Spring and full Java EE Step by step: http://blogs.sun.com/dochez/entry/glassfish_v3_extensions_part_4
  • 45. OSGi + Java EE = Hybrid Apps ● GlassFish as the modular runtime ● ● ● ● Assembled spontaneously Admin tools (Web & CLI) Implementation of Java EE related OSGi services & standards Support for Java EE 6 platform ● ● e.g. JPA or EJB as OSGi services Web Application Bundle (WAB) ● WAR + OSGi metadata + Web-ContextPath header
  • 48. GlassFish à la carte ● Unzip 5-MB bootstrap ● Install core IPS packages
  • 49. GlassFish à la carte ● Unzip 5-MB bootstrap ● ● Install core IPS packages Define the repository to use
  • 50. GlassFish à la carte ● Unzip 5-MB bootstrap ● ● ● Install core IPS packages Define the repository to use Install individual packages ● ● Start with core glassfish-nucleus package Drags dependencies of course
  • 51. GlassFish à la carte ● Unzip 5-MB bootstrap ● ● ● Define the repository to use Install individual packages ● ● ● Install core IPS packages Start with core glassfish-nucleus package Drags dependencies of course Install umbrella package (a distro really) ● Enough to run a JAX-RS/EJB31 demo
  • 52. GlassFish à la carte ● Unzip 5-MB bootstrap ● ● ● Define the repository to use Install individual packages ● ● ● ● Start with core glassfish-nucleus package Drags dependencies of course Install umbrella package (a distro really) ● ● Install core IPS packages Enough to run a JAX-RS/EJB31 demo Create GlassFish server instance Deploy application
  • 53. GlassFish à la carte ● Unzip 5-MB bootstrap ● ● ● Define the repository to use Install individual packages ● ● ● ● ● Start with core glassfish-nucleus package Drags dependencies of course Install umbrella package (a distro really) ● ● Install core IPS packages Enough to run a JAX-RS/EJB31 demo Create GlassFish server instance Deploy application Run!
  • 54. Monitoring and Management Beyond web console and asadmin ● Dynamic and non-intrusive monitoring of events from any GlassFish runtime classes ● BTrace integration new! – – ● Probe Providers defined in java or XML new! – ● ● ● Portable, dynamic and safe tracing tool for Java Btrace annotations and API to write scripts Default providers & roll out your own RESTful interface new! DTrace for end-to-end new! Still exposed via JMX ● jconsole and visualvm as natural clients
  • 55. RESTful admin ● JAX-RS/Jersey + Grizzly to provide REST interfaces to : ● ● ● ● Available from : ● ● ● ● http://localhost:4848/management/domain http://localhost:4848/monitoring/domain Use REST clients as Admin GUI substitute ● ● Configure runtime (via GET, POST, DELETE) Invoke commands (restart, stop, deploy, etc..) Monitoring (GET only) Use you favorite glue/scripting language or tool Data offered as either XML, HTML or JSON Extensible
  • 57. A lot more ... ● Management and Monitoring ● ● Dynamic languages ● ● ● ● mod_jk WebDAV, CGI, SSI Web Services Metro ● ● Rails, Grails, Django, Scala/Lift... Comet, Atmosphere Full support for ● ● Dynamic, Btrace, ... .Net 3.5 interop OpenMQ E te x s n le ib
  • 58. GlassFish v3 – Practical ● Get it from http://glassfish.org ● ● ● Choice ! ● ● ● ● GlassFish v3 now final ! Also from http://www.oracle.com/goto/glassfish Eclipse or NetBeans (or vi...) Felix or Equinox Graphical Installer, Zip version Download size starting at 30MB ● Can move from Web profile to full (and vice-versa)