Tuesday Jul 14, 2015

Java EE 7 Maintenance Release

The Java EE 7 Platform Specification (JSR 342) Maintenance Release has been approved and is now available for download on the JCP site.

This Maintenance Release is clarifying some parts of the specification itself; none of the proposed changes is impacting the Java EE 7 Reference Implementation or the TCK. You can browse those changss here.

Monday Jul 13, 2015

Java EE 7 in Production at safsms.com

One of the most important things to do at this stage of the life-cycle of Java EE is highlight successful adoption stories at a regular cadence. We have been doing just that for a long time through our adoption stories blog, this humble blog as well as JavaOne. In the past few months celebrated Java EE advocate and Java Champion Adam Bien has been really helping out in this regard as well through his popular blog. One of the interesting adoption cases Adam highlighted is production Java EE 7 usage at safsms.com.

SAFSMS stands for SAF School Management Software. It comes out of Nigeria's vibrant startup ecosystem and is a web-based application for managing school processes and student records. Currently over 200 schools are using SAFSMS. It is completely based on Java EE on the server side. SAFSMS is soon going to be offered as Software as a Service (SaaS) likely via Amazon EC2. Faiz Bashir, the key engineer behind SAFSMS, noted the simplicity, ease-of-use and productivity offered by Java EE 7 that makes it well suited to ambitious startups like his. SAFSMS utilizes GlassFish 4.x, Git, NetBeans, Arquillian and Docker. They are also considering adopting Java SE 8 and Jenkins. Faiz confidently remarked "I will choose Java EE always without any hesitation". You can read the full details of the adoption story on Adam's blog.

JavaOne 2015 was particularly good in terms of compelling Java EE adoption story session proposals that we could accept. You should start seeing those sessions show up in the live content catalog. We will of course share those stories here if you cannot come to JavaOne.

If you have a similarly great Java EE adoption story to share with the community (particularly migration stories from other technologies), please do feel encouraged to reach out. In the spirit of Java EE centric vendor neutrality, what Java EE implementation or tool set you choose does not matter at all and neither does which part of the globe you are in.

Friday Jul 10, 2015

MyEclipse and Java EE 7

Java EE has long enjoyed strong support from all of the major Java IDEs today - Java EE 7 is no exception. I am likely biased but I think NetBeans is the strongest in it's support for modern Java EE. IntelliJ is also popular amongst many Java EE developers. The weakest in terms of Java EE support is Eclipse, providing very basic Java EE 7 support.

So if you are a Java EE developer and a fan of Eclipse, do you have options? Fortunately the answer is a resounding yes. One of the strong choices for you is MyEclipse from Genuitec. MyEclipse adds enhanced support for Java EE 7 APIs like Servlet 3.1, JSF 2.2, EL 3, EJB 3.2, JPA 2.1 and JAX-RS 2. To highlight their support for Java EE 7 the MyEclipse team put together a pretty slick one minute video promoting the updated features in the platform. It's very visual, well worth the minute and a great elevator pitch for Java EE 7 (click here if you can't see the embedded video):

You can find the details for Genuitec's Java EE 7 support on the MyEclipse site. Another good option for Java EE developers on Eclipse is JBoss Tools - it is particularly strong in terms of support for CDI (but I think NetBeans is on par in this regard too - but again I am probably biased :-)).

Thursday Jul 09, 2015

The next VTS round is fast approaching!

Virtual Technology Summit is a set of free online events covering a wide variety of technical topics (Database, Java, Middleware, etc.).  And there is something for everyone (see full agenda). In the upcoming edition, the following sessions should be particularly interesting for Server-Side Java developers:

  • Docker for Java Developers
  • Debugging Weblogic Authentication
  • New APIs and Tools for Application Development in WebLogic 12c
During the event, participants have the ability to interact and ask questions to the presenters. VTS are free to attend and are scheduled 3 times to make sure anyone around the globe can easily join. In short, VTS is a great learning opportunity! Just check the links below to register.

Wednesday Jul 08, 2015

Java EE @ Java Day Tokyo 2015

Java Day Tokyo 2015 was held on April 8th. Organized by Oracle Japan, it is the largest Java developer event in the country. This was another highly successful year for the event with a fully sold out venue packed with youthful, energetic developers. Speakers included Steve Chin, Simon Ritter, Cameron Purdy and Linda DeMichiel. Topics included Java SE, Java EE, IoT and cloud. Java EE always has a strong showing at the event and this year was no exception.

