Monday Jan 28, 2013

JSF 2.2 Faces Flow - @FlowScoped, #{flowScope}, @FlowDefinition (TOTD #198)


JavaServer Faces 2.2 is more evolutionary than it is revolutionary. This is by design as JSF 2.0 added a whole bunch of new features as part of the Java EE 6 platform. The Preface 1 from the JSF 2.2 Public Review specification provides a list of changes between JSF 2.1 and 2.2. There are several changes coming in JSF 2.2 but the big ticket items are:
  • Faces Flow
  • Resource Library Contract
  • HTML5 Friendly Markup
This Tip Of The Day (TOTD) will explain Faces Flow. Section 7.5 and 11.4.3 in the specification introduce the feature.

Faces Flow provides an encapsulation of related views/pages with an application defined entry and exit points. For example, a check out cart can consist of cart page, credit card details page, shipping address page, and confirmation page. All these pages, along with required resources and beans, can be packaged together as a module which can then be reused in other applications.

Each flow has a well-defined entry and exit point that have been assigned some application specific meaning by the developer. Usually the objects in a faces flow are designed to allow the user to accomplish a task that requires input over a number of different views. In our case, the navigation between pages for selecting items, entering shipping address, credit card details, and confirmation page would make a flow. All the pages and objects that deal with the checking out process can be composed as modules. An application thus become a collection of flows instead of just views.

It takes the best part of other flow-based technologies such as ADF Task Flow, Spring Web Flow, and Apace MyFaces CODI and standardizes in JSF 2.2.

What is the need ?

Imagine a multi-page shopping cart with one page for selecting the items, a second page for shipping options, a third page for entering credit card details, and a fourth page for final confirmation. Managed Beans can be used to capture the data, session scope variables pass information between pages, button clicks can be used to invoke the business logic in backing EJBs, and (conditional) navigation rules can be defined to go from one page to another. There are a few issues with this approach:
  • This flow of sequence will typically be part of a bigger application. However an application, typically with several pages, is one large flow and everything is visible with no logical partitioning.
  • The flow of pages or views cannot be encapsulated as a logical unit and thus cannot be reused, e.g. incorporated into another bigger flow easily.
  • The lowest logical granularity is a page. The only way to invoke application logic is to tie it to a UI component activated by the user in a page. Business logic cannot be invoked without any user initiated action.
  • Same flow cannot be opened in multiple windows because session scoped variables are used to pass information between pages. CDI defines @ConversationScoped but that is only part of the solution.
  • There is no scope defined that can span multiple pages but less than a session.
Faces Flow provide a solution to the issues mentioned above.

What's new in JSF 2.2 for flows ?

The flow of application is no longer restricted to flow between pages but instead defined as flow between "nodes". There are five different types of nodes:
  • View: Any JSF page in the application
  • Method Call: Invoke application logic from flow graph via an EL
  • Switch: Navigation decisions in the flow graph based on boolean EL
  • Flow Call: Call another flow with parameters and receive return values
  • Flow Return: Return to the calling flow
The nodes define the entry and exit points of a flow.

Two new annotations are introduced:
  • @FlowScoped is a CDI scope that defines the scope of bean in the specified flow. This enables automatic activation/passivation of the bean when the scope is entered/exited.
  • @FlowDefinition is a class level annotation that allows the flow definition to be defined using the fluent FlowBuilder API.
A new EL object, #{flowScope}, for flow local storage is also introduced. This maps to facesContext.getApplication().getFlowHandler().getCurrentFlowScope().

How are flows packaged ?

Flows can be packaged in JAR files or in directories.

JAR packaging requires flows to be explicitly declared in META-INF/faces-config.xml in the JAR file. Flow nodes are packaged in META-INF/flows/<flowname> where <flowname> is a JAR directory entry whose name is identical to that of a flow id in the corresponding faces-config.xml. @FlowScoped and @FlowDefinition beans must be packaged in the JAR file and accompanied by META-INF/beans.xml.

A sample JAR file looks like:

