Folks,
I'd appreciate some assistance from anyone who understands the
ClassLoaderContext class.
The situation concerns the implementation-bpel-runtime module and in particular the class
BPELImplementationProvider and its start() method.
This method needs to set up an appropriate TCCL for the ODE BPEL runtime code that gets invoked from
this class, to deal with classloading when running under OSGi.
In particular, there are some "old style" META-INF/services to deal with, plus some JPA code that
also does class loading across bundle boundaries.
Basically, there are 2 needs:
1) TCCL needs to access the Provider class for the Persistence API
- this needs to be org.apache.openjpa.persistence.PersistenceProviderImpl contained in the
openjpa_1.2.1 package
- this is a classic META-INF/services style of service, using
"javax.persistence.spi.PersistenceProvider" as its key
2) TCCL needs to access the ODE JPA DAO implementation classes, loaded by the OpenJPA code, which is
accessed through a search for a META-INF/persistence.xml file, contained in the
ode-dao-jpa_1.3.2.jar bundle
The current code, which does work correctly, is this rather ugly stuff:
ClassLoader tccl =
ClassLoaderContext.setContextClassLoader(EmbeddedODEServer.class.getClassLoader(),
PersistenceProviderImpl.class.getClassLoader(),
ProcessDAOImpl.class.getClassLoader() );
The problem with this is the explicit dependence on PersistenceProviderImpl and
ProcessDAOImpl classes.
Is there some better alternative that we could use based on the use of names
only rather than classes?
I can see that there might be for the Persistence provider, but how to handle the JPA
"implementation" classes?
Yours, Mike.