I delivered talks on Domain Driven Design with Java EE using Cargo Tracker and Reactive Java EE in addition to a Java EE 7 workshop. Other Java EE sessions were on Java EE 8, CDI/EJB alignment, Java EE 7, JPA, JSF and real world Java EE adoption in addition to the official Java EE 7 Hands-on-Lab. More details on the sessions and Java Day Tokyo 2015, including slide decks and code, posted on my personal blog.

Tuesday Jul 07, 2015

JPA and Java SE 8 Streams

Retrieving a large, i.e. a very large, dataset using JPA might be tricky as the whole result set has to fit within a java.util.List instance. So a very large data set might potentially hit the memory limits of the sever the application is running on.

For those scenarios with (very) large result set, pagination can be used to work-around that limitation.  See for example this "How To Stream/Serialize JPA Result As JAX-RS Response For Large Data" article.  But for those scenarios, the Java 8 Streams API would also be a good fit! Unfortunately, Streams are not supported in the current release of JPA (JPA 2.1 - JSR 338) as it predates Java SE 8. But this is clearly a potential RFE for the next update of JPA (see this specification RFE here). In addition, some of the JPA implementations have already started to add support for Java 8 Streams (e.g. Hibernate and EclipseLink).

We will have to wait a bit more to see what the scope of 'JPA.next' will be. What do you think? Would you like to see Java SE 8 Streams supported in 'JPA.Next'?

Monday Jul 06, 2015

JavaOne 2015 Java EE Track Committee: Ryan Cuprak

This is the fourth and last in a series of interviews for you to meet some of the committee members for the JavaOne 2015 Java EE track. We will next move on to interviewing some of the key accepted speakers in the track this year.

The committee plays the most important part in determining the content for JavaOne. These good folks really deserve recognition as most of them devote many hours of their time helping move JavaOne forward, often as volunteers. If JavaOne matters to you, these are folks you should know about.

This last interview is with my good friend Ryan Cuprak. If you are having trouble seeing the embedded video below it is available here.

Ryan is the founder of the Connecticut JUG, author, blogger, speaker, JavaOne Rock Star and Java EE advocate. He is a senior manager at Dassault Systemes. Ryan is a brand new and welcome addition to the committee. In the interview he shares his experience and expectations for the Java EE track this year.

He also wrote up an excellent blog entry on his experience as a new committee member. He had some pretty good insights and very kind things to say about the process, JavaOne and Java EE that's worth a read.

On this note, I would like to make sure you know that the JavaOne content catalog is now already live with a few preliminary fairly obvious selections we were able to make. None of the sessions accepted at this stage are from Oracle speakers on our track. The folks that we selected early for acceptance include David Blevins, Jonathan Gallimore, Mohammed Taman, Rafael Benevides and Antoine Sabot-Durand. They will be talking about Java EE Connectors (JCA), Java EE 7 real world adoption, CDI and DeltaSpike. I would encourage you to check out all the early selections in the catalog. We are working to finalize the full catalog shortly.

I hope to see you at JavaOne. Do stay tuned for more interviews with some key speakers on our track.

Friday Jul 03, 2015

CDI 2.0 Early Draft Released!

CDI has become one of the key APIs in Java EE since it was first included in Java EE 6. Since then we have seen two minor releases of CDI - CDI 1.1 and CDI 1.2. CDI 2 by comparison promises a significantly larger set of changes and is an opportunity to really push the boundaries for standard dependency injection for Java. To that end the CDI 2 specification has now released an early draft for you to review. An early reference implementation build is also coming soon for you to try out. For now, you should take some time to read through the draft and provide your feedback. CDI 2 specification lead Antoine Sabot-Durand summarized the content of the early draft and outlined the ways you can provide feedback in a well-written blog post. Some of the changes mentioned includes Java SE support, event observer ordering as well as asynchronous events.

Keep in mind this is just the beginning in terms of what the plans for CDI 2 are - there are far more changes on the way. This is your opportunity to chime in and make sure CDI is the high quality standard we all want it to be. You can even choose to do so as a JUG through the Adopt-a-JSR program.

Wednesday Jul 01, 2015

Chicago JUG Adopt-a-JSR/Java EE 8 Session Video

The Chicago JUG has been doing a great job engaging with Adopt-a-JSR and Java EE 8. As part of that effort the JUG hosted a virtual meeting on Google Hangout on May 26. Some of the things that the meeting covered includes:

  • Introduction to the JCP/JSR process
  • Adopt-a-JSR
  • Detailed overview and current status of the different Java EE 8 JSRs
  • The different ways in which JUG members can contribute
  • Live example (picking a few JIRAs and discussing them)

The meeting was led by key Chicago based Java EE author and community advocate Josh Juneau as well as Chicago JUG leader Bob Paulin. The excellent session was recorded and well worth taking a look at (click here if you are having trouble seeing the embedded video below).