META-INF/faces-config.xml
META-INF/flows/flow1/entry.xhtml
META-INF/flows/flow1/next.xhtml
META-INF/flows/flow1/end.xhtml
META-INF/flows/flow2/start.xhtml
META-INF/flows/flow2/next.xhtml
META-INF/flows/flow2/end.xhtml
META-INF/beans.xml
org/glassfish/sample/MyFlow1Bean.class
org/glassfish/sample/MyFlow2Bean.class
org/glassfish/sample/MyFlowDefintion.class
Flows packaged in directories use convention-over-configuration. The conventions are:
  • Every View Declaration Language file in that directory is a view node of that flow.
  • The start node of the flow is the view whose name is the same as the name of the flow.
  • Navigation among any of the views in the directory is considered to be within the flow.
  • Navigation to a view outside of that directory is considered to be an exit of the flow.
  • Optional <flowname>-flow.xml that represents the flow definition. The rules in this file overrides the conventions described above.

A sample directory looks like:

flow1/flow1.xhtml
flow1/flow1a.xhtml
flow1/flow1b.xhtml
flow2/flow2-flow.xml
flow2/flow2.xhtml
flow2/flow2a.xhtml
flow2/flow2b.xhtml
WEB-INF/...
Show me the code!

Lets try a sample now!

The source code for the two samples explained below can be downloaded here. A complete explanation of the sample including the code walk-through is shown in the video:



This will run on GlassFish 4.0 b72. For now, you'll need to replace glassfish/modules/javax.faces.jar with javax.faces-2.2.0-SNAPSHOT.jar and replacing glassfish/modules/javax.el.jar with javax-el-3.0-b03.jar. This JARs will soon be integrated in the GlassFish build. Ah, the joys of bleeding edge development!

Sunday Nov 04, 2012

JMaghreb 2012 Trip Report



JMaghreb is the inaugural Java conference organized by Morocco JUG. It is the biggest Java conference in Maghreb (5 countries in North West Africa).

Oracle was the exclusive platinum sponsor with several others. The registrations had to be closed at 1412 for the free conference and several folks were already on the waiting list. Rabat with 531 registrations and Casablanca with 426 were the top cities. Some statistics ...
  • 850+ attendees over 2 days, 500+ every day
  • 30 sessions were delivered by 18 speakers from 10 different countries
  • 10 sessions in French and 20 in English
    • 6 of the speakers spoke at JavaOne 2012
    • 8 will be at Devoxx
  • Attendees from 5 different countries and 57 cities in Morocco
  • 40.9% qualified them as professional and rest as students
  • Topics ranged from HTML5, Java EE 7, ADF, JavaFX, MySQL, JCP, Vaadin, Android, Community, JCP
  • Java EE 6 hands-on lab was sold out within 7 minutes and JavaFX in 12 minutes
I gave the keynote along with Simon Ritter which was basically a recap of the Strategy and Technical keynotes presented at JavaOne 2012. An informal survey during the keynote showed the following numbers:
  • 25% using NetBeans, 90% on Eclipse, 3 on JDeveloper, 1 on IntelliJ
  • About 10 subscribers to free online Java magazine. This digital magazine is a comprehensive source of information for everything Java - subscribe for free!!
  • About 10-15% using Java SE 7. Download JDK 7 and get started today! Even JDK 8 builds have been available for a while now.
My second talk explained the core concepts of WebSocket and how JSR 356 is providing a standard API to build WebSocket-driven applications in Java EE 7. TOTD #183 explains how you can easily get started with WebSocket in GlassFish 4. The complete slide deck is available:


Next day started with a community keynote by Sonya Barry. Some of us live the life of JCP, JSR, EG, EC, RI, etc every day, but not every body is. To address that, Sonya prepared an excellent introductory presentation providing an explanation of these terms and how java.net infrastructure supports Java development.

