Each installment of Innovations within reach features new information and discussions on topics related to emerging technologies, from both developer and practitioner standpoints, plus behind-the-scenes looks at leading edge IBM® WebSphere® products.
New features and supported technologies
IBM WebSphere Application Server Community Edition is based on the open source project Apache Geronimo. Apache Geronimo is a modular server framework comprised of a core Java EE runtime and components, as well as several Apache projects that provide Java developers with application development tools in a lightweight deployment. Geronimo has an architectural design based on Inversion of Control, commonly called dependency injection. The Geronimo kernel is purpose-built to manage the dependencies that form a Java EE server deployment. This design makes it feasible for Geronimo developers to integrate tested open source components together to provide services like Java Persistence API (JPA), Enterprise JavaBeans™ (EJB) and Java Message Service (JMS).
The Apache Geronimo 2.0 application server is compatible and certified with the Java EE 5 specification. Geronimo 3.0 is a new release that includes Java EE 6 level services and components, and runs on top of an OSGi framework. Geronimo 3.0 now provides support for developing applications with the Enterprise OSGi programming model provided through integration with Apache Aries components. Applications defined in bundles can be managed in isolation as services to improve the maintainability of the server runtime.
This release adds on to what is considered the most flexible and easy to use open source application server for developers. The Geronimo 3.0 M1 milestone driver was released in June 2010. This article highlights some of the significant new features available in Geronimo 3.0-M1.
Blueprint and EBAs
Apache Aries provides a number of components that implement various OSGi enterprise specifications. Aries Blueprint implements the Blueprint Container specification, providing a dependency injection container for OSGi applications. Blueprint standardizes conventions from Spring and uses an XML definition to describe component configuration and wiring. Geronimo 3.0 uses the Blueprint container together with other components from Apache Aries to provide the EBA (Enterprise Business Archive) programming model and package deployment.
An EBA file is a way to specify an OSGi application. An OSGi application is a collection of bundles that together form a coherent business function, much like an EAR file in the Java EE programming model. For example, an EBA file can contain a Blueprint bundle and a JPA persistence bundle. The Blueprint bundle can contain components that are injected with a persistence unit defined in the persistence bundle. JPA (Java Persistence API) is a standard way to map a relationship from a POJO (Plain Old Java Object) to the persistence layer. JPA 2.0 is now a standalone specification separate from the Enterprise JavaBeans 3.0 specification. Geronimo uses the Apache OpenJPA component to provide persistent data access.
An EBA distributed as a registered service simplifies module reuse between applications. This also enables flexibility for developers to unit test independent of the server environment with available tooling.
Geronimo 3.0 M1 also integrates the JNDI (Java Naming and Directory Interface) component from Apache Aries. It provides a handy way to provide access to a service registry with a JNDI lookup. This feature also enables OSGi services to be injected into regular Java EE modules with the @Resource annotation.
Web application bundles
Geronimo 3.0 M1 also supports OSGi Web applications. OSGi Web applications bring support for WAR modules into OSGi. OSGi application support in Geronimo is complementary to the Java EE 6 programming model, and enables the use of Java components in a modular fashion as a collection of application modules and Web resources. These application modules are packaged as bundles containing resource files, classes, and metadata within a JAR formatted file. The bundle metadata specifies module versions, dependency declarations, and package visibility with XML. In this fashion, bundles can be activated concurrently within their own classpath and react to lifecycle changes independently. The bundle can dynamically resolve dependencies based on lifecycle state events and gracefully degrade if resolution fails at run time. A Web application bundle (WAB) is a bundle with specific common dependencies specified and is essentially a WAR file with the appropriate OSGi metadata. A WAR file can be automatically converted into a WAB using a special "webbundle" URL during a bundle install. Existing WAR modules can become WAB archives by specifying bundle dependencies with specific versions in a manifest file. In this way, we can say WAR : WBA :: EAR : EBA. WABs support Servlets, JSP and annotations.
Java EE features
Geronimo 3.0 M1 contains parts of the new Java EE 6 Web profile features. Servlet 3.0 and JSP 2.2 are now provided with the inclusion of support for the Tomcat 7 container. The main focus of the Servlet 3.0 specification is Web framework extensibility. New Java language features are exposed to provide servlet annotations to describe metadata previously configured in the web.xml descriptor file. Annotations support provides programmatic registration and initialization of servlets, servlet filters, and context listeners. Instead of using one long web.xml file to declare servlets and filters, the container can use multiple web.xml fragments to assemble the descriptor of the application with rules provided to avoid conflicts.
Servlet 3.0 in Tomcat also provides for asynchronous processing of the request/response cycle. This is an important feature, enabling non-blocking input, handling, and output for building Web 2.0 style behavior in the application or service.
The Servlet 3.0 specification is also aligned with Java Server Pages 2.2 support. The main focus of JSP 2.2 is developer productivity. A pluggable Web tier API is provided through the new Unified Expression Language, known simply as EL. EL 2.2 brings together expression languages in JSP and Java Server Faces to better handle tag evaluation, object properties, and their references. EL expressions can be used directly within JSP tag files or the pages themselves. Java Server Faces 2.0 now uses Facelets for the user interface by providing simple view templates.
JSF 2.0 also provides annotations for managed bean access, listener registration, and so on. This means a properly annotated POJO can become a managed bean at run time without separate configuration. The scope of the bean lifecycle is managed through this convention. These annotations can be used in components, validators, or renderers.
The navigation model is also updated to allow declarative convention-based handling based on business logic rather than explicit actions in configuration. There are three ways to specify navigation with no or minimal configuration, and the API enables queries and modifications to be made to the navigation rules at run time. These features are quite handy and make developing web applications easier with Geronimo 3.0.
The primary mission of the Apache Geronimo open source project is to create a modular application server framework from best of breed open source components. Apache Geronimo 3.0 is a flexible Java EE application server developed with customization in mind. It provides greater ease of use and an enhanced developer experience with a small footprint. Five distributions of Apache Geronimo 3.0 give you custom assembly options with Tomcat or Jetty Web containers, and OpenJPA or no persistence services. The Geronimo 3.0 M1 release provides several key Java EE 6 components provided as OSGi services, as well as support for the OSGi application programming model. This server is a compelling milestone for Java developers seeking a robust framework for tailoring reusable application infrastructure services.
Get products and technologies
- Apache Geronimo wiki
- Apache Geronimo documentation wiki
- IBM developerWorks WebSphere Emerge group
- IBM WebSphere Application Server Community Edition forum