OpenEJB 3.0 beta 1 Released!

The OpenEJB team is proud to announce the release of OpenEJB 3.0 beta 1. As our first release of the new OpenEJB 3.0 codebase, OpenEJB 3.0 beta 1 continues where prior versions 0.9.2 and 1.0 left of in all things OpenEJB. Embeddabiliy, Tomcat integration, Collapsed EARs, Container Driven Testing, a standalone server and overall ease of use are back. In addition to repolishing and updating these tried and true features, OpenEJB supports the EJB 3.0 specification and many new features such as extended Dependency Injection, EAR support, custom JNDI name formatting, and CMP over JPA.

Apache OpenEJB 3.0-beta-1 - September 29, 2007

Download :

* * N E W F E A T U R E S * *

EJB 3.0 Compliance

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; Intercpetors; Java Persistence API; POJO-style
beans; Java Persistence API (JPA).

EJB 2.1 features new to OpenEJB: MessageDriven Beans;
Container-Managed Persistence (CMP) 2.0; Timers;

EJB plugin for Tomcat 6

OpenEJB 3.0 can be plugged into any Tomcat 6 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

Container Driven Testing

Testing EJBs can be done with plain old unit tests by using OpenEJB
as an embedded EJB Container right in your test case just like you
would use an embedded database such as HSQL or Derby. With this you
can test your EJBs in your build just as you would any other object.
All parts of EJB can be tested from simple business invocations to
transactions and security. You'll be surprised how fast it is.


Our CMP implementation is a thin layer over the new Java Persistence
API (JPA). This means when you deploy an old style CMP 1.1 or CMP
2.1 bean it is internally converted and ran as a JPA bean. This
makes it possible to use both CMP and JPA in the same application
without any coherence issues that can come from using two competing
persistence technologies against the same data. Everything is
ultimately JPA in the end.

Extended Dependency Injection

Dependency Injection in EJB 3.0 via @Resource is largely limited to
objects provided by the container, such as DataSources, JMS Topics
and Queues. It is possible for you to supply your own configuration
information for injection, but standard rules allow for only data of
type String, Character, Boolean, Integer, Short, Long, Double, Float
and Byte. 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 and more.

JavaEE 5 EAR and Application Client support

JavaEE 5 EARs and Application Clients can be deployed in addition to
ejb jars. EAR support is limited to ejbs, application clients, and
libraries; WAR files and RAR files will be ignored. Per the JavaEE 5
spec, the META-INF/application.xml and
META-INF/application-client.xml files are optional.

Application Validation

Incorrect usage of various new aspects of EJB 3.0 are checked for
and reported during the deployment process preventing strange errors
and failures. Validation failures (non-compliant issues with your
application) are printed out in complier-style "all-at-once" output
allowing you to see and fix all your issues in one go. For example,
if you have 10 @PersistenceContext annotations that reference an
invalid persistence unit, you get all 10 errors on the first deploy
rather than one failure on the first deploy with 9 more failed
deployments to go.

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.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Apache OpenEJB version 3.0-beta-1
Release Notes
September 26th, 2007

New Features:

* [OPENEJB-690] Hot deploy and undeploy via command line tool
* [OPENEJB-689] Enterprise JavaBeans 3.0 support
* [OPENEJB-606] Commons DBCP Managed Data Sources
* [OPENEJB-451] openejb.xml to properties converter
* [OPENEJB-304] EAR Deployment support for EJBs and AppClients
* [OPENEJB-261] Embedded EJB Container for Unit Tests
* [OPENEJB-260] Automatic Configuration for Simple Apps
* [OPENEJB-216] Annotation-based Deployment
* [OPENEJB-132] New Tomcat/OpenEJB integration
* [OPENEJB-128] EJBd over HTTP -- ejb invocations over http protocol
* [OPENEJB-123] CMP 2.x support via JPA
* [OPENEJB-98] Dependency Injection
* [OPENEJB-90] Business Interface support
* [OPENEJB-89] EJB 2.1 <-> 3.0 compatibility
* [OPENEJB-79] Interceptors