The registration for the lab showed there is a definite demand for these technologies in this part of the world. I delivered the Java EE 6 hands-on lab to a packed room of about 120 attendees. Most of the attendees were able to progress and follow the lab instructions. Some of the attendees did not have a laptop but were taking extensive notes on paper notepads. Several attendees were already using Java EE 6 in their projects and typically they are the ones asking deep dive questions. Also gave out three copies of my recently released Java EE 6 Pocket Guide and new GlassFish t-shirts. Definitely feels happy to coach ~120 more Java developers learn standards-based enterprise Java programming.

I also participated in a JCP BoF along with Werner, Sonya, and Badr. Adotp-a-JSR, java.net infrastructure, how to file a JSR, what is an RI, and other similar topics were discussed in a candid manner.

You can follow @JMaghrebConf or check out their facebook page. java.net published a timely conversation with Badr El Houari - the fearless leader of the Morocco JUG team. Did you know that Morocco JUG stood for JCP EC elections (ADD LINK) ? Even though they did not get elected but did fairly well.

Now some sample tweets from #JMaghreb ...

#JMaghreb is over. Impressive for a first edition! Thanks @badrelhouari and all the @MoroccoJUG team !
Since you @speakjava : System.out.println("Thank you so much dear Tech Evangelist ! The JavaFX was pretty amazing !!! "); #JMaghreb
@YounesVendetta @arungupta @JMaghrebConf Right ! hope he will be back to morocco again and again .. :)
@Alji_ @arungupta @JMaghrebConf That dude is a genius ;) Put it on your wall :p
@arungupta rocking Java EE 6 at @JMaghrebConf #Java #JavaEE #JMaghreb http://t.co/isl0Iq5p
@sonyabarry you are an awesome speaker ;-)
#JMaghreb rich more than 550 attendees in day one. Expecting more tomorrow!
ongratulations @badrelhouari the organisation was great! The talks were pretty interesting, and the turnout was surprising at #JMaghreb!
#JMaghreb is truly awesome... The speakers are unbelievable !
#JavaFX... Just amazing #JMaghreb
Charmed by the talk about #javaFX ( nodes architecture, MVC, Lazy loading, binding... ) gotta start using it intead of SWT. #JMaghreb
JavaFX is killing JFreeChart. It supports Charts a lot of kind of them ... #JMaghreb
The british man is back #JMaghreb I do like him!!
#JMaghreb @arungupta rocking @JMaghrebConf. pic.twitter.com/CNohA3PE
@arungupta Great talk about the future of Java EE (JEE 7 & JEE 8) Thank you. #JMaghreb
JEE7 more mooore power , leeess less code !! #JMaghreb
They are simplifying the existing API for Java Message Service 2.0 #JMaghreb good to know , the more the code is simplified the better !
The Glassdoor guy #arungupta is doing it RIGHT ! #JMaghreb
Great presentation of The Future of the Java Platform: Java EE 7, Java SE 8 & Beyond #jMaghreb
@arungupta is a great Guy apparently #JMaghreb

On a personal front, the hotel (Soiftel Jardin des Roses) was pretty nice and the location was perfect. There was a 1.8 mile loop dirt trail right next to it so I managed to squeeze some runs before my upcoming marathon. Also enjoyed some great Moroccan cuisine - Couscous, Tajine, mint tea, and moroccan salad. Visit to Kasbah of the Udayas, Hassan II (one of the tallest mosque in the world), and eating in a restaurant in a kasbah are some of the exciting local experiences.

Now some pictures from the event (and around the city) ...







And the complete album:



Many thanks to Badr, Faisal, and rest of the team for organizing a great conference. They are already thinking about how to improve the content, logisitics, and flow for the next year. I'm certainly looking forward to JMaghreb 2.0 :-)

Thursday Jul 05, 2012

