Hot Deployment & ClassLoader Re-Use
I've implemented a service that observes changes to a jar file's timestamp, and utilizes a new UrlClassLoader to hot deploy class changes. It's working well in isolation, but I wonder how it will perform in production. The work is based on the October 31, 2000 JDC Tech Tips ( http://java.sun.com/developer/TechTips/2000/tt1027.html ).
I've tried to improve on the example code and I wonder if my change will help or haunt me. The example creates a new URLClassLoader every time the class is requested by name. In comparison, I wanted to only create a new class loader when necessary. To do so, I collect the class loader used for a given class name and re-use it on the next request if the underlying jar file has not changed. Is this a wise approach? Anything else I should be thinking about?
Here's some sample code to illustrate:
protected HashMap jarMap = null;
protected HashSet classesUpgraded = null;
protected HashMap classLoaders = null;
protected IUpgradeObserver observer = null;
public Class getClass(String xtlClassName) throws ClassNotFoundException {
Class c = null;
File f = getJar(xtlClassName);
observer.notifyIfChanged(f);
try {
if(f != null) {
lazyInitClassesUpgraded();
if(classesUpgraded.contains(xtlClassName)) {
// the jar has changed, so create a new class loader
Dbug.print(dbugTag, "Reloading " + xtlClassName + " from jar with timestamp " + f.lastModified());
ClassLoader loader = new URLClassLoader(new URL[]{f.toURL()});
c = loader.loadClass(xtlClassName);
if (c != null) {
classesUpgraded.remove(xtlClassName);
lazyInitClassLoaders();
classLoaders.put(xtlClassName, loader);
} else {
// the class has already been loaded from the current jar - reuse the existing class loader
lazyInitClassLoaders();
ClassLoader loader = (ClassLoader)classLoaders.get(xtlClassName);
c = loader.loadClass(xtlClassName);
} catch (MalformedURLException urle) {
urle.printStackTrace();
if(c == null) {
throw new ClassNotFoundException("The Xtencil jars did not contain " + xtlClassName);
} else {
return c;
}
legosa - Sure, some portion of getClass must be synchronized to reduce the likelihood of an additional new class def being created when two threads enter getClass at the same time. The other points you make are good as well, and I initially became aware of them in reading the Sun example. As far as I can tell, they shouldn't affect us. I'm not writing a general-purpose class loader. My work is only used to load a specific type of "map" that is frequently updated. We always go through the same factory function to create these maps by name. No singletons will be generated through the utility, and it should be fine for two class objects to exist for a given class name. Basically, the software looks up a map implementation by name, runs it, marks the map as garbage, and moves on to the next. If I plug my class loader into our other web-based container, I have more concerns, since many users may be requesting maps and the old class definitions are less likely to be garbage at any given time.
pekoe - Thanks for the heads up on HotSwap. Unfortunately, as I understand it, the work is intended for development environments, not production servers. For example, it requires the JVM be in debug mode!
Similar Messages
-
Hot deploy, classloading & singletons
I have the following doubt about hot-deploy, classloading & singletons.
Let´s assume I have a sessionbean which accesses a singleton. As far as I understand
hot-deploy in weblogic, during a hot-deployment, a sessionbean instance currently
engaged in a transaction is not unloaded untill the transaction is completed.
New transactions however would access the newly deployed & loaded instances of
the new version of my session bean.
Am I correct to assume that, if this is the case, several instances of my singleton
may exist at a certain moment in the same JVM (I am not talking about clusters,
but about execution threads).Hi Seth
Are you hot redeploying the entire application? Is the singleton class
packaged with the application?Yes the singleton is packaged with the application. It´s actually the Bussiness
Delegate.
>
Thanks.
Seth
"Sven van ´t Veer" wrote:
I have the following doubt about hot-deploy, classloading & singletons.
Let´s assume I have a sessionbean which accesses a singleton. As faras I understand
hot-deploy in weblogic, during a hot-deployment, a sessionbean instancecurrently
engaged in a transaction is not unloaded untill the transaction iscompleted.
New transactions however would access the newly deployed & loaded instancesof
the new version of my session bean.
Am I correct to assume that, if this is the case, several instancesof my singleton
may exist at a certain moment in the same JVM (I am not talking aboutclusters,
but about execution threads). -
Auto Deployment versus Hot Deployment
Hi,
Can anyone one please tell me what the real difference is between auto deployment versus hot deployment in WLS 8.1 SP4 as I am confused after reading the documentation.
Can they both be individually enabled or disabled?
Can I just disable Auto deployment and only use Hot deployment (or is hot deployment another name for manual deployment).
I know in Jrun that you can add hot-deploy directories in Jrun console, where now when a developers put a new WAR file or an updated WAR file - the server automatically deploys/redeploys it at that moment (this hot deploy directory could be any directory on the server or even on a different NTFS drive on same server).
Can this be achieved with WLS 8.1?
Thanks
JAutoDeployment automatically deploy/redeploy or undeploy the application when the application is put or removed from the applications folder under the wls domain directory. It is only available in Admin Server while it is running in development mode (default mode). It is not available if the Admin Server is running in Production mode.
Hot deployment deals with updating the application modules like ejb or war inside an ear without redeploying the complete application. This is dependent on the classloader structure of the given application. So if a ear has a webapp and a ejb with default classloader structure, then only the webapp can be hot redeployed without complete application redeploy. It can be used for apps deployed on both Admin and Managed servers and is available for both production and development mode.
Autodeployment is mainly to save the developer from running the deploy command every time while the app is being developed iteratively. Just copying the updated application in the applications folder will redeploy the app on the Admin server.
Hot deployment is mainly used to update the individual modules or jsps/servlets/classes in a module without redeploying the complete app. -
Hot deploying servlets without the admin tool
Hey, all! I was wondering if there is a way to hot-deploy
servlets without using the weblogic admin console.
With ejbs, this is done through weblogic.deploy
standalone. Thanks for your help!
Alex Kagan
WMarks,
We've done something similar for one or two low-profile apps.
You can use a tool such as wget ( Wget for Windows ) to download the installer to a known location on the user's workstation, and then run that installer as either a dynamic administrator or the system account in order to perform the installation.
As others have mentioned, there will always be applications you'll need to find workarounds for if the vendor didn't code their application to be launched as a non-administrative user.
Along with the least privilege solutions (mostly AD-based), you could investigate options such as VMware ThinApp or ZENworks Application Virtualization for apps that you absolutely have to have run as a non-admin, but remember there is always overhead introduced into the management and deployment process by re-packaging.
pitcherj -
Procedure for hot deploying EJBs using Jdeveloper and OC4J comtainer
i am using JDeveloper , please any one help me out in hot deploying EJBs. what is the procedure if i want to hot deploy EJBS
1) You have to start OC4J with higher Java heap size e.g. java -Xms100m -Xmx150m -jar oc4j.jar
2) The RMI port by default used is 23791 and configurable by modifying config/rmi.xml.
regards
Debu -
Hot deployment using the REDEPLOY feature
Hi
I am rather confused regarding the usage of the HOT DEPLOYMENT in WLS 6.1 sp2
- Win2000.
According to the documentation - "deployment.pdf" p. 31 you should be able to
simply touch the REDEPLOY file and the entire application should then be redeployed
by WLS. However according to the following link:
http://newsgroups.bea.com/cgi-bin/dnewsweb?cmd=article&group=weblogic.developer.interest.management&item=2095
the usage of the REDEPLOY feature is only for WebApp's not EJB's.
So my question in short terms: What am I supposed to belive ? the BEA documentation
or the BEA support team ?
I have tried using the REDEPLOY feature as suggested by the documentation however
the WLS fails to do the redeployment with an execption.
Kind regards
Jorgen FastrupFrom my experience REDEPLOY does work for EJBs as well. You need to meet two conditions: REDEPLOY file should be in META-INF and your application should be deployed under the domain/application. I was not able to get it to work when the application is deployed elsewhere. If somebody knows how to it, please let me know.
Alexander. -
JSF (RI) app hot-deploy memory leak
I have a standard JSF (RI) based web app that appears to be working just fine in terms of functionality. However, I believe that there is a memory leak associated with the sort of frequent hot-deploy cycles that are typical during a normal development cycle. I have been monitoring the app via the jvmstat 3.0 tools and have witnessed NO memory growth in the young or old generation areas - regardless of useage pattern. All of the growth seems to happen in the perm area of memory and be directly coincidental with the occurence of a deploy. Eventually, continued hot-deply cycles will result in an OutOfMemory error on the container - please note that continued and extensive use of the app WITHOUT the aforementioned hot-deploys does NOT result in the OutOfMemory error.
From my research so far, I have discovered the following thread:
http://forum.hibernate.org/viewtopic.php?t=935948&postdays=0&postorder=asc&start=75
It refers to a similar problem with hiberate (which I am NOT using) as well as a commons-logging and several others. From the looks of it, I strongly suspect that there may be an issue with JSF when it's implementation is bundled inside the WEB-INF/lib dir - i.e. inside the specific web app's ClassLoader.
Based on the above, I have implemented a SessionContextListener that invokes the org.apache.commons.logging.LogFactory.release() inside the contextDestroyed( ServletContextEvent e ) method. This does appear to free up some perm memory but there is still large growth that appears to be directly related to the FacesServlet initialization (navigation handlers, etc). I looked into calling the FacesContext.release() method which seems to have purpose similar to that of the LogFactory.release() method. However, at the time of the contextDestroyed() invocation, FacesContext.getCurrentInstance() always returns null, so I do not ever have an opportunity to invoke the release method that I am aware of. If my suspicions are correct, than I would likely be able to avoid this problem entirely by simply placing the JSF implementation jars in the conatiner's shared lib dir - instead of bundling it inside WEB-INF/lib. However, this is not an option for this container as multiple web apps (which require the flexibility to use differing JSF implementations and versions - i.e. RI vs MyFaces, etc) will run on this container.
I don't believe it is at all related to the problem at hand, but my container is JBoss 4.0.2.
Any and all assistance and suggestion will be greatly appreciated! Has anyone else seen this sort of behavior? Are there any work arounds or corrective actions?
TIAHas anyone else run into this? I'd greatly appreciate any assistance as I cannot seem to resolve this hot-deploy related leak.
-
Hot deployment in WL 8.1
Hi All,
I am deploying the application from my development dir "c:\development" as
exploded for WAR file and EJB modules as JAR files. What should I do to make
the hot deployment work?
My environment is: Win XP, IDE is JBuilder(also use Eclipse3.0), Weblogic
8.1
When I was googling, it brought me the CLASS-LOADER article in bea docs and
I applied that making different nested class-loaders for EJB, WAR in one and
the EJB module which is under development in a separate class-loader. It did
not work. But I think there should be an easy way for hot deployment. If
there is any link that talks about this please let me know. Your response is
appreciated.
Thanks,
senthilAlso adding to that, the server is started in development mode.
"Senthil" <[email protected]> wrote in message
news:[email protected]...
I am not sure this a way to go for hot deployment. But what I did was
changing the application and weblogic-application.xml files.
My application.xml is like
===========application.xml===========
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE
Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
<application>
<display-name>AppName</display-name>
<module>
<web>
<web-uri>Web</web-uri> <!--- No WAR --->
<context-root>/</context-root>
</web>
</module>
<module>
<ejb>EJB1</ejb>
</module>
<module>
<ejb>EJB2</ejb>
</module>
</application>
=============END==========
weblogic-application.xml is given below
==============weblogic-application.xml==========
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-application PUBLIC "-//BEA Systems, Inc.//DTD WebLogic
Application 8.1.0//EN"
"http://www.bea.com/servers/wls810/dtd/weblogic-application_2_0.dtd">
<weblogic-application>
<classloader-structure>
<module-ref>
<module-uri>EJB1.jar</module-uri>
</module-ref>
<classloader-structure>
<module-ref>
<module-uri>EJB2.jar</module-uri>
</module-ref>
</classloader-structure>
</classloader-structure>
</weblogic-application>
=========End===========
Thanks,
senthil
"Senthil" <[email protected]> wrote in message
news:[email protected]...
Hi All,
I am deploying the application from my development dir
"c:\development"
as
exploded for WAR file and EJB modules as JAR files. What should I do tomake
the hot deployment work?
My environment is: Win XP, IDE is JBuilder(also use Eclipse3.0),
Weblogic
8.1
When I was googling, it brought me the CLASS-LOADER article in bea docsand
I applied that making different nested class-loaders for EJB, WAR in oneand
the EJB module which is under development in a separate class-loader. Itdid
not work. But I think there should be an easy way for hot deployment. If
there is any link that talks about this please let me know. Your
response
is
appreciated.
Thanks,
senthil -
Obaccess.dll causes link error on hot deploy
I'm doing web services development with AccessServerSDK 10G, Glassfish v3, on windows XP using Eclipse. It works fine except whenever I change my code and eclipse attempts to hot deploy the application, the following error occurs and the deploy bombs:
"org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.UnsatisfiedLinkError: Native Library C:\NetPoint\AccessServerSDK\oblix\lib\obaccess.dll already loaded in another classloader"
It seems that the obaccess.dll reloads without checking whether if it is already loaded. The only way to redeploy the application is to shutdown Glassfish and restart it for every change I make. It's impeding my progress.
So far I've tried the following:
--removing jobaccess.jar from inside my application and putting it into Glassfish_HOME/domain/domain1/lib; it didn't help.
--put an ObConfig.shutdown before the ObConfig.initialize; it didn't help.
--catching the exception and ignoring it, but then the application gets a null pointer exception when it runs.
I can't find anyone else in cyberspace complaining about this problem. I hope it isn't an issue with Windows because we do all our development on our desktops, but I wouldn't be surprised.
Anyone else having this problem or found a fix for it?Hi,
I already faced with this problem on WLS11gR3 (10.3.4) and I try with all your workaround.
The solution I found was to install on separate server chain in order to reboot the server instead of use Hot Deploy.
We have also think to migrate the application to J2SE.
It seam that it is not possible to remove Jni 'till jvm is up and running.
Wile summer have you found any solution? -
Obaccess.dll causes link error on hot deploys
I'm doing web services development with AccessServerSDK, Glassfish v3, on windows XP using Eclipse. It works fine except whenever I change my code and eclipse attempts to hot deploy the application, the following error occurs and the deploy bombs:
"org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.UnsatisfiedLinkError: Native Library C:\NetPoint\AccessServerSDK\oblix\lib\obaccess.dll already loaded in another classloader"
It seems that the obaccess.dll reloads without checking whether if it is already loaded. The only way to redeploy the application is to shutdown Glassfish and restart it for every change I make. It's impeding my progress.
So far I've tried the following:
--removing jobaccess.jar from inside my application and putting it into Glassfish_HOME/domain/domain1/lib; it didn't help.
--put an ObConfig.shutdown before the ObConfig.initialize; it didn't help.
--catching the exception and ignoring it, but then the application gets a null pointer exception when it runs.
I can't find anyone else in cyberspace complaining about this problem. I hope it isn't an issue with Windows because we do all our development on our desktops, but I wouldn't be surprised.
Anyone else having this problem or found a fix for it?Hi,
I already faced with this problem on WLS11gR3 (10.3.4) and I try with all your workaround.
The solution I found was to install on separate server chain in order to reboot the server instead of use Hot Deploy.
We have also think to migrate the application to J2SE.
It seam that it is not possible to remove Jni 'till jvm is up and running.
Wile summer have you found any solution? -
How Does Hot Deployment works ?
Would anyone know about the mechanics of HotDeployment ? When does it actually swap the memory instance of the running ejb with the new deployed one ? What happens with the threads which are currently running with the old instance of EJB ?
Hot Deploy feature is not "specified" by the J2EE spec. Each vendor has a different way of actually implementing it.
Basically, each EJB is loaded using a separate ClassLoader. When an updated EJB jar file is detected, the existing ClassLoader is destroyed and a new ClassLoader is created to load the updated EJB. Usually (hopefully!) the implementations make sure that all the threads are completed / at least all transactions are rolled back before destroying the ClassLoader. Again this varies from container to container & version to version.
HTH,
--Das -
Hot deployment not playing along with coherence-tx.rar
I would like to setup my application so that the coherence and tangosol jars are owned by the application. Under this setup it will aid in hot deployment so that the coherence classloader is destroyed along with the application. Using the transaction services requires that I put the tangosol and coherence jars on the boot classpath of weblogic. I could live with this if there is an easy way to tell coherence to clear all caches that I can call from a startup servlet when my application redeploys.
Is there some other way of setting this up so that hot deployments destroy all caches and coherence-tx.rar can still be utilized?In a development environment where classes can change structure it is more semantically correct to destroy all references to the old class structure otherwise you get IncompatibleClassChangeErrors.
It is also more convenient for us to deploy the application without any external references. It makes setting up a QA server much easier, for example, if we don't have to install coherence and modify classpaths to get it up.
There is nothing special about the architecture just a standard EAR deployment with all 3rdparty classes packaged into the EAR. -
Creation of InitialContext fails when i hot-deploy scheduler-service.xml
Creation of InitialContext fails when i hot-deploy scheduler-service.xml
I configured scheduler-service as follows in Jboss 3.2:
scheduler-service.xml
<mbean code="org.jboss.varia.scheduler.Scheduler"
name=":service=Scheduler">
<attribute name="StartAtStartup">true</attribute>
<attribute name="SchedulableClass">com.beta.my.utils.FMScheduler</attribute>
<attribute name="SchedulableArguments">Schedulabe Test,12345</attribute>
<attribute name="SchedulableArgumentTypes">java.lang.String,int</attribute>
<attribute name="InitialStartDate">0</attribute>
<attribute name="SchedulePeriod">10000</attribute>
<attribute name="InitialRepetitions">-1</attribute>
</mbean>
Schedulable Class
package com.beta.my.utils;
import java.util.Date;
import org.jboss.varia.scheduler.Schedulable;
public static class FMScheduler
implements Schedulable
private String mName;
private int mValue;
public FMScheduler(String pName,int pValue)
mName = pName;
mValue = pValue;
public void perform(Date pTimeOfCall,long pRemainingRepetitions)
try {
Context context = new InitialContext();//properties taken from jndi.properties file
} catch (Exception e){
e.printStackTrace();
I started my jboss..,FMScheduler created successfully, perform method in FMScheduler called succesfully after SchedulePeriod(1000)
The problem occurs(NullPointerException) while i changed SchedulePeriod time and hot-deployed(just saved scheduler-service.xml).
The following Exception occures due to InitialContext creation fails*(Context context = new InitialContext();)* in FMScheduler.
17:46:27,361 ERROR [STDERR] java.lang.NullPointerException
17:46:27,361 ERROR [STDERR] at org.jboss.mx.loading.UnifiedClassLoader.findR
esources(UnifiedClassLoader.java:374)
17:46:27,361 ERROR [STDERR] at java.lang.ClassLoader.getResources(ClassLoade
r.java:825)
17:46:27,361 ERROR [STDERR] at com.sun.naming.internal.VersionHelper12$5.run
(VersionHelper12.java:145)
17:46:27,361 ERROR [STDERR] at java.security.AccessController.doPrivileged(N
ative Method)
17:46:27,377 ERROR [STDERR] at com.sun.naming.internal.VersionHelper12.getRe
sources(VersionHelper12.java:142)
17:46:27,377 ERROR [STDERR] at com.sun.naming.internal.ResourceManager.getAp
plicationResources(ResourceManager.java:468)
17:46:27,377 ERROR [STDERR] at com.sun.naming.internal.ResourceManager.getIn
itialEnvironment(ResourceManager.java:159)
17:46:27,377 ERROR [STDERR] at javax.naming.InitialContext.init(InitialConte
xt.java:215)
17:46:27,377 ERROR [STDERR] at javax.naming.InitialContext.<init>(InitialCon
text.java:195)
17:46:27,377 ERROR [STDERR] at com.beta.my.utils.FMScheduler.perform
(FMScheduler.java:42)
17:46:27,392 ERROR [STDERR] at org.jboss.varia.scheduler.Scheduler$Listener.
handleNotification(Scheduler.java:1263)
17:46:27,392 ERROR [STDERR] at org.jboss.mx.server.NotificationListenerProxy
.handleNotification(NotificationListenerProxy.java:69)
17:46:27,392 ERROR [STDERR] at javax.management.NotificationBroadcasterSuppo
rt.sendNotification(NotificationBroadcasterSupport.java:95)
17:46:27,392 ERROR [STDERR] at javax.management.timer.Timer.sendNotification
s(Timer.java:441)
17:46:27,392 ERROR [STDERR] at javax.management.timer.Timer.access$000(Timer
.java:31)
17:46:27,408 ERROR [STDERR] at javax.management.timer.Timer$RegisteredNotifi
cation.doRun(Timer.java:612)
17:46:27,408 ERROR [STDERR] at org.jboss.mx.util.SchedulableRunnable.run(Sch
edulableRunnable.java:164)
17:46:27,408 ERROR [STDERR] at org.jboss.mx.util.ThreadPool$Worker.run(Threa
dPool.java:225)
please help me if u have any idea,thanksHi Hamsa,
Did you also create and configure an "Execution Destination"?
You can test the Metadata destination configuration on Web Service Navigator.
On the web service navigator (http://hostname:portnumber/wsnavigator) search in the metatda destination you have created for the service you imported in web dynpro as a model. If you can find it there test it on the ws navigator.
Best regards,
Yasar -
Hot deployment of class files (non-EJB)
Also posting to the servlet newsgroup.
"Craig Ambrose" <[email protected]> wrote in message
news:[email protected]..
>
I am using WebLogic 6.1 and am interested in using auto-deployment indevelopment
mode of JSPs and class files that those JSPs rely on. I have a simpleWebLogic
application that gets deployed using the exploded directory format andwhen I
modify the JSPs or the class files that they use everything reloadsproperly and
a newly modified class file will be reloaded the next time the pageutilizing
the Java class is requested.
I have a much more complicated application (the one I am really doing workon)
and I can't get the hot deploy of the class files to take effect. The JSPswill
reload but I can't seem to cause the class loader to reload any changedclass
files. If I use the WebLogic Console and un-deploy and then re-deploy theapplication
then the class files will be reloaded, but I thought that wasn't necessaryfor
hot deployment. This complex application stores many things in the HTTPsession
context. I am wondering if that has an effect on the class loader fordependant
class files.
I'm pretty sure it is not a configuration issue as I have it working forthe simple
application. I have the application deployed under the.\config\<domainname>\applications
directory and am using the exploded directory format with the class filesalso
exploded in the WEB-INF\classes directory.
Any insights on dependancies of the hot depployment would be helpful. -
hi
i have compiled the servlet in jdeveloper and set the path to oc4j../../web-inf/classes path;after compiling the class Is it neccassary to shutdown the oc4j container;
after shutdown the container only i am seeing the effect;without shutdown the container can we see the effect;we can do it Tomcat ;Is there any facility in OC4J ;
bye
chaitanyaHi, suppose you have the servlet called JoeServlet and registered as joeservlet with an argument, say, a file joe.txt. If you want to 'hot' deploy the JoeServlet you should make sure that a) the servlet's name must be unique b) the servlet's class must be in your servlet classpath (see the properties sheet aside) c) the initial argument, say: joeargument=./joe.txt, must match the the name expected by your servlet (eg. getInitParameter("joeargument")). If you have done correctly WLS must work.
Joe
"Jayesh Patel" <[email protected]> wrote:
>
>I am trying to hot deploy a simple servlet using weblogic console.
>
>I am getting error saying that
>
>"Property change error for property "RegisterNewServlet".
>Servlet could not be loaded or instantiated"
>
>I am sure that servlet class I am trying to load is in servlet
>class path.
>
>Any idea what is going wrong here.
>
>Thanks.
>
>
>
Maybe you are looking for
-
hi gurus plssssssss let me know the certification code for MM,so that i can book for the exam. urgent
-
Hi to every one I want to know the complete set ups required in Cash Manangement Module Looking forward for further communication. Thanks and Regarads Dhan
-
What exactly does Bonjour do on windows?
i dont get it. is it only really good for sharing a printer? that's sort of weak. i am trying to set it up for my mom, so she will be able to access files on her desktop in the den when she is in her room on her laptop. with two apples this is easy t
-
Day-date placeholder syntax issues
Hi, Can someone clarify the legal syntax of the day-date placeholder. The published syntax in the OSB Reference Guide does not appear to be correct. I'm trying to script the configuration of backup schedules using the obtool 'mksched' command for a l
-
EJB Class loader and regular Java files class loader.
Hi, Is the EJB's class loader the same as a "regular" java files class loader OR weblogic has 2 class loaders, one for each??? Thanks, les.