* [OPENEJB-47] Support for common Exceptions serialization issues
* [OPENEJB-429] Support for Network servlces while Embedded
* [OPENEJB-425] Support for JPA runtime class enhancement
* [OPENEJB-414] ActiveMQ Broker ServerService
* [OPENEJB-692] JAAS and JACC Security
* [OPENEJB-573] Support for JSR-77 j2ee management MEJB
* [OPENEJB-389] Deployment support for EJB jar files without ejb-jar.xml files
* [OPENEJB-452] Support for partially complete openejb-jar.xml files
* [OPENEJB-336] Derby support
* [OPENEJB-691] Adaptive logging for embedded and standalone modes
* [OPENEJB-561] Stateless and Stateful pools on a per ejb basis
* [OPENEJB-337] Derby Network Service

Tasks & Sub-Tasks:

* [OPENEJB-591] "Hungry Exception" cleanup.
* [OPENEJB-398] @Stateless and @Stateful EJB 3 support
* [OPENEJB-447] Ability for remote server to pickup new deployments as they are added
* [OPENEJB-675] Add support for logging being configured externally
* [OPENEJB-605] Allow more info in authentication request
* [OPENEJB-427] Allow multiple URIs in the ServerMetaData object to provide for clustering
* [OPENEJB-446] App undeploy
* [OPENEJB-78] Business Method: AroundInvoke
* [OPENEJB-406] EJB3 equals() and hashCode() support for business interface proxies
* [OPENEJB-369] EJBContext.getTimerService()
* [OPENEJB-368] EJBContext.lookup
* [OPENEJB-404] EJBHome.create<METHOD> style invoke
* [OPENEJB-405] EntityBean.ejbHome<METHOD> method support
* [OPENEJB-83] Expand protocol for non-ejb specific interfaces
* [OPENEJB-624] Extract Logger Categories to a separate interface
* [OPENEJB-80] InvocationContext
* [OPENEJB-77] Lifecycle Callbacks: PostActivate/PrePassivate
* [OPENEJB-76] Lifecycle Callbacks: PostConstruct/PreDestroy
* [OPENEJB-308] META-INF/lib or APP-INF/lib for third-party jars in EARs
* [OPENEJB-85] Non-EJBLocalObject local proxies for in-vm use
* [OPENEJB-84] Non-EJBObject remote proxies for in-vm use
* [OPENEJB-627] Refactor Logging API to tighten Logger creation
* [OPENEJB-442] Stateful Session Bean Extended Persistence Context
* [OPENEJB-558] Upgrade ActiveMQ to 4.1.1
* [OPENEJB-265] Upgrade XBean to 2.6
* [OPENEJB-686] Use released openjpa 1.0.0
* [OPENEJB-441] javax.transaction.TransactionSynchronizationRegistry
* [OPENEJB-523] @Remove invocation on home.remove or remote.remove
* [OPENEJB-130] Automated Tomcat testing on Mac OSX and Linux
* [OPENEJB-416] CMP2JPA: CMP 1.x beans
* [OPENEJB-417] CMP2JPA: CMP 2.x cmp-fields
* [OPENEJB-421] CMP2JPA: CMP 2.x ejbSelect
* [OPENEJB-420] CMP2JPA: CMP 2.x many-to-many
* [OPENEJB-419] CMP2JPA: CMP 2.x one-to-many
* [OPENEJB-418] CMP2JPA: CMP 2.x one-to-one
* [OPENEJB-541] CMP2JPA: Complex Primary Key
* [OPENEJB-415] CMP2JPA: Create JPA based CMP container based on Castor container
* [OPENEJB-422] CMP2JPA: Generate CMP 2.x concrete class for JPA
* [OPENEJB-424] CMP2JPA: Generate entity-mapping.xml using OpenEJB 2.x openejb-jar.xml file
* [OPENEJB-423] CMP2JPA: Generate entity-mapping.xml using ejb-jar.xml file
* [OPENEJB-542] CMP2JPA: Unknown Primary Key
* [OPENEJB-87] Class-level Interceptors
* [OPENEJB-108] Create javax.ejb classes, interfaces, enums, and annotations
* [OPENEJB-109] Create javax.persistence classes, interfaces, enums and annotations
* [OPENEJB-99] Dependency Injection: Public field
* [OPENEJB-100] Dependency Injection: Setter
* [OPENEJB-520] EJB 3 Pojo Session beans with EJB 2.1 Home and Remote interfaces
* [OPENEJB-521] EJB 3 Pojo Session beans with EJB 2.1 LocalHome and Local interfaces
* [OPENEJB-522] EJB 3 Stateful beans with init-method/@Init
* [OPENEJB-380] ENC: message-destination-ref: javax.jms.Queue
* [OPENEJB-381] ENC: message-destination-ref: javax.jms.Topic
* [OPENEJB-382] ENC: persistence-context-ref
* [OPENEJB-383] ENC: persistence-unit-ref
* [OPENEJB-377] ENC: resource-env-ref: javax.ejb.SessionContext
* [OPENEJB-378] ENC: resource-env-ref: javax.jms.Queue
* [OPENEJB-379] ENC: resource-env-ref: javax.jms.Topic
* [OPENEJB-374] ENC: resource-ref:
* [OPENEJB-375] ENC: resource-ref: javax.jms.QueueConnectionFactory
* [OPENEJB-376] ENC: resource-ref: javax.jms.TopicConnectionFactory
* [OPENEJB-373] ENC: resource-ref: javax.mail.Session
* [OPENEJB-356] Example: @Resource for Setter Injection
* [OPENEJB-347] Example: Minimal Stateful Bean via @Stateful
* [OPENEJB-346] Example: Minimal Statetless Bean via @Stateless
* [OPENEJB-357] Example: Using @EJB to refer to other EJBs
* [OPENEJB-96] Global JNDI Business Interface references
* [OPENEJB-610] Hot deploy tool
* [OPENEJB-102] Injection of EJB References
* [OPENEJB-101] Injection of Environment Entries
* [OPENEJB-105] Injection of Message Destination References
* [OPENEJB-107] Injection of Persistence Context References
* [OPENEJB-106] Injection of Persistence Unit References
* [OPENEJB-104] Injection of Resource Environment References
* [OPENEJB-103] Injection of Resource Manager Connection Factory References
* [OPENEJB-544] Interceptor Chain
* [OPENEJB-214] Interceptor: Lifecycle Callbacks: PostActivate/PrePassivate
* [OPENEJB-543] InvocationContext
* [OPENEJB-95] JNDI ENC Business Interface references
* [OPENEJB-93] Local business interfaces via IntraVM Server
* [OPENEJB-532] MessageDriven "onMessage" Interception
* [OPENEJB-211] MessageDriven Bean: Lifecycle Callbacks: PostConstruct/PreDestroy
* [OPENEJB-533] MessageDriven Lifecycle Interception
* [OPENEJB-88] Method-level Interceptors
* [OPENEJB-86] Package-level Interceptors (aka Default Interceptors)
* [OPENEJB-119] Port BMP Container
* [OPENEJB-121] Port MDB Container
* [OPENEJB-118] Port Stateful Container
* [OPENEJB-117] Port Stateless Container
* [OPENEJB-91] Remote business interfaces via EJBd Server
* [OPENEJB-92] Remote business interfaces via IntraVM Server
* [OPENEJB-94] SessionContext.getBusinessObject(interface)
* [OPENEJB-97] SessionContext.getInvokedBusinessInterface
* [OPENEJB-213] Stateful Bean: Lifecycle Callbacks: PostActivate/PrePassivate
* [OPENEJB-210] Stateful Bean: Lifecycle Callbacks: PostConstruct/PreDestroy
* [OPENEJB-530] Stateful Business Method Interception
* [OPENEJB-531] Stateful Lifecycle Interception
* [OPENEJB-209] Stateless Bean: Lifecycle Callbacks: PostConstruct/PreDestroy
* [OPENEJB-529] Stateless Business Method Interception
* [OPENEJB-528] Stateless Lifecycle Interception
* [OPENEJB-536] Validation: AroundInvoke signature
* [OPENEJB-526] Validation: Check for incorrect use of injection-target-name
* [OPENEJB-455] Validation: Check that @Local hasn't been used to point to an EJBLocalHome or EJBLocalObject interface
* [OPENEJB-454] Validation: Check that @Remote hasn't been used to point to an EJBHome or EJBObject interface
* [OPENEJB-552] Validation: EjbName used in InterceptorBinding is correct
* [OPENEJB-612] Validation: EjbName used in method-based InterceptorBinding
* [OPENEJB-616] Validation: PostActivate callback signature is correct
* [OPENEJB-614] Validation: PostConstruct callback signature is correct
* [OPENEJB-613] Validation: PreDestroy callback signature is correct
* [OPENEJB-615] Validation: PrePassivate callback signature is correct
* [OPENEJB-617] Validation: Warn on unsupported service-refs
* [OPENEJB-575] Validation: XML method permissions to beans that do not exist
* [OPENEJB-574] Validation: XML transaction attributes to beans that do not exist
* [OPENEJB-212] interceptor: Lifecycle Callbacks: PostConstruct/PreDestroy
* [OPENEJB-221] javax.annotation.PostConstruct
* [OPENEJB-222] javax.annotation.PreDestroy
* [OPENEJB-603] javax.annotation.Resource: for SessionContext
* [OPENEJB-602] javax.annotation.Resource: for TimerService
* [OPENEJB-223] javax.annotation.Resource: for env-entry
* [OPENEJB-401] javax.annotation.Resource: for message-destination-ref
* [OPENEJB-400] javax.annotation.Resource: for resource-ref
* [OPENEJB-224] javax.annotation.Resources
* [OPENEJB-225]
* [OPENEJB-226]
* [OPENEJB-227]
* [OPENEJB-228]
* [OPENEJB-229]
* [OPENEJB-230] javax.ejb.ActivationConfigProperty
* [OPENEJB-231] javax.ejb.ApplicationException
* [OPENEJB-232] javax.ejb.EJB
* [OPENEJB-233] javax.ejb.EJBs
* [OPENEJB-234] javax.ejb.Init
* [OPENEJB-235] javax.ejb.Local
* [OPENEJB-236] javax.ejb.LocalHome
* [OPENEJB-237] javax.ejb.MessageDriven
* [OPENEJB-238] javax.ejb.PostActivate
* [OPENEJB-239] javax.ejb.PrePassivate
* [OPENEJB-240] javax.ejb.Remote
* [OPENEJB-241] javax.ejb.RemoteHome
* [OPENEJB-242] javax.ejb.Remove
* [OPENEJB-243] javax.ejb.Stateful
* [OPENEJB-244] javax.ejb.Stateless
* [OPENEJB-245] javax.ejb.Timeout
* [OPENEJB-246] javax.ejb.TransactionAttribute
* [OPENEJB-247] javax.ejb.TransactionManagement
* [OPENEJB-248] javax.interceptor.AroundInvoke
* [OPENEJB-249] javax.interceptor.ExcludeClassInterceptors
* [OPENEJB-250] javax.interceptor.ExcludeDefaultInterceptors
* [OPENEJB-251] javax.interceptor.Interceptors

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Unimplemented Features, bugs, limitations

* [OPENEJB-435] Support for JDK 1.6 / JRE 6.0
* [OPENEJB-583] Problems excluding default interceptor
* [OPENEJB-688] JAX-WS Web Services Support
* [OPENEJB-371] ENC: service-ref support
* [OPENEJB-628] Unenhanced JPA support with OpenJPA
* [OPENEJB-668] Client JNDI Context.list method support
* [OPENEJB-550] Need to support persistent TimerStore
* [OPENEJB-584] Method-level interceptors declared via annotations executed before method-level annotations declared via xml
* [OPENEJB-621] Allow properties command to work securely to fully remote servers
* [OPENEJB-673] running openejb deploy command for an already deployed module throws an exception
* [OPENEJB-253] Per EJB or EJB Interface JNDI Name declaration
* [OPENEJB-611] Hot deploy directory

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

For updated details see:

Posted by David Blevins 2007-10-01

Log in to post a comment.

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

No, thanks