Jersey 2 in GlassFish 4 - First Java EE 7 Implementation Now Integrated (TOTD #182)


The JAX-RS 2.0 specification released their Early Draft 3 recently. One of my earlier blogs explained as the features were first introduced in the very first draft of the JAX-RS 2.0 specification. Last week was another milestone when the first Java EE 7 specification implementation was added to GlassFish 4 builds.

Jakub blogged about Jersey 2 integration in GlassFish 4 builds. Most of the basic functionality is working but EJB, CDI, and Validation are still a TBD. Here is a simple Tip Of The Day (TOTD) sample to get you started with using that functionality.
  1. Create a Java EE 6-style Maven project

    mvn archetype:generate
    -DarchetypeGroupId=org.codehaus.mojo.archetypes
    -DarchetypeArtifactId=webapp-javaee6 -DgroupId=example
    -DartifactId=jersey2-helloworld -DarchetypeVersion=1.5
    -DinteractiveMode=false

    Note, this is still a Java EE 6 archetype, at least for now.
  2. Open the project in NetBeans IDE as it makes it much easier to edit/add the files. Add the following <repositories>

    <repositories>
    <repository>
    <id>snapshot-repository.java.net</id>
    <name>Java.net Snapshot Repository for Maven</name>
    <url>https://maven.java.net/content/repositories/snapshots/</url>
    <layout>default</layout>
    </repository>
    </repositories>

  3. Add the following <dependency>s

    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0-m09</version>
    <scope>test</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.0-m05</version>
    <scope>test</scope>
    </dependency>
    The complete list of Maven coordinates for Jersey2 are available here. An up-to-date status of Jersey 2 can always be obtained from here.
  4. Here is a simple resource class:

    @Path("movies")
    public class MoviesResource {

    @GET
    @Path("list")
    public List<Movie> getMovies() {
    List<Movie> movies = new ArrayList<Movie>();

    movies.add(new Movie("Million Dollar Baby", "Hillary Swank"));
    movies.add(new Movie("Toy Story", "Buzz Light Year"));
    movies.add(new Movie("Hunger Games", "Jennifer Lawrence"));

    return movies;
    }
    }
    This resource publishes a list of movies and is accessible at "movies/list" path with HTTP GET. The project is using the standard JAX-RS APIs.

    Of course, you need the trivial "Movie" and the "Application" class as well. They are available in the downloadable project anyway.
  5. Build the project

    mvn package

    And deploy to GlassFish 4.0 promoted build 43 (download, unzip, and start as "bin/asadmin start-domain") as

    asadmin deploy --force=true target/jersey2-helloworld.war

  6. Add a simple test case by right-clicking on the MoviesResource class, select "Tools", "Create Tests", and take defaults. Replace the function "testGetMovies" to
    @Test
    public void testGetMovies() {
    System.out.println("getMovies");
    Client client = ClientFactory.newClient();
    List<Movie> movieList = client.target("http://localhost:8080/jersey2-helloworld/webresources/movies/list")
    .request()
    .get(new GenericType<List<Movie>>() {});
    assertEquals(3, movieList.size());
    }

    This test uses the newly defined JAX-RS 2 client APIs to access the RESTful resource.
  7. Run the test by giving the command "mvn test" and see the output as

    -------------------------------------------------------
    T E S T S
    -------------------------------------------------------
    Running example.MoviesResourceTest
    getMovies
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.561 sec

    Results :

    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

GlassFish 4 contains Jersey 2 as the JAX-RS implementation. If you want to use Jersey 1.1 functionality, then Martin's blog provide more details on that. All JAX-RS 1.x functionality will be supported using standard APIs anyway. This workaround is only required if Jersey 1.x functionality needs to be accessed.

The complete source code explained in this project can be downloaded from here.

Here are some pointers to follow

Provide feedback on Jersey 2 to users@jersey.java.net and JAX-RS specification to users@jax-rs-spec.java.net.

Monday May 14, 2012

Java Day, Istanbul, May 2012 Trip Report




About 120+ 150 attendees at Java Day, Istanbul learned about Java EE 6/7 earlier today. The Java track had about 100 110 attendees during most of the day. I gave 4 sessions:
  • Developing Modern and Lightweight Java EE 6 Applications using WebLogic 12c (keynote to all the attendees)
  • What's coming in Java EE 7
  • Java EE 6 Hands-on Lab using NetBeans/WebLogic
  • RESTful Web services using JAX-RS

The attendees were generally quiet but the hands-on session had some interesting conversations around Java EE 6 usage. TOTD #177 showcase the WebLogic Maven plugin usage TOTD #176 shows how to run Conference Planner application on WebLogic 12c. I also had the opportunity to meet the Istanbul JUG leader and local GTUG leader. Show your passion about Java by participating at the local JUG, all the more better to volunteer as a speaker :-)

The slides presented are available below.






The self-paced instructions for Java EE 6 hands-on lab using NetBeans and WebLogic is available here.

Some pictures from the event and around the city ...














Here are a couple of more pictures from the local events team:





And the complete album:


Next stop Geecon, Poland ...

Wednesday May 09, 2012

OTN Developer Days in Turkey and Johannesburg, Geecon in Poland, JEEConf in Ukraine


Several Java EE sessions around the world over next few days ...


Where: Ceylan Intercontinental Istanbul, Turkey
When: May 14, 9am
Sessions: Several Java EE 6/7 sessions
Agenda, Register



Where: Poznan, Poland
When: May 16-18
Sessions:
    Java EE 6 = Less Code + More Power (May 16, 9am)
    Java EE 7: Developing for the Cloud (May 16, 11:10am)
    JAX-RS 2.0: RESTful Java on Steroids (May 18, 11:20am)
    PaaSing a Java EE 6 Application (May 18, 2:30pm)



Where: International Exhibition Center, Kiev, Ukraine
When: May 19, 10am
Session: Java EE 7: Developing for the Cloud
Register



When: May 21
Where: The Forum, Johannesburg, South Africa
Session: Several
Agenda, Register


Where will I see or run with you ?

Wednesday May 02, 2012

Java EE 6 Sample Application on WebLogic 12c: Conference Planner (TOTD #176)


Oracle WebLogic 12c provide a Java EE 6 Full Platform compliant application server. During the launch event last year, a Java EE 6 application was shown that demonstrated all the features of Java EE 6. This application allows conference organizers to publish details about their conference such as tracks, sessions, and speakers. It also allows attendees to register for the conference and prepare their schedule. The application is built as a typical 3-tier Java EE 6 application using JavaServer Faces (with PrimeFaces widgets) for the front-end, Enterprise JavaBeans for the middle tier business logic, and Java Persistence API for connectivity with the database.

This Tip Of The Day (TOTD) shows how to deploy the application on WebLogic 12c.
  1. Check out the application from svn.java.net/svn/glassfish~svn/branches/arun/ConferencePlanner/trunk/ or download the source bundle.
  2. Download and install Apache Derby. If you are using JDK7 then it comes bundled with Derby and installed in directory (/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/db). Any other database can be used as well but the instructions will differ accordingly.
    1. Create "derby.properties" file in the main directory of and specify the following content:

      #
      derby.user.sa=sa

      This creates a user "sa" with the password "sa".
    2. Start the database by invoking the "bin/startNetworkServer" script.
    3. Copy "derbyclient.jar" to "mydomain/lib" directory and restart the server by using "mydomain/startWeblogic.sh" script.
    4. Create and populate the database by invoking the interactive SQL scripting tool "bin/ij". Specify the location of the SQL from the application as shown.
      ./ij
      ij version 10.8
      ij> driver 'org.apache.derby.jdbc.ClientDriver';
      ij> connect 'jdbc:derby://localhost:1527/cp;ServerName=localhost;databaseName=cp;user=sa;password=sa;create=true';
      ij> run '/Users/arungup/code/workspaces/arun/ConferencePlanner/trunk/src/main/sql/javaone-sf-2011.sql';
      ij> . . .
      1 row inserted/updated/deleted
      ij> exit;
  3. Download, unzip, and configure WebLogic 12c as described in TOTD #174. Here is my simple script that performs all the steps required:
    mkdir 12c
    cd 12c
    export CLASSPATH=/Users/arungup/tools/db-derby-10.8.2.2-bin/lib/derbyclient.jar
    unzip ~/Downloads/wls1211_dev.zip export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home ./configure.sh . $MW_HOME/wlserver/server/bin/setWLSEnv.sh cd .. mkdir mydomain cd mydomain $JAVA_HOME/bin/java $JAVA_OPTIONS -Xmx1024m -XX:MaxPermSize=256m weblogic.Server

    Notice, here we are explicitly including "derbyclient.jar" in the  CLASSPATH. This will ensure that Derby database's JDBC driver is available to WebLogic Administration Console which was not able to pick up JAR files from "mydomain/lib" directory otherwise.
  4. Access WebLogic Admin Console at localhost:7001/console, the login/password used in TOTD #174 is admin/admin007.
  5. Create a JDBC data source
    1. Click on "Data Sources" as shown.


    2. Click on "New" and select "Generic Data Source" as shown.

    3. Specify the values as shown.



      The JDBC resource name is "jdbc/cp" and the database is "Derby".
    4. Change the "Database Driver" to "Derby's Driver (Type 4) Versions: Any" and click on "Next". Make sure to not choose Type 4 XA driver which is the default.
    5. Take the defaults and select "Next".
    6. Specify the connection properties as shown.



      And click on "Next".
    7. Click on "Test Configuration" to make sure that every thing is configured correctly. Make sure to see the message "Connection test succeeded.". Verify the defaults and click on "Next".
    8. Select the target "myserver" as shown



      and click on "Finish".
  6. Deploy the application
    1. In the localhost:7001/console, click on "Home" (at the top center) and then "Deployments".


    2. Click on "Install".
    3. Specify the location of the WAR file as shown



      Make sure to pick the WAR file by selecting the radio button and click on "Next".
    4. Take the defaults and click on "Next".
    5. Take the defaults again and click on "Next". Notice that "myserver" is chosen as the target of deployment.
    6. Click on "Finish". After the application is deployed the console shows the following snapshot:


  7. Access the application at localhost:7001/ConferencePlanner to see the output as:



Feel free to browse through the source code!

Download WebLogic and play with it! Screencast #39 explains how to build a more comprehensive Java EE 6 application using NetBeans and WebLogic.

Sunday Apr 22, 2012

Great Indian Developer Summit 2012 Trip Report


I attended the fifth, and my first, Great Indian Developer Summit in the Silicon Valley of India, Bangalore. The conference is spread over 4 days with each day covering .NET, Web, Java, and Workshops respectively. The Java track had 800+ attendees (roughly based on a cursory headcount for the opening keynote) and the hall was packed. The theater style seating allowed the attendees to enjoy the wide screen presentations.

Another unique and cool thing about the conference is that they create life size posters of all the speakers and display them outside the speakers' room. This not only help you identify your room easily but also makes you feel like a celebrity ;-) Here are some pictures of the posters:






Venkat's opening keynote is always fun. He talked about "Refactor your Language Knowledge Portfolio: We're What We Can Code In". His entertaining presentation style keeps the audience engaged and laughing. His Essence vs Ceremony analogy was particularly impressive and I recommend reading that blog.

I gave three presentations and a hands-on workshop and the slides are now available.


This presentation gave an overview of JMS 2.0 and the new features coming there. This presentation had 200+ attendees and 50% of the audience were existing users of JMS. There was a lot interactivity during/after the session. Do you know JMS 2.0 Early Draft is already available ?

The primary goal of this specification is to provide a simplified API and clarify the ambiguities discovered over the past few years. Check out this blog for a quick comparison between the existing and the simplified API. If you have any feature request then its highly recommended to file a JIRA issue at jms-spec.java.net.



This presentation gave an overview of JAX-RS 2.0. Do you know that Early Draft 2 is already available ? Check out this blog for a brief overview of the new features coming in JAX-RS 2.0. You can find the latest updates at jax-rs-spec.java.net and also follow @gf_jersey.



This presentation explained the key concepts of how GlassFish PaaS-enable your Java EE application. The talk also showed how a Java EE application can be deployed where all he services required by the application are dynamically provisioned. A working version of the application, along with instructions, are available at glassfish.org/javaone2011. A video of the application in action is shown below:



The video also shows how the cluster dynamically adjusts to meet the elasticity constraints pre-defined for the application.

The Java EE 6 hands-on lab had about 20 attendees. The self-pace instructions can be downloaded here. I was pretty amazed by the level of interaction. There was one particular guy who who came from the PHP land, was taking notes on a paper notebook, and was asking the most intelligent questions. There were other experienced J2EE/Java EE users who also enjoyed the simplicity introduced in the platform.

And somehow for the past few days the question of Java EE 6 over Spring has come up during each such engagement. My views are clearly expressed at Why Java EE 6 is better than Spring. And do read the interesting discussion in the comments, all the way to the end.

The conference was well organized with a personal introduction of each speaker. The rooms were well marked and the projectors worked very well. The conference crew was very helpful and prompt in reminding about the time remaining. However a 45 minute session is a few minutes too short and so had to tweak my existing slide deck to meet the time requirements.

Multiple conflicting talks were arranged such as Mike's Java EE 7 and mine JMS 2.0, Venkat's "Java 8: A Sneak Peak" and Simon's "Java SE 8 & Beyond". This feedback was conveyed to the organizers. Hopefully they'll be able to do a better job of this next time around.

On a personal side, I enjoyed a team dinner at BBQ Nation and is definitely worth visiting once at least. And could also manage to enjoy a lunch at MTR with Vivek. The ITC Windsor is a nice hotel with a decent fitness center and a great restaurant. The breakfast buffet had a great variety and very scrumptious.

Here are some pictures captured from the event:










And now the complete album:


The Java EE 7 platform will be much more mature by this time next year and who knows I might even submit a Java EE 7 hands-on lab!

Thank you Salt March Media for putting up a great show and providing me an opportunity to present. Looking forward to my participation again next year!

Sunday Mar 11, 2012

Java EE 6/7 at 33rd Degree (Krakow) and Codemotion (Rome and Madrid)


The conference circuit for March takes Java EE 6/7 to Krakow, Rome, and Madrid ...


What ? Java EE 6 hands-on workshop (Mar 20, 9-12:30pm), The Java EE 7 Platform (Mar 21, 11:30am)
Date ? Saturday, Mar 20 and Sunday Mar 21, 2012
Where ? Best Western Premium Krakow
Register ? Here (sold out already)
Prep work: Download and Install NetBeans 7.1 or later ("All" version) from netbeans.org, JDK 6 or 7 latest update from oracle.com/javase.




What ? JAX-RS 2.0: RESTful Java on Steroids
Date ? Mar 23, 2012
Time ? 9:50am
Where ? Engineering Department of Roma
Register ? codemotion.it
Website: codemotion.it
Twitter: @CodemotionRoma





What ? The Java EE 7 Platform, Developing for the Cloud (10:30 - 11:15am) , JAX-RS 2:0: RESTful Java on Steroids (4-4:45pm)
Date ? Mar 24, 2012
Time ? All Day
Where ? School of Computer Science, Polytechnic University of Madrid
Register ? codemotion.es
Website: codemotion.es
Twitter: @Codemotion_es


Where will I meet or run with you ? :)

Wednesday Feb 29, 2012

GlassFish 3.1.2 is released!


GlassFish 3.1.2 is here and download it now!

This is the latest and the greatest release for GlassFish 3.x. The three main themes of this release are:
  • Higher Quality: 500+ bug fixes improving the overall quality of 3.1.x and still maintaining backwards compatibility. Several community-filed bugs are fixed in this release.
    • Updated components (see below) alone provide 300+ bug fixes
  • New Features
    • Administration Console Improvements
      • Better startup time and option to load in background after server startup
      • Feature parity with asadmin CLI
      • Enabling and disabling secure administration
      • Viewing and monitoring app-scoped resources
      • Setup SSH and Node installation
      • Configure JMS clusters
      • Consolidation of monitoring data in a single tab
      • Administering Loadbalancer plug-in configurations (only in Oracle GlassFish Server)
    • Improved clustering
      • New DCOM Support for Windows (as an alternative to SSH for remote management of GlassFish instances)
      • Non-Multicast clustering
      • mod_proxy_ajp support
    • Improved EclipseLink integration with EclipseLink MOXy support and TopLink Grid support (Coherence as 2nd level data cache and only in Oracle GlassFish Server)
    • WebSocket (RFC 6455) Support
    • Transaction recovery using database (in addition to the existing file system support)
    • Improved Security (secure admin requires password, Oracle GlassFish Server secure by default with new password required be set during installation or on first use), and SSL Encrypted traffic between the Domain Administration Server and remote instances
    • NetBeans 7.1.1 ships with GlassFish Server 3.1.2 (more samples in NetBeans Update Center)
  • Updated Platforms & Components (in addition to existing platforms, complete supported matrix here)
    • Supporting Mac OSX 10.7.1 and Ubuntu 11.0.4 as developer platform
    • JDKs
      • JRockit 28.2.2
      • JDK 7 U3 and JDK 6 U31
      • IBM/AIX JDK 6
    • Browsers: Chrome 15.x, Firefox 9+, Safari 5.x, IE 7.x+
    • Updated component bundles: JSF/Mojarra 2.1.6, Grizzly 1.9.46, Metro 2.2, Jersey 1.11, Shoal, EclipseLink 2.3.2, OpenMQ 4.5.2, OSGi Core 4.3.0, Update Center, Hibernate Validator, JavaDB 10.8.1.2, Weld 1.1.4

Check out this video by GlassFish 3.1.2 engineering manager providing highlights of the release:

Here are some other pointers for you to get started:

Tuesday Feb 21, 2012

Java EE 6 workshop delivered at UmeƄ JUG


What's common between Austin (Texas), Reykjavik (Iceland), Stockholm (Sweden), and Umeå (Sweden) ?
  • They all had a Java EE 6 workshop in the past 2.5 weeks
  • All of them had fairly higher attendance than normal/expected
  • Every where the attendees stayed much longer than originally planned
  • The simplicity and power of awesome threesome of Java EE 6, NetBeans, and GlassFish was very well appreciated by the attendees

The recently concluded workshop at Umeå JUG proved yet again how Java EE 6 can easily attract audience. And now that WebLogic and GlassFish are Java EE 6 compatible, there is a wide variety of containers available to deploy your applications.

This JUG, part of Javaforum Sweden, is the second most northern JUG (Reykjavik is the northern most by about 150 km) in a small university town of about 115,000. The constant sub-zero temperature and tons of snow during my stay made the cross-country an interesting first time experience. Running outside in the cold was harder than I originally thought as the cheeks were getting cold and making it difficult to talk. Thank you Jonas for teaching me the basic skills and sharing your spiked running shoes. Quite an enjoyable experience over all!

The interactive attendees learned all about:

  • Improvements in Java Persistence API 2
  • "web.xml"-free and annotation-driven Servlets
  • Simplified packaging of EJBs in a WAR file, no-interface and single file definition of EJB
  • Session preservation across redeploys
  • Facelets (XHTML/CSS) as templating language for JavaServer Faes to achieve true MVC
  • Integration of Bean Validation with JPA and JSF
  • Typesafe dependency injection and Producer/Observer of events using CDI
  • RESTful resources using JAX-RS

The hands-on lab document is available here and the complete application here.

Here is a picture with Jonas and Mattias - the JUG leaders. Their mission is to learn and spread knowledge about Java in Umeå by bringing in speakers from all around the world. A local tech publication (InfoTech Umeå) also talked about the workshop. Here is a picture from the article:


Jonas, Arun,
Mattias at Umeå JUG
(Image Credits: InfoTech Umeå)

And some more pictures from the visit ...





The complete photo album is available at (pictures are from trip to JUGICE and Jfokus)  ...



Next stop 33rd Degree and Codemotion ...
About

profile image
Arun Gupta is a technology enthusiast, a passionate runner, author, and a community guy who works for Oracle Corp.


Java EE 7 Samples

Stay Connected

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today