geronimo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From SunSeaAndPalms <SunSeaAndPa...@gmail.com>
Subject Re: How to specify classloader for web application deployed on Geronimo.
Date Sat, 29 May 2010 08:29:26 GMT

I am new to Geronimo and JavaEE in common. I need to add <gbean>
declaration for PersistenceUnitGBean in my deployment plan, am I right?
How do I set PRIORITY_CLASSLOADER? Is it an attribute of the mentioned
above <gbean> declaration? But there isn't such field in
PersistenceUnitGBean class.
 
David, thanks you for help!
 
On Птн, 2010-05-28 at 16:03 -0700, David Jencks [via Apache Geronimo]
wrote:
> 
> On May 28, 2010, at 3:22 PM, SunSeaAndPalms wrote: 
> 
> > 
> > Technologies that are used in my application requires classloader
> with 
> > 'addTransformer(ClassFileTransformer)' method and claims that
> Geronimo's 
> > default org.apache.geronimo.kernel.config.MultiParentClassLoader ,
> doesn't 
> > have it. So I need to setup my special class loader for my
> application 
> > (war). I use Geronimo with Tomcat. I was told that specifying
> classloader is 
> > a very simple process on Tomcat. Following example shows how to do
> it (The 
> > file is named "context.xml"): 
> > 
> > <Context path="/myWebApp" docBase="/my/webApp/location"> 
> >    <Loader 
> > 
> >
> loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

> > </Context> 
> > 
> > The alternative for Geronimo is using "geronimo-tomcat.xml" in
> deployment 
> > plan (I read about it from 
> > http://www.ibm.com/developerworks/java/library/os-ag-tomcat/ this
> doc ). The 
> > problem is that there isn't a classloader property specified. 
> > 
> > So my question is: How can I change default classloader with a
> special one 
> > for my web application deployed on Geronimo?
> 
> You can't change what classloader geronimo uses for your web app.
>  However, you can register a ClassTransformer quite easily.  We do
> this for jpa.  Here's the code we use, from 2.2
>  plugins/openjpa/geronimo-persistence-jpa10/src/main/java/org/apache/geronimo/persistence/PersistenceUnitGBean.java:

> 
>         public void addTransformer(ClassTransformer classTransformer)
> { 
>             TransformerWrapper transformer = new
> TransformerWrapper(classTransformer, classLoader); 
>             transformers.add(transformer); 
>             TransformerAgent.addTransformer(transformer); 
>         } 
> 
> 
> public class TransformerWrapper implements ClassFileTransformer { 
> 
>     private final ClassTransformer classTransformer; 
>     private final ClassLoader classLoader; 
> 
>     public TransformerWrapper(ClassTransformer classTransformer,
> ClassLoader classLoader) { 
>         this.classTransformer = classTransformer; 
>         this.classLoader = classLoader; 
>     } 
> 
>     public byte[] transform(ClassLoader loader, String className,
> Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
> byte[] classfileBuffer) throws IllegalClassFormatException { 
>         if (loader != classLoader) { 
>             return null; 
>         } 
>         try { 
>             return classTransformer.transform(loader, className,
> classBeingRedefined,  protectionDomain, classfileBuffer); 
>         } catch (IllegalClassFormatException e) { 
>             throw e; 
>         } catch (RuntimeException e) { 
>             return null; 
>         } 
>     } 
> } 
> 
> 
> If you don't care whether all classes, not just the ones in your app,
> are fed to your ClassTransformer, you can leave out the
> TransformerWrapper. 
> 
> This code should go in a gbean with priority PRIORITY_CLASSLOADER to
> make sure it is installed before other components are started and
> perhaps load your classes untransformed.  See the PersistenceUnitGBean
> for more details. 
> 
> Hope this helps 
> david jencks 
> 
> 
> > 
> > 
> > -- 
> > View this message in context:
> http://apache-geronimo.328035.n3.nabble.com/How-to-specify-classloader-for-web-application-deployed-on-Geronimo-tp853251p853251.html
> > Sent from the Users mailing list archive at Nabble.com. 
> 
> 
> 
> 
> ______________________________________________________________________
> View message @
> http://apache-geronimo.328035.n3.nabble.com/How-to-specify-classloader-for-web-application-deployed-on-Geronimo-tp853251p853323.html

> To unsubscribe from How to specify classloader for web application
> deployed on Geronimo., click here.
> 



-- 
View this message in context: http://apache-geronimo.328035.n3.nabble.com/How-to-specify-classloader-for-web-application-deployed-on-Geronimo-tp853251p854098.html
Sent from the Users mailing list archive at Nabble.com.

Mime
View raw message