If you haven't looked at adopting Java EE 8 JSRs yet, I hope the video helps motivate. The Adopt-a-JSR program is one the key things we are trying hard to do differently for Java EE 8 with the goal making this version of the platform one of the most community driven technologies ever developed. Here are just some of the things you could help do right now:

The full details for Adopt-a-JSR/Java EE 8 is always available here. Remember that if you have any questions on any of this, you are always welcome to drop me a note.

Tuesday Jun 30, 2015

Java 8 Free Online Course: Lambdas and Streams

It is probably fair to say that Java SE 8 is the most important Java release in the last decade… if not more! With the introduction of Lambda expression, Java SE 8 introduced a fundamentally new way of programming. The new Streams API lets process data in a declarative way while leveraging the underlying in more efficient way, etc.

During this summer, Oracle is conducting a Massive Open Online Course (MOOC) on Java 8 Lambdas and Stream. This free online course will start soon (July 14th). During this course, you will have a chance to learn how to :
  • Apply Lambdas to everyday problems
  • Convert anonymous classes to Lambda expressions
  • Apply the Streams API to solve problems of sorting, identifying the most and least, and reducing duplicates
  • Determine when to apply Lambdas (and when not to!)
  • Use Collectors
  • Improve performance with parallel streams
  • Debug Lambda expressions
Even though this is a 'core' Java SE course, it is also very relevant to Java EE developers as more and more Java EE 7 Application Server have been certified to run on top of Java SE 8. In addition, Java EE 8 will mandate Java SE 8 at minimum. So sooner or later... and rather sooner than later, you will use Java SE 8. Given that and if you haven't started yet to look closely at Java SE 8, this free MOOC is really an opportunity you can’t afford to miss. To enrol, just check this page.

Monday Jun 29, 2015

JavaOne 2015 Java EE Track Committee: Johan Vos

This is the third in a series of interviews for you to meet some of the committee members for the JavaOne 2015 Java EE track. The committee plays the most important part in determining the content for JavaOne. These good folks really deserve recognition as most of them devote many hours of their time helping move JavaOne forward, often as volunteers. If JavaOne matters to you, these are folks you should know about.

This interview is with Johan Vos. If you are having trouble seeing the embedded video below it is available here.

Johan is a Java Champion, author, speaker, blogger, member of the BeJUG steering group, member of the Devoxx steering group and a JCP member. He is a fan of Java EE, GlassFish and JavaFX. He founded LodgON, a company offering Java based solutions for social networking software. In the interview he shares his experience and expectations for the Java EE track this year.

On this note, I would like to make sure you know that the JavaOne content catalog is now already live with a few preliminary fairly obvious selections we were able to make. None of the sessions accepted at this stage are from Oracle speakers on our track. The folks that we selected early for acceptance include David Blevins, Jonathan Gallimore, Mohammed Taman, Rafael Benevides and Antoine Sabot-Durand. They will be talking about Java EE Connectors (JCA), Java EE 7 real world adoption, CDI and DeltaSpike. I would encourage you to check out all the early selections in the catalog. We are working to finalize the full catalog shortly.

I hope to see you at JavaOne. Do stay tuned for more interviews with committee members and some key speakers on our track.

Thursday Jun 25, 2015

HTTP/2 and Server Push

HTTP/2, which has been finalized a few weeks ago, is composed of 2 related specifications: RFC 7540 and RFC 7541 (see below). With HTTP/2, the existing HTTP 1.1 semantics are fully preserved as this new version of HTTP aims to be as compatible as possible with current uses of HTTP. The main goal of HTTP/2 is to provide a more efficient use of the network resources and, at the same time, to reduce the overall latency. So the fundamental difference between HTTP/2 and HTTP/1.1 is really at the transport level, i.e. how the bits are exchanged over the network. And that is what HTTP/2's new binary-framed protocol is all about.

HTTP/2 relies on the existing HTTP/1.1 semantics, we keep using the same HTTP verbs (GET, PUT, POST, etc.), the same HTTP status codes and so on. So from a Server-side Java developer perspective nothing should really change. Running an existing application over a HTTP/2 stack should be transparent. We obviously could expect to see improvements at the wire level. That means that most of the HTTP/2 capabilities should not be exposed at the Servlet API level. But there are few exceptions to this rule and Server Push is one the important new HTTP/2 feature that should ideally be made available to the developer.

Server Push is a new HTTP/2 feature that allows a server to proactively 'push' multiple unsolicited resources as a response(s) of a regular client request. And since a server-side application knows what resources are needed to render a particular page, this capability basically let an application to pro-actively push resources needed by a client... before the client even knows that it will need those resources.

