Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

OpenEJB 3.0 supports the EJB 3.0 specification as well as the prior EJB 2.1, EJB 2.0, and EJB 1.1. New features in EJB 3.0 include:

  • Annotations instead of xml
  • No home interfaces
  • Business Interfaces
  • Dependency Injection
  • Interceptors
  • Java Persistence API
  • Service Locator (ala SessionContext.lookup)
  • POJO-style beans
  • JAX-WS Web Services

EJB 2.x features since OpenEJB 1.0 also include:

  • MessageDriven Beans
  • Container-Managed Persistence (CMP) 2.0
  • Timers

The two aspects of EJB that OpenEJB does not yet support are:

  • JAX-RPC
  • CORBA

CORBA support will be added in future releases. Support for the JAX-RPC API is not a planned feature.

...

Over the years, OpenEJB has innovated the art of the embedded/Java SE EJB container usable as a plain library much the way an embedded databases work. In a simple 1, 2, 3 step of 1) add OpenEJB to your classpath, 2) add a META-INF/ejb-jar.xml containing at minimum "<ejb-jar/>", then 3) use the org.apache.openejb.client.LocalInitialContextFactory when creating your client InitialContext and , you've got a Java SE EJB container that can be used in unit tests, your IDE, or anyway you'd like to drop in EJB functionality. Configuration can be done through an openejb.xml file or can be encapsulated 100% in the test case through the parameters passed to the InitialContext. For example, to create a JTA DataSource for JPA usage, you can simply:

...

...

See the examples zip for a dozen embedded testing examples that range from simple @Stateless beans to advanced transaction and security testing.

EJB Plugin for Tomcat 6 and 5.5

OpenEJB 3.0 can be plugged into any Tomcat 6 or Tomcat 5.5 server, adding support for EJBs in Web Apps. War files themselves can contain EJBs and the Servlets can use new JavaEE 5 annotations, XA transactions, JPA, and JMS. Webapps can even support fat java clients connecting over HTTP.

...

No matter, adding OpenEJB to Tomcat gives Servlets several new Java EE 5 capabilities such as JPA, JAX-WS, JMS, J2EE Connectors, transactions, and more as well as enhancing the injection features of Tomcat 6 to now support injection of JavaEE objects like Topics, Queues, EntityManagers, JMS ConnectionFactories, JavaMail Sessions, as well as simpler data types such as Dates, Classes, URI, URL, List, Map, Set, Properties, and more. In the case of Tomcat 5.5 which doesn't support dependency injection at all, even more is gained.

Runs on OSGi

Collapsed EAR (EJBs in .WARs)

Along the lines of the Tomcat integration where OpenEJB can be plugged into Tomcat, we've expanded the idea to also allow your EJBs to be plugged into your webapp. We call this innovative feature Collapsed EAR. In this style 100% of your classes, including your EJBs, can be packed into your WEB-INF/classes and WEB-INF/lib directories. The result is that your WAR file becomes a replacement for an EAR. Unlike an EAR, all multi-packaging and multi-classloader requirements are stripped away and collapsed down to one archive and one classloader all your components, EJBs or otherwise, can share.

Runs on OSGi

All OpenEJB 3.All OpenEJB 3.0 binaries come with complete OSGi metadata and are usable as a bundle in any OSGi platform. Look for OpenEJB in the upcoming, OSGi-based ServiceMix 4 which is built on Apache Felix.

...

OpenEJB 3.0 supports injection of any data type for which you can supply a JavaBeans PropertyEditor. We include several built-in PropertyEditors already such as Date, InetAddress, Class, File, URL, URI, Map, List, any java.lang.Enum and more.

...

...

Dependency Injection – Generic Collections and Maps

Support for Java Generics makes the dependency injection that much more powerful. Declare an injectable field that leverages Java Generics and we will use that information to boost your injection to the next level. For example:

...

...

Dependency Injection – Custom Types

You can easily add your own types or override the way built-in types are handled and claim dependency injection as your own making it a critical part of your architecture. For example, let's register a custom editor for our Pickup enum.

...

...

The META-INF/env-entries.properties

...

To fix this, OpenEJB supports the idea of a META-INF/env-entries.properties file where we will look for the value of things that need injection that are not container controlled resources (i.e. datasources and things of that nature). You can configure you ejbs via a properties file and skip the need for an ejb-jar.xml and it's 5 lines per property madness.

...

...

Support for GlassFish descriptors

...

Some example output might look like the following. Here we illegally add some annotations to the "Movies" bean's interface as well as use the wrong annotations for various types of injection:

...

...

JNDI Name Formatting

A complication when using EJB is that plain client applications are at the mercy of vendor's chosen methodology for how JNDI names should be constructed. OpenEJB breaks the mold by allowing you to specify the exact format you'd like OpenEJB to use for your server or any individual application. Supply us with a formatting string, such as "ejb/{ejbName}/{interfaceClass.simpleName}", to get a JNDI layout that best matches your needs.

Changelog

...

...