You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by David Blevins <da...@gmail.com> on 2012/08/14 07:46:38 UTC

ServiceProvider improvements

Heads up on a long needed rewrite of the <ServiceProvider> service-jar.xml code.

We've been duplicating config for years and it's been a back-burner item on the TODO list for quite some time.

Currently, the service-jar.xml configs, which provide defaults for anything configured in tomee.xml, look a bit redundant like this:

<ServiceProvider id="My DataSource" types="DataSource"> 
  JdbcDriver org.hsqldb.jdbcDriver 
  JdbcUrl jdbc:hsqldb:file:data/hsqldb/hsqldb 
  UserName sa 
  Password 
  JtaManaged true 
</ServiceProvider> 

<ServiceProvider id="My Unmanaged DataSource" types="DataSource"> 
  JdbcDriver org.hsqldb.jdbcDriver 
  JdbcUrl jdbc:hsqldb:file:data/hsqldb/hsqldb 
  UserName sa 
  Password 
  JtaManaged false 
</ServiceProvider> 

The obviously missing functionality is to be able to reuse <ServiceProvider> data when creating a derivative <ServiceProvider>.  Something like this:

<ServiceProvider id="My DataSource" types="DataSource"> 
  JdbcDriver org.hsqldb.jdbcDriver 
  JdbcUrl jdbc:hsqldb:file:data/hsqldb/hsqldb 
  UserName sa 
  Password 
  JtaManaged true 
</ServiceProvider> 

<ServiceProvider id="My Unmanaged DataSource" parent="My DataSource"> 
  JtaManaged false 
</ServiceProvider>

This obviously adds in subtle complexities such as circular references, etc.  To really do it right I pretty much had to redo the guts of the <ServiceProvider> processing code.  It now lives here:

 - http://svn.apache.org/repos/asf/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/

Some side benefits of the refactor:

 - Much tighter control of <ServiceProvider> declarations added.  Easy to add strict validation now.
 - Now possible to use something other than service-jar.xml files to declare providers. (only service-jar.xml is implemented, but is cleanly abstracted)
 
Finally this chunk of code which has had a few band-aids on it is clean and modern.  More expansion we can do in the area is fire events when a provider is added.

Haven't yet cleaned up the various service-jar.xml files.  Wanted to get a clean TCK run of the changes without that before taking an axe to them.


-David