The Servlet 4.0 Expert Group now needs to figure out how this Server Push capability should be exposed at the API level. One of the possibilities might be inspired from Greg Wilkins's proposal based on Jetty 9.3's PushBuilder API (see here). Greg is an active Servlet EG member and is the original Jetty developer, he started to develop Jetty 20 years ago using Java 0.9! So happy 20th birthday to Jetty as well!

Useful resources:

Thursday Jun 18, 2015

What's Coming with JSF 2.3?

There seems to be a good deal of excitement in the Java EE community around the new MVC specification. This is certainly great and most understandable. Some (perhaps more established) parts of the Java EE community has in the meanwhile been more quietly contributing to the continuing evolution of JSF 2.3. So what is in JSF 2.3? The real answer is that it depends on what the JSF community needs. There is a small raft of work that's on the table now, but I think the JSF community should be very proactive in helping determining what needs to be done to keep the JSF community strong for years to come.

Just as he did for JSF 2.2, Java EE community advocate Arjan Tijms has started maintaining a regularly updated blog entry listing the things the JSF 2.3 expert group is working on. So far he has detailed CDI injection improvements, the newly added post render view event, improved collections support and a few others. You should definitely check it out as a JSF developer and provide your input. Arjan also has an excellent collection of Java EE 8 blog entries generally on zeef.com.

On a related note, JSF specification lead Ed Burns wrote up a very interesting recent blog entry outlining the continuing momentum behind the strong JSF ecosystem. He highlighted a couple of brand new JSF plugins that we will explore in depth in future entries.

Wednesday Jun 17, 2015

TIBCO EMS 8 Supports JMS 2

Many folks don't realize this but there are actually two general forms of JMS providers - providers close to application server platforms that certify against Java EE overall and standalone JMS providers. There are a number of the former that support JMS 2/Java EE 7 already - OpenMQ (the reference implementation aligned with GlassFish) and HornetQ (part of the JBoss/WildFly ecosystem), the JMS provider included with Hitachi Cosminexus and the JMS provider included with TmaxSoft JEUS. In a few weeks WebSphere MQ, aligned with the WebSphere Liberty Profile is set to join these ranks. WebLogic MQ is not too far behind along with WebLogic 12.2.1 with it's support for JMS 2 and Java EE 7.

One of the latter class of JMS providers that somehow escaped my notice is TIBCO EMS. They announced their JMS 2 compliance with TIBCO EMS 8 some time ago.

In case you are unfamiliar with TIBCO EMS they are actually a very significant player in the messaging ecosystem deployed in some very mission critical environments. FioranoMQ announced their support for JMS 2, but I am unable to really confirm this as they have not run the JMS 2 or Java EE 7 compatibility test via the JCP.

Monday Jun 15, 2015

Your Opinion Needed: Asynchronous Message Listeners (MDB) in JMS 2.1

One of the highest priority items left over from JMS 2/Java EE 7 is revisiting the programming model for declarative message listeners for JMS. MDB has been the only way to do this in Java EE for a long time. MDBs definitely have a few things going for them: their syntax is very simple, they are very type-safe yet they provide quite a bit of power behind the scenes for listening to JMS messages in a very safe, reliable and scalable way.

MDBs do however have a couple of weaknesses. One is that they have a very generic JCA based syntax today that is more verbose than they can be. Creating a more JMS-specific syntax also opens up the possibility of a few usability improvements. The other is that an arbitrary managed bean cannot declaratively consume messages - they must be converted to an MDB via the @MessageDriven annotation. This means that for example a REST or WebSocket endpoint cannot declaratively consume JMS messages. I outlined some of these issues during JMS 2 via this JIRA entry. The JMS 2.1 specification lead Nigel Deakin has recently written up a draft proposal to start tackling some of these possible improvements. The proposal is very detailed and easy to understand for all but the most inexperienced Java EE developers. Nigel is actively looking for your feedback right now. Providing feedback is extremely easy to do and Nigel has done a great job outlining how you can get involved in JMS 2.1.

Nigel has decided to start this work by still focusing on improving MDBs. His plan is to make some early progress and then tackling opening this functionality up to other beans such as CDI. Is this a sound approach or should we be focusing on CDI right now as well? Is simply improving MDB all that is needed? What do you think of the syntax? More recently I've also proposed carrying the new syntax further to create handy abstractions for common message processing patterns. What do you think of this idea? Do you have ideas of your own?

Now is your opportunity to chime in and help design a sound API we can all use. If you are an active JUG member or already part of Adopt-a-JSR you can even participate as a group and provide your input though your JUG.