I think we should be using something like the more flexible like the
java service provider notion used by jaxp and others as the env aware
factory bootstrap:
http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html#Service Provider
A simple example test driver:
package util.jar;
import java.util.Iterator;
/**
* @author [EMAIL PROTECTED]
* @version $Revision:$
*/
public class TestServiceProvider
{
static IByteCodeThing getThing()
{
IByteCodeThing thing = null;
// Bad dependency on sun.misc that we can easily replace with our
own impl
Iterator ps =
sun.misc.Service.providers(IByteCodeThingFactory.class);
while (ps.hasNext())
{
IByteCodeThingFactory factory = (IByteCodeThingFactory)
ps.next();
try
{
thing = factory.getThing();
}
catch (Exception e)
{
// go onto the next provider
System.out.println("Failed to load instance from factory: "
+ factory + ", msg=" + e.getMessage());
}
}
return thing;
}
public static void main(String[] args)
{
IByteCodeThing thing = getThing();
System.out.println("Found thing: " + thing);
thing.doSomething();
}
}
Simple ant fragments that create a bytecodething.jar with a
META-INF/services/util.jar.IByteCodeThingFactory entry describing a
cglib/javassist based implementation of the
util.jar.IByteCodeThingFactory interface:
<target name="bytecodething.jar">
<echo file="lib/IByteCodeThingFactory">
util.jar.javassit.ByteCodeThingFactory
util.jar.cglib.ByteCodeThingFactory
</echo>
<jar destfile="lib/bytecodething.jar">
<zipfileset
fullpath="META-INF/services/util.jar.IByteCodeThingFactory"
file="lib/IByteCodeThingFactory" />
<fileset dir="classes">
<include name="util/jar/**" />
</fileset>
</jar>
</target>
<target name="test-bytecodething" depends="bytecodething.jar">
<java classname="util.jar.TestServiceProvider">
<classpath path="lib/bytecodething.jar" />
</java>
</target>
Running the test driver:
[EMAIL PROTECTED] java5]$ ant test-bytecodething
Buildfile: build.xml
bytecodething.jar:
[jar] Building jar: C:\usr\local\java5\lib\bytecodething.jar
test-bytecodething:
[java] Failed to load instance from factory:
[EMAIL PROTECTED], msg=no cglib available
[java] Found thing: [EMAIL PROTECTED]
[java] Doing javassit bytecode thing
The util.jar.cglib.ByteCodeThingFactory simply throws a
ClassNotFoundException("no cglib available") as an example of how this
could be selected based on class visibility.
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On
> Behalf Of Steve Ebersole
> Sent: Wednesday, April 26, 2006 9:41 AM
> To: [email protected]
> Subject: RE: [JBoss-dev] Upgrading cglib dependency to
> version 2.1.3 in 4.0branch
>
> Right, that's the other part to this. I'd need to change the
> hibernate-int module to depend on this new hibernate
> "release". Then it is a matter of specifying to use
> javassist over cglib as a config parameter. The interesting
> thing here, though, is that this setting is global to a
> classloader (scoped by a static variable). Should this be
> something we make a JBoss config option? Otherwise, I could
> just set a system property when the MBean first starts up and
> hope that no one has yet loaded that particular class.
>
> Bill/Emmanuel, will need to do the similiar for the ejb3 module.
>
> BTW, anyone have intellij projects files for 4x and head they
> would share?
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid0709&bid&3057&dat1642
_______________________________________________
JBoss-Development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jboss-development