Increasing number of class loaded. Class leak?

Hi there,
I am concern about the high number of classes loaded by one application. Using JConsole I see linear time raising in the number of classes loaded, after monitoring that for about 24 hours the number of loaded classes continues increasing (more than 100.000), while the number of unloaded classes is less than 0.5%. So far no memory leak was observed after 24 hours.
I guess there is a logical leak in the application but I don't understand why this has no effect on the memory usage.
- Do you know about the possible reasons / side effects of this ugly class leak behavior?
- I've tried to find out more info about the class loading, but it seems to be a kind of tricky to self manage the loading/unloading process.
I'd really appreciate any information/documentation/experiences.
Thanks in advance.

What makes you think there is a 'logical leak'? I'm not sure about it, but I guess something is not working fine, as the classes remain loaded and they are not unloaded. So, a logical leak preventing the classes to be unloaded is not hard to believe. Maybe (and hopefully) I am wrong
The number of loaded classes? How many classes do you expect to be loaded vs the number of those that are actually loaded? I don't expect any specific number, what I expect is that the number of loaded classes does not increase linearly with the time. I mean, I expect a similar graph as the memory usage :)
Probably I am wrong but for me it does not seem normal that the classes are never unloaded ???

Similar Messages

  • JMS: how to make child class loader (classes) available to parent loader

    Hi,
    Environment: oc4j 10.1.3.1 on SunOS 5.10
    Our application (set up in an instance other than "home") sets up a JMS receiver, everything works fine to the point where the receiver receives the message but the message deserialization fails with the below error. Looks like the deserializer (loaded by the parent classloader sytem.root) is not able to load the class from its child code-source (one of my application libraries in WEB-INF/lib) I have seen a lot of documentation on how libraries can be shared between applications, but I haven't come across any that is related to my problem here. I have even tried adding the library in question to bootclasspath that did not help either.
    How to get around this problem.
    Thanks in advance.
    Caused by: java.io.InvalidClassException: toSerializable
    at com.evermind.server.jms.JMSUtils.toSerializable(JMSUtils.java:1374)
    at com.evermind.server.jms.JMSUtils.toSerializable(JMSUtils.java:1395)
    at com.evermind.server.jms.EvermindObjectMessage.getObject(EvermindObjectMessage.java:114)
    ... 4 more
    Caused by: oracle.classloader.util.AnnotatedClassNotFoundException:
    Missing class: com.deploy.atao.message.client.Message
    Dependent class: com.evermind.io.ClassLoaderObjectInputStream
    Loader: oc4j:10.1.3
    Code-Source: /export/home/oracle10as/product/10.1.3.1/OracleAS_3/j2ee/home/lib/oc4j-internal.jar
    Configuration: <code-source> in META-INF/boot.xml in /export/home/oracle10as/product/10.1.3.1/OracleAS_3/j2ee/
    home/oc4j.jar
    This load was initiated at system.root:0.0.0 using the Class.forName() method.
    The missing class is available from the following locations:
    ......( WEB-INF/lib/ directory in /export/home/oracle10as/product/10.1.3.1/OracleAS_3/j2ee/CI11TRY2/ap
    plications/dev/ci/WEB-INF/lib)
    This code-source is available in loader dev.web.ci:0.0.0. This is a child of the dependent loader system.root:0.0.0.
    at oracle.classloader.PolicyClassLoader.handleClassNotFound(PolicyClassLoader.java:2078)
    at oracle.classloader.PolicyClassLoader.internalLoadClass(PolicyClassLoader.java:1679)
    at oracle.classloader.PolicyClassLoader.loadClass(PolicyClassLoader.java:1635)
    at oracle.classloader.PolicyClassLoader.loadClass(PolicyClassLoader.java:1620)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:219)
    at com.evermind.server.ApplicationContextClassLoader.findClass(ApplicationContextClassLoader.java:23)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:219)
    at com.evermind.io.ClassLoaderObjectInputStream.resolveClass(ClassLoaderObjectInputStream.java:33)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1513)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1626)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:322)
    at com.evermind.server.jms.JMSUtils.toSerializable(JMSUtils.java:1364)
    ... 6 more

    Resolved by adding the application library in question to config/application.xml as <library path="<relative path to the library>"/> so the library has instance scope is accessible by the sytem.root loader.

  • Windows Vista "java.lang.ClassNotFoundException: loader.class" error.

    Hello,
    Whenever I try to visit websites that have a java applet I get a dialogue with the following error:
    java.lang.ClassNotFoundException: loader.class.
    I have tried uninstalling/reinstalling java, and also adding the -xmx and -xms parameters for java applet runtime setting in control panel with various values from 128m to 1g.
    The applet at http://www.java.com/en/download/installed.jsp?detect=jre&try=1 does work and reports "CONGRATULATIONS, you have the Latest version of Java!", "Java Runtime Version 1.6.0."
    I have been experiencing this problem ever since I installed Windows Vista Home Premium a day or two ago. Any help is appreciated.
    Regards
    Greg
    =====================================
    Full output from Java Console
    =====================================
    Java Plug-in 1.6.0
    Using JRE version 1.6.0 Java HotSpot(TM) Client VM
    User home directory = C:\Users\Greg Taylor
    c: clear console window
    f: finalize objects on finalization queue
    g: garbage collect
    h: display this help message
    l: dump classloader list
    m: print memory usage
    o: trigger logging
    p: reload proxy configuration
    q: hide console
    r: reload policy configuration
    s: dump system and deployment properties
    t: dump thread list
    v: dump thread stack
    x: clear classloader cache
    0-5: set trace level to <n>
    load: class loader.class not found.
    java.lang.ClassNotFoundException: loader.class
         at sun.applet.AppletClassLoader.findClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadCode(Unknown Source)
         at sun.applet.AppletPanel.createApplet(Unknown Source)
         at sun.plugin.AppletViewer.createApplet(Unknown Source)
         at sun.applet.AppletPanel.runLoader(Unknown Source)
         at sun.applet.AppletPanel.run(Unknown Source)
         at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: open HTTP connection failed.
         at sun.applet.AppletClassLoader.getBytes(Unknown Source)
         at sun.applet.AppletClassLoader.access$100(Unknown Source)
         at sun.applet.AppletClassLoader$1.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         ... 10 more
    java.lang.ClassNotFoundException: loader.class
         at sun.applet.AppletClassLoader.findClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadCode(Unknown Source)
         at sun.applet.AppletPanel.createApplet(Unknown Source)
         at sun.plugin.AppletViewer.createApplet(Unknown Source)
         at sun.applet.AppletPanel.runLoader(Unknown Source)
         at sun.applet.AppletPanel.run(Unknown Source)
         at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: open HTTP connection failed.
         at sun.applet.AppletClassLoader.getBytes(Unknown Source)
         at sun.applet.AppletClassLoader.access$100(Unknown Source)
         at sun.applet.AppletClassLoader$1.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         ... 10 more

    ive been having the same problems, if youve resolved this problem, please tell me.
    all help is appreciated

  • Custom class loader and local class accessing local variable

    I have written my own class loader to solve a specific problem. It
    seemed to work very well, but then I started noticing strange errors in
    the log output. Here is an example. Some of the names are in Norwegian,
    but they are not important to this discussion. JavaNotis.Oppstart is the
    name of my class loader class.
    java.lang.ClassFormatError: JavaNotis/SendMeldingDialog$1 (Illegal
    variable name " val$indeks")
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:431)
    at JavaNotis.Oppstart.findClass(Oppstart.java:193)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:299)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315)
    at JavaNotis.SendMeldingDialog.init(SendMeldingDialog.java:78)
    at JavaNotis.SendMeldingDialog.<init>(SendMeldingDialog.java:54)
    at JavaNotis.Notistavle.sendMelding(Notistavle.java:542)
    at JavaNotis.Notistavle.access$900(Notistavle.java:59)
    at JavaNotis.Notistavle$27.actionPerformed(Notistavle.java:427)
    JavaNotis/SendMeldingDialog$1 is a local class in the method
    JavaNotis.SendMeldingDialog.init, and it's accessing a final local
    variable named indeks. The compiler automatically turns this into a
    variable in the inner class called val$indeks. But look at the error
    message, there is an extra space in front of the variable name.
    This error doesn't occur when I don't use my custom class loader and
    instead load the classes through the default class loader in the JVM.
    Here is my class loading code. Is there something wrong with it?
    Again some Norwegian words, but it should still be understandable I hope.
         protected Class findClass(String name) throws ClassNotFoundException
             byte[] b = loadClassData(name);
             return defineClass(name, b, 0, b.length);
         private byte[] loadClassData(String name) throws ClassNotFoundException
             ByteArrayOutputStream ut = null;
             InputStream inn = null;
             try
                 JarEntry klasse = arkiv.getJarEntry(name.replace('.', '/')
    + ".class");
                 if (klasse == null)
                    throw new ClassNotFoundException("Finner ikke klassen "
    + NOTISKLASSE);
                 inn = arkiv.getInputStream(klasse);
                 ut = new ByteArrayOutputStream(inn.available());
                 byte[] kode = new byte[4096];
                 int antall = inn.read(kode);
                 while (antall > 0)
                     ut.write(kode, 0, antall);
                     antall = inn.read(kode);
                 return ut.toByteArray();
             catch (IOException ioe)
                 throw new RuntimeException(ioe.getMessage());
             finally
                 try
                    if (inn != null)
                       inn.close();
                    if (ut != null)
                       ut.close();
                 catch (IOException ioe)
         }I hope somebody can help. :-)
    Regards,
    Knut St�re

    I'm not quite sure how Java handles local classes defined within a method, but from this example it seems as if the local class isn't loaded until it is actually needed, that is when the method is called, which seems like a good thing to me.
    The parent class is already loaded as you can see. It is the loading of the inner class that fails.
    But maybe there is something I've forgotten in my loading code? I know in the "early days" you had to do a lot more to load a class, but I think all that is taken care of by the superclass of my classloader now. All I have to do is provide the raw data of the class. Isn't it so?

  • Oc4j class-loading-heirarchy - enabling "search-local-classes-first" option

    Guys,
    I need some assistance with regards to oc4j class-loading hierarchy. Would appreciate some feedback on this...
    Let me give you a bit of context first.
    Basically we have 3 war modules which we initially were deployed separately on oc4j (transparently deployed by oc4j as ear). Now all of a sudden we have come to the need of instead bundling all the wars in one ear. The problem i started seeing is with respect to the output logs for the application, which was one per war modules initially (this was not clutter everything in one single log file and instead have one per deploy-able unit). The way this was implemented is that we had a log4j.properties bundled with each war with the output-file configuration, and since these 3 wars were deployed separately, the ear class-loader for each application would find one log4j.properties within each, and hence output-logs were generated as expected.
    BUT now all of a sudden as we have changed the whole deployment structure, i.e. one EAR, all the application log-outputs are going to one single log file (instead of one for each war). My immediate impression was setting the "search-local-classes-first" would resolve this issue, since then the "web-module-class-loader" (one for each war) would come into play (which i believe doesn't otherwise) and would load/search for the resources/classes first (log4j.properties in our case) from the web-module (both in WEB-INF/lib and WEB-INF/classes folder) and if not found, only then it would give the job to the parent class-loader, which would be the ear-class-loader. But it doesnt seem like its working like that, since even after enabling this option, all logs are going to one log-output file, based on whichever war-module/log4j.properties is loaded first.
    Thanks in advance and Regards,
    Farhan.
    Edited by: FarhanS on Nov 3, 2008 12:36 PM

    Guys, i need some input here....
    I turned on the class-loading trace and found out as to what is going on...but still wondering as to whats the reason for this behavior...
    So basically browsing through the trace, gave me the following important segments (as below with my comments)....
    1) Firstly, as the class-loading trace below, the log4j.jar is loaded up from the ear/lib directory (and hence by the ear-class-loader) and as it says the one in the web-inf/lib is ignored....Wonder why it picks up the one from ear/lib directory WHEN i have set the search-local-classes-first to "true", isn't the very purpose of the attribute to delegate the class-loading to the parent class-loader IFF the same is not found locally...
    Code-source /oracle_apps/j2ee/portal/applications/wes-ear/wes-wicket-1.3.X-SNAPSHOT/WEB-INF/lib/log4j-1.2.15.jar (from WEB-INF/lib/ directory in /oracle_apps/j2ee/portal/applications/wes-ear/wes-wicket-1.3.X-SNAPSHOT/WEB-INF/lib)
    has been ignored. It is a copy of /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib), which is already visible in the search path of
    loader wes-ear.web.wes-wicket-1.3.X-SNAPSHOT:0.0.0. 2) Now on the other hand as you would see from the log-excerpts below, the log4j.properties resource file (with the log-output-file-name and all) is picked up from the very web-module class-loader, but as you would notice further, the log4j classes are initialized by the ear-loader itself with which the log4j classes are visible to all the other war-modules and hence don't even require re-initializing the log4j.properties...
    ====== THE RESOURCE CORRECTLY LOCATED BY THE WEB-CLASS-LOADER ======
    Resource found: log4j.properties. Loader: wes-ear.web.wes-wicket-1.3.X-SNAPSHOT:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/wes-wicket-1.3.X-SNAPSHOT/WEB-INF/classes/
    (from WEB-INF/classes/ in /oracle_apps/j2ee/portal/applications/wes-ear/wes-wicket-1.3.X-SNAPSHOT/WEB-INF/classes)
    === ALL THE Log4j CLASSES BELOW ARE BEING INITIALIZED/LOADED BY THE EAR-CLASS-LOADER =====
    Class found: java.net.URL. Initiating loader: wes-ear.root:0.0.0. Defining loader: jre.bootstrap:1.5.0_06. Source: jre bootstrap
    Class to be defined: org.apache.log4j.PropertyConfigurator (12024 bytes). Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class found: org.apache.log4j.PropertyConfigurator. Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class to be defined: org.apache.log4j.helpers.FileWatchdog (1875 bytes). Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class found: org.apache.log4j.helpers.FileWatchdog. Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class to be defined: org.apache.log4j.PropertyWatchdog (753 bytes). Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class found: org.apache.log4j.PropertyWatchdog. Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class found: java.io.InputStream. Initiating loader: wes-ear.root:0.0.0. Defining loader: jre.bootstrap:1.5.0_06. Source: jre bootstrap
    Class found: java.io.FileInputStream. Initiating loader: wes-ear.root:0.0.0. Defining loader: jre.bootstrap:1.5.0_06. Source: jre bootstrap
    Class found: java.util.Properties. Initiating loader: wes-ear.root:0.0.0. Defining loader: jre.bootstrap:1.5.0_06. Source: jre bootstrap
    Class found: java.util.StringTokenizer. Initiating loader: wes-ear.root:0.0.0. Defining loader: jre.bootstrap:1.5.0_06. Source: jre bootstrap
    Class to be defined: org.apache.log4j.Appender (676 bytes). Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class found: org.apache.log4j.Appender. Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class to be defined: org.apache.log4j.DailyRollingFileAppender (5724 bytes). Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)
    Class to be defined: org.apache.log4j.FileAppender (4764 bytes). Loader: wes-ear.root:0.0.0. Source: /oracle_apps/j2ee/portal/applications/wes-ear/lib/log4j-1.2.15.jar (from application.xml <library-directory> in /oracle_apps/j2ee/portal/applications/wes-ear/lib)Thanks in advance and Regards,
    Farhan.
    Edited by: FarhanS on Nov 4, 2008 2:43 PM
    Edited by: FarhanS on Nov 4, 2008 2:47 PM

  • Class loading exceptions while importing Spring, EHCache in BPMStudio 10g

    Hi,
    We are facing Class loading / Class NOt Found exceptions while importing Spring.jar and EHCache.jar in BPMStudio 10g Catalog and BPM Enterprise Server 10g. Java classes are bundled in an external JAR file. This JAR is referencing Spring and EHCache library. This Java component is invoked from an automatic activity in BPM process. Task execution is failing in BPM workspace in Studio and Enterprise server.
    We tried copying the JARS in the following folders. But nothing is working.
    D:\OraBPMStudioHome\lib
    D:\OraBPMStudioHome\ext
    D:\OraBPMStudioHome\webapps\workspace\WEB-INF\lib
    D:\OraBPMStudioHome\webapps\workspace\WEB-INF\classes
    <Enterprise_Server_WL_Home>/server/<Domain_Lib>

    Ariel,
    You are right. I have already added the JARS as external resource. I am getting the errors while cataloging Java component in BPM Studio in a Catalog Module. I am able to add Log4J Jar as an external resource and catalog the resource as java component. In case one JAR has a dependency on another JAR it is failing to catalog. In Eclipse or Weblogic Workshop 10g, we can add multiple JARS in the Project classpath and it works fine. In case of BPM Studio, we are getting Class Loading or ClassNotFound errors while cataloging multiple JAR files
    Thanks
    Subhabrata

  • Help Needed on a similar but not same class loader problem

    Hi,
    Please help...
    There is a ClassLoader called MyLoader that overrides default findClass() method to decrypt already encrypted class files available in a separate jar file.
    MyClass also contains a public static method launchMe() method that starts off with a call similar to loadClass("ApplicationMainClass");
    The MyLoader class is also encrypted
    I modified the default launcher (c) code to:
    First find the encrypted MyLoader file then decrypt it and create a byte array.
    The byte array, along with the system class loader and other required arguments, is passed to DefineClass native method (defined in jvm.dll)
    Note: The system class loader class has been instantiated using static method ClassLoader.getSystemClassLoader() through Java's invocation API.
    The DefineClass succeeds and I'm able to instantiate MyLoader and later call launchMe() to start application.
    Now i come to the problem:
    I'm not able to use any class other that those in rt.jar (i.e.standard classes) in MyLoader class. I end up with a runtime error ClassDefNotFoundError while trying to load any third party jar.
    The classes i need are present in class path and also in the local jre's ext that i use to launch my app.
    Although i can avoid using third party jar in MyLoader but if there is any way...
    Piyush

    make sure that third party jar resides in your library.....
    or else put rt.jar and external jars under same folder
    this is matter of path.... no else than this.......
    cheers
    Rajesh42

  • What types of problems stem from high number of loaded classes?

    Currently we are in the process of testing our code for long-ish periods of time, between 4 hours and 24 hours+ non stop. The code is not interactive/user based. I first noticed that our garbage collection times were very high (about 15-25% of our total processing time). I then looked at loaded classes and there is a pretty steady rise over team of loaded classes. At the time of start up it is around 6-7k. After appproximately 4 hours its up around 25k loaded classes. Only 35 or so classes have been unloaded over this time. I'm wondering if the high number of loaded classes occurs because objects aren't fully dereferenced but then when a new object is created it reloads the class. My knowledge of class loading is fairly limited. Any help would be appreciated. Also, if you need more info let me know.
    Heap Size: ~2GB
    CMSPermGenSweepingEnabled
    CMSClassUnloadingEnabled

    Take a look at this example and the output:
    public class Example {
          * @param args
         public static void main(String[] args) {
              StaticBlocks a = new StaticBlocks();
              StaticBlocks b = new StaticBlocks();
              a = new StaticBlocks();
    class StaticBlocks {
         static {
              System.out.println("A static init block. Only happens when class is first loaded.");
              System.out.println("\tInstance init block. Happens every time a class is instantiated.");
         StaticBlocks(){
              System.out.println("\tYou instantiated a class!");
    }Output:
    A static init block. Only happens when class is first loaded.
         Instance init block. Happens every time a class is instantiated.
         You instantiated a class!
         Instance init block. Happens every time a class is instantiated.
         You instantiated a class!
         Instance init block. Happens every time a class is instantiated.
         You instantiated a class!I'm really not sure where to go from here... hopefully someone else that knows the JVM better can provide some insight.
    Take a look at this link. It gives some details on class loading... might help you out a little.
    [http://onjava.com/pub/a/onjava/2005/01/26/classloading.html?page=1|http://onjava.com/pub/a/onjava/2005/01/26/classloading.html?page=1]
    Edited by: mikeyfreake on Jul 29, 2009 9:40 AM

  • Class Loader Hierarchy in Weblogic 7.0

    I have read the BEA documentation on the class loader hierarchy in Weblogic Server,
    and I have some questions regarding some behavior I am seeing.
    I am running Weblogic Server 7.0.
    I have an ear file that contains 3 web apps (wars) and several utility jars. The
    web apps' manifests contain the Class-Path entry for the utility jars. My understanding
    of this is that each web app SHOULD have its own class loader. Also, the utility
    jars will be scoped in a separate class loader and WILL NOT have visibility to
    the web app classes. The web app classes should have visibility to the utility
    jars.
    Is this correct????
    I added a static segment of code in each web app and printed the class loader
    for each servlet when it was loaded. I also printed the class loader from a class
    that is DEFINITELY contained in one of the utility jars. Here is the result:
    Utility Class ClassLoader: sun.misc.Launcher$AppClassLoader@b9d04 Utility Class
    Parent ClassLoader: sun.misc.Launcher$ExtClassLoader@71732b
    Servlet 1 ClassLoader: sun.misc.Launcher$AppClassLoader@b9d04 Servlet 1 Parent
    ClassLoader: sun.misc.Launcher$ExtClassLoader@71732b
    Servlet 2 ClassLoader: sun.misc.Launcher$AppClassLoader@b9d04 Servlet 2 Parent
    ClassLoader: sun.misc.Launcher$ExtClassLoader@71732b
    I'm a little confused.... I expected to see 3 different class loaders (i.e. one
    for each class above). I believe the above printout says that all 3 classes are
    being loaded by the SAME class loader instance (Launcher$AppClassLoader@b9d04).
    Am I interpreting this correctly? If so, what's going on?

    I rechecked the classpath for the user that starts Weblogic, and in the classpath
    I found the project "src" directory (must have missed it earlier). When we did
    our build, the classes are placed in the src structure then copied to the build
    area. That's the reason I was not seeing the appropriate class loader hierarchy.
    Thanks for all of the comments.
    "Sanjeev Chopra" <[email protected]> wrote:
    >
    "Mark Cotherman" <[email protected]> wrote in message
    news:[email protected]...
    Thanks for your comments again Mark. I'm just trying to get a goodhandle
    on how
    this is working.
    I'll assume that somehow my web app classes are being loaded into theroot
    classloader.
    The next question is... why??Just to be sure - is there any way these classes are sneaking into the
    system classpath ?
    My ear file contains the following:
    a.war
    b.war
    c.war
    lib/util1.jar
    lib/util2.jar
    lib/util3.jar
    lib/util4.jar
    The manifest in all three wars reference all util jars. This ear deployssuccessfully
    on Weblogic with no errors.
    How could these separate servlets (one in each war) not have seperateclass loaders
    seperate from the root where the utils should reside. I don't thinkthat
    I have
    any control over where Weblogic loads the war classes, or do I?
    See comments below....
    Mark Spotswood <[email protected]> wrote:
    Mark Cotherman wrote:
    Thanks for the follow-up.
    I want to make sure I follow what you are saying. All classes in
    the
    manifest
    Class-Path of WARs are exported to the parent classloader.That's right.
    To me this is the correct behavior since the manifest Class-Path
    is
    meant to provide
    a way to share common utility classes among several web apps. AllEJB jars and
    manifest Class-Path entries should be loaded by the same class loader.Its a way to share class definitions, but not necessarilly class
    instances. I don't think that a web application should be extending
    the classpath of its parent's classloader. This leads to namespace
    problems as well as reloadability issues.
    Ok, you lost me here. Shouldn't delegation handle the namespacecollisions??
    If the web app class loader has a class definition (webapp:com.xyz.ClassA) with
    exactly the same name in the same package as the root class loader(rootloader:
    com.xyz.ClassA), I thought the web app would use (delegate loading)the
    class
    definition from the root class loader when PreferWebInf is set to false.
    Isn't this why the PreferWebInf attribute, when set to true, can causeClassCastExceptions??
    The web app when creating an instance of (webapp: com.xyz.ClassA)from
    the web
    app class loader can potentially pass a reference to this instanceto a
    class
    instance loaded from the root loader. The root class loader has adifferent class
    definition for ClassA.
    REALLY what makes since is that all common jar files be defined
    in
    the manifest
    Class-Path OF THE ear FILE (if the WAR(s) are in an ear). These
    jar
    files should
    then be loaded by the same class loader as the EJB jars. There shouldbe no need
    for the WARs to have any reference to the utility jars since the
    EJB
    class loader
    is the parent of the WAR class loaders.The ear file doesn't have a manifest classpath, but what you are getting
    at makes sense. If you add a manifest to any EJBs in your app, theall
    webapps (as well as all other EJBs) will be able to see it, sincewith
    our structure, EJBs are loaded into the application's root classloader.
    My problem is that the ACTUAL SERVLET classes are NOT being loadedby a separate
    class loader from the EJB and common jar class loader. This is
    completely
    against
    what is being said in the Weblogic documentation. The Manifest
    Class-Path
    should
    have nothing to do with where the classes that reside in
    WEB-INF/classes
    of my
    servlet are loaded.Classloaders will ask their parent for the class first before loading
    it
    themselves. So if the parent classloader somehow has visibility to
    classes that your webpapp references, then it will get loaded by the
    parent classloader.
    I am in the middle of migrating an app from an older version of
    Weblogic,
    and
    it would be helpful to have the ACTUAL class loading hierarchy welldocumented.
    The basic hierarchy is all EJBs are in a root shared classloader and
    each web application is loaded by a classloader that is a child of
    that root.
    Again, am I missing something here???My suspicion is that somehow these servlets are in the classpath ofthe
    root classloader, so when the webapp classloaders delegate to thatone,
    it will come up with the class.
    mark
    Mark Spotswood <[email protected]> wrote:
    I believe what you are seeing is a bug in the servlet container.
    The classloader organization is what you expect, but each webapp
    is exporting the classpath information from its manifest to the
    classloader above its classloader (which is common to all
    three webapps) rather than to its own classloader. So because
    of the delegation that happens with classloading, the common
    parent classloader is the one that loads the class.
    I believe that this behavior exists as an attempt to avoid
    ClassCastExceptions, but I don't think that it is the right
    solution to this problem. In our 8.1 release, this behavior
    has been changed. That is, web applications no longer export
    manifest classpath information to the parent of their classloader.
    This change has not been ported back to the 7.x line, but a bug
    report has been created (CR099889). You should be able to follow
    up with support with this CR number.
    mark
    Mark Cotherman wrote:
    I have read the BEA documentation on the class loader hierarchy
    in
    Weblogic Server,
    and I have some questions regarding some behavior I am seeing.
    I am running Weblogic Server 7.0.
    I have an ear file that contains 3 web apps (wars) and several
    utility
    jars. The
    web apps' manifests contain the Class-Path entry for the utility
    jars.
    My understanding
    of this is that each web app SHOULD have its own class loader.
    Also,
    the utility
    jars will be scoped in a separate class loader and WILL NOT have
    visibility
    to
    the web app classes. The web app classes should have visibility
    to
    the utility
    jars.
    Is this correct????
    I added a static segment of code in each web app and printed the
    class
    loader
    for each servlet when it was loaded. I also printed the class loaderfrom a class
    that is DEFINITELY contained in one of the utility jars. Here is
    the
    result:
    Utility Class ClassLoader: sun.misc.Launcher$AppClassLoader@b9d04
    Utility
    Class
    Parent ClassLoader: sun.misc.Launcher$ExtClassLoader@71732b
    Servlet 1 ClassLoader: sun.misc.Launcher$AppClassLoader@b9d04 Servlet1 Parent
    ClassLoader: sun.misc.Launcher$ExtClassLoader@71732b
    Servlet 2 ClassLoader: sun.misc.Launcher$AppClassLoader@b9d04 Servlet2 Parent
    ClassLoader: sun.misc.Launcher$ExtClassLoader@71732b
    I'm a little confused.... I expected to see 3 different class loaders(i.e. one
    for each class above). I believe the above printout says that all
    3
    classes are
    being loaded by the SAME class loader instance
    (Launcher$AppClassLoader@b9d04).
    Am I interpreting this correctly? If so, what's going on?

  • Loading class file stored in BLOB field

    - I am able to store and retrieve Java files and XML files in and from a BLOB field, but when I store a class file and try and load it using Class Loader, it us unable to load the class. The size of the class file increases by 1 byte when I retrieve it from the database. Is this some security feature by the JVM? Is it not possible to store, retrieve and load a class file from a database table?
    Thanks
    Harini

    Hi,
    First, I would suggest you use fiddler (http://www.telerik.com/fiddler) to compare these two different client requests, second, please try to use Azure Storage Explorer (http://azurestorageexplorer.codeplex.com/) to do
    this instead of the Azure Web Storage Explorer. 
    Best Regards,
    Jambor
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Error in adding attachment to the workitem. load:class Query.class not foun

    Hi,
    We are using WebGui to access the Business Workplace(SBWP transaction) through Portal. For any work item, when i try to import a file from the local PC, i get a screen with the header -"Enter Some FIle attributes". Text displayed in the screen is "Please wait. You will be forwarded automatically. This page had to be included for techincal reasons". And i am struck in that screen. I believe a java popup winddow should come up at this point to select the PC File but it never happened. The screen also has a status message "
    Loading Java applet failed. Applet Query.class not inited ".
    WHen i look at the java console, i find the following error trace. Please let me know if anybody experienced this problem before and how to fix it. Thanks for the help.
    Trace ---
    load: class Query.class not found.
    java.lang.ClassNotFoundException: Query.class
         at sun.applet.AppletClassLoader.findClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadClass(Unknown Source)
         at java.lang.ClassLoader.loadClass(Unknown Source)
         at sun.applet.AppletClassLoader.loadCode(Unknown Source)
         at sun.applet.AppletPanel.createApplet(Unknown Source)
         at sun.plugin.AppletViewer.createApplet(Unknown Source)
         at sun.applet.AppletPanel.runLoader(Unknown Source)
         at sun.applet.AppletPanel.run(Unknown Source)
         at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: open HTTP connection failed.
         at sun.applet.AppletClassLoader.getBytes(Unknown Source)
         at sun.applet.AppletClassLoader.access$100(Unknown Source)
         at sun.applet.AppletClassLoader$1.run(Unknown Source)
         at java.security.AccessController.doPrivileged(Native Method)
         ... 10 more
    Regards
    hari

    Hi all,
    I have encountered same problem in ITS 6.20.
    Query.class is packed in ws.jar which is stored at C:\Inetpub\wwwroot\<SID>\sap\its\mimes\webgui\99\applets and C:\Inetpub\wwwroot\<SID>\sap\its\mimes\webgui\2002\applets in ITS server.
    I increased the trace level to 3 in the Java console to inevestigate the problem further.
    == Java console (Trace level 3 ) ===
    network: cache entry not found URL: https://hostname.domain.co.jp:443/sap/its/mimes/webgui/2002/applets/ws.jar、version: null
    network: Connect to https://hostname.domain.co.jp:443/sap/its/mimes/webgui/2002/applets/ws.jar (Proxy=DIRECT)
    network: Connect to http://hostname.domain.co.jp:443/  (Proxy=DIRECT)
    java.net.ConnectException: Connection refused: connect
    load: class Query.class not found.
    java.lang.ClassNotFoundException: Query.class
    ==========================
    Then I found out that when system tried to load class Qery.class the connection to ITS was refused becase the incorrect protocol ( https ) was chosen.  In my case, SSL was not setup, therefore protocol must be http.
    I activated http by changing the configuration file for WGate in C:\Program Files\SAP\ITS\6.20\config\ ItsRegistryWGATE.xml
    After that, I restarted the WGate by accessing to http://hoostname.domain.co.jp:port/scripts/wgate/wgate-restart to activate the configuration.
    And also I restarted the AGate by restarting the Windows Service "SAP ITS Manager - <SID>".
    Anyway, the html (BHTML) file that displays the message below is stored at C:\Program Files\SAP\ITS\620\templates\system\dm\itsdoc.html
    "Please Wait. You will be forwarded automatically"
    "This page has been loaded due to technical Reasons"
    Best regards,
    Akira

  • Can I set Boot class loader or system class loader?

    In my application, there are classes in a jar files, all these files in the jar need be loaded by a ClassLoader in my application.
    And the classes out of jar do not need the ClassLoader to load. the structure is like :
    -----myapp.jar ------in this jar, all classes need be loaded by a specified ClassLoader
    |---anoapp ------classes in this package, is normal classes
    |-------|----a.class
    |----b.class
    | ----other classes
    but my a.class need to access a class in myapp.jar, so I load the class use my ClassLoader, but there still occur
    **********ClassFormatError : bad magic number**************
    I print the classloader in a.class
    +---- System ClassLoader is : com.sun.misc.Launcher$AppClassLoader    ------------it is not my ClassLoader
    +---- a.class.getClassLoader is same as System ClassLoader    -------------------it still is not my ClassLoader
    +---- Thread.currentThread().getContextClassLoader          ------------------ it is my ClassLoader
    So I think when I access class in myapp.jar, it will loaded by System ClassLoader or Bootstrap ClassLoader, if I can set one these two classloader as my ClassLoader, it maybe not occur the Error,
    But There are not obvious method in System or Runtime etc.
    1. So can Set System Classloader or Bootstrap ClassLoader?
    2. If not, How can solve my problem?
    Thands in advanced!

    **********ClassFormatError : bad magic number**************If you get that error, then no classloader will help you. This is a problem with your running code meant for a newer version of the Virtual Machine in an older version.
    Looks like you're compiling the code with a recent JDK (1.4.x?), but running with an older VM. Try just typing "java -version" and see what it prints.
    This should just be a matter of running with the right VM. If this is an applet you're trying to run inside the browser, make sure that the browser is using the right VM. Run the "Java Control Panel" and select the correct version.

  • Dynamic Class Loading (RMI)

    Hi,
    i have my rmi server, implementing objects,stubs and skeleton classes deployed in my Tomcat server and they are stored under the tomcat root folder.
    In anoather jvm iam trying to load the classes thru the below code.
    java -Djava.rmi.server.codebase=http://ssd8/tomcat-3.2.4/install_dir/webapps/ROOT/WEB-INF/rmicode stockMarketClient
    ssd8 is the hostname(machine) which contains all my rmi server files.
    and stockmarketclient is my rmi client.
    Iam getting the java.lang.noclassdeffound error.
    what may be the problem???
    Should i have the security policy file in the client machine.

    Please Do tell me if any of the following worked I'll be greatly obliged
    1) Try this
    java -Djava.rmi.server.codebase=http://servername/dir1/dir2/ RMIServer
    This / thing at the end of the URL is very important
    2) This is how I did it just Today
    Dynamic Class Loading Using RMI
         Server Side
    1) Main Interface
    2) Implementing Class
    3) Stub & Skel                    (RMI Server & Web Server)
    4) All Other Classes used by the Server
         Web Server Side
    1) Main Interface
    2) Stub & Skel                    (RMI Server & Web Server)
    3) All Other Classes (not Main Client Class)
         Client Side
    1) Main Interface
    2) Main Client Class
    3) Stubs
    4) Security Manager
         RUNNING
    SERVER
         java DataServerImpl
    CLIENT
         java DataClient xyz
    Note
    Make Calls as follows
    System.setSecurityManager(new LaxSecurityManager());
    DataServer server = (DataServer) Naming.lookup("rmi://localhost:1099/DataServer");
    Runnable r = (Runnable)server.getNewClass();
    r.run();
    DON'T make Calls as follows
    System.setSecurityManager(new LaxSecurityManager());
    DataServer server = (DataServer) Naming.lookup("rmi://localhost:1099/DataServer");
    NewClass obj = server.getNewClass();
    obj.run();
    if done as above provide the Class NewClass to the Client as well ( whole purpose defeated)
    Code
         // SecurityManager
    import java.rmi.*;
    import java.security.*;
    public class LaxSecurityManager extends RMISecurityManager
         // All Checks are routed through this method
         public void checkPermission(Permission p)
              // do nothing
         // Main Interface
    import java.rmi.*;
    public interface DataServer extends Remote
         public boolean login(String usr_name,char[] pass_wrd) throws RemoteException;
         public Object getNewClass() throws RemoteException;
         // Main Server
    import java.rmi.*;
    import java.rmi.server.*;
    import java.rmi.registry.*;
    public class DataServerImpl /*extends UnicastRemoteObject*/ implements DataServer
         static
              try
                   LocateRegistry.createRegistry(1099);
              catch(Exception e)
                   System.err.println("Static " + e);
         public boolean login(String usr_name,char[] pass_wd) throws RemoteException
              System.out.println("Welcome " + usr_name);
              if( pass_wd == null || pass_wd.length == 0 || pass_wd.length > 10 )
                   return false;
              return true;
         public Object getNewClass() throws RemoteException
              System.out.println("Returning New Class");
              return new NewClass();
         public DataServerImpl() throws RemoteException
              try
                   System.setProperty("java.rmi.server.codebase","http://localhost:8080/");
                   UnicastRemoteObject.exportObject(this);
                   Naming.rebind("DataServer",this);
              catch(java.net.MalformedURLException e)
                   System.err.println("DataServerImpl " + e);
                   return;
              System.out.println("Server Registered");
         public static void main(String[] args) throws Exception
              new DataServerImpl();
         // Class Moving Around the Network
    public class NewClass implements java.io.Serializable,Runnable
         int num;
         public void run()
              System.out.println("Start the Server with Number = " + num);
         public NewClass()
              num = (int)(Math.random()*1000);
         public String toString()
              return num + "";
         // Client
    import java.rmi.*;
    public class DataClient
         public static void main(String[] args) throws Exception
              System.setSecurityManager(new LaxSecurityManager());
              String pass = new String();
              if(args.length == 0)
                   System.err.println("usage: java DataClient PassWord");
                   System.exit(1);
              else
                   pass = args[0];
              DataServer server = (DataServer) Naming.lookup("rmi://localhost:1099/DataServer");
              Runnable r = (Runnable)server.getNewClass();
              r.run();
    All the Best

  • Seemingly random errors (Class Loading)

    Hi,
    I wonder if anyone out there could help me or point me in the right direction to solve this problem im having.
    For a Uni project I am writing a Java application that takes three components stored in seperate Jar files (GUI, AI, and Model) dynamically from user defined locations by a central loading class.
    eg GUIAddress = "c:/java/guis/gui.jar"
    Each has a loading class defined in a MANIFEST.MF file within each Jar file and these are in turn defined by interfaces within my central loading program.
    I have set it out like this to allow me to quickly test out different components without changing the main structure of the program.
    The problem im having is that I keep getting different ClassFormatErrors depending on what I have changed. Errors include:
    Local variable name has bad constant pool index
    Extra bytes at the end of the class file
    Code segment has wrong length
    Illegal constant pool index
    Code of a method has length 0All these errors are produced with the same compiler (JRE1.4.2) and with minimal changes to the source code.
    For example I get the program to a stage where it works then add the un-used constant to a classprivate int foobar = 10; recompile and reload and i get the error Extra bytes at the end of the class file if I take it out again recompile and rerun and alls better.
    Now to me that one line shouldnt make a differene to the program in any significant way. But anyway thats just a small example to show you what my problem is.
    These problems started when i made a class Span (http://rex.homeip.net/~matt/java/gui/src/gui/graphs/Span.java) which as you can see does nothing special, but when i use it from another class (http://rex.homeip.net/~matt/java/gui/src/gui/GraphViewer.java) all hell breaks loose. Now i know the class is being loaded and methods can be called from it (line 84) but if i try to call setSpan() then i get the error Local variable name has bad constant pool indexIf anyone has any clues please let me know, im getting sick of going round in circles.
    Cheers in advance.
    Matt
    links
    Main loading class: http://rex.homeip.net/~matt/java/loader/src/loader/Loader.java
    Class Loader: http://rex.homeip.net/~matt/java/loader/src/loader/setup/SetupManager.java
    GUI: http://rex.homeip.net/~matt/java/gui/src/gui/Gui.java
    GraphViewer: http://rex.homeip.net/~matt/java/gui/src/gui/GraphViewer.java
    Span: http://rex.homeip.net/~matt/java/gui/src/gui/graphs/Span.java

    I think I have the solution....
    I had the same exact (seemingly random) ClassFormatExceptions being thrown from my custom Class-Loader as well. I would get the same variety of debug prints as you (Invalid constant pool, Code segment has wrong length, etc). At times it seemed to happen randomly to different classes that I loaded, depending on small changes I made to the code.
    Here is the background and how I solved it.
    I dervied from ClassLoader to make my custom class-loader. I overrode the findClass() method, and NOT the loadClass() method. This is the Java 2 method of making class-loaders, which is simplier than implementing your own loadClass() as in the older Java 1.1way of doing things.
    My custom class-loader (called JarFileClassLoader, BTW) already had a list of JAR files that it searched when its findClass() method was called from its parent. I was using a JarFile object to examine the contents of a particular JAR file. Once it found the JarEntry that represented the class I wanted to load, it asked for the InputStream by calling:
    JarEntry desiredEntry = // assigned to the JarEntry that represents the class you want to load
    InputStream myStream = myJar.getInputStream( desiredEntry );
    Then I asked how many bytes were available for reading, I created a byte array that could hold that many bytes, and I read the bytes from the InputStream:
    int totalBytes = myStream.available();
    byte[] classBytes = new byte[totalBytes];
    myStream.read( classBytes );
    Finally, I would define and resolve my class by:
    Class loadedClass = super.defineClass( className, classBytes, 0, classBytes.length );
    resolveClass( loadedClass );
    Sometimes, on the call to defineClass(), I would get all the weird ClassFormatExeptions.
    After the searching around these forums for a while, I found a lot of discussion about this problem, but I didn't find any concrete explanations or solutions. But I did see some cursory discussion about the InputStream class. This lead me to investigate how this class works exactly.
    As it turns out, when you call:
    myStream.read( classBytes );
    it is NOT guaranteed to read all the available bytes and completely fill the byte array you made for it. It could very easily read LESS than the total available bytes. I don't know why it would do this...maybe something to do with internal buffering of the stream. This happens more often on bigger sized class files that you are trying to read.
    The read() call will return an integer that represents the actual number of bytes read during that attempt to read. So, the solution is to check if you got all your bytes during the first call to read(), if not, then read some more.
    There is another version of the read() method that takes an 'offset' value into your array and a max bytes to read value. I used this method to modify my code to look like:
    int total = myStream.available();
    int numNeeded = total;
    int numRead = 0;
    int offset = 0;
    byte[] classBytes = new byte[total];
    do
    numNeeded -= numRead;
    offset = numRead;
    numRead += inStream.read( classBytes, offset, numNeeded );
    } while( numRead < total );
    This will continue looping until all the bytes are read. Then I never got those funky ClassFormatExceptions again. Before my fix, I was getting partial class definitions from calls to read() that didn't return all the bytes. Depending on which part of the class was omitted, I got the varied error prints that you got. Now, after this fix, it seems to work just fine.
    Hope this helps!
    -Mark

  • Class loader

    Hi,
    When I undeploy my app in weblogic does all classes belonging to my app are garbage collected ?...... the problem i am facing is when i undeploy my app in weblogic some classes are not GC and next time deploy and undeploy the same app the same set of classes are reloaded..
    for example lets say i have class com.web.domain.APPConfig
    when i undeploy com.web.domain.APPConfig is not GC when i Use reploy the app I see in jrockit mission control toll
    classes loaded as
    com.web.domain.APPConfig
    com.web.domain.APPConfig
    ideallly there should only be one class com.web.domain.APPConfig be loaded but it shows 2 and no goes on increasing as i deploy/undeploy

    Since "task" can be defined as wide and as narrow as you wish, that doesn't really mean a lot.
    You rarely need to define any classloaders at all. Just use what the environment provides.
    The exception here are systems such as modular plugin systems (OSGi for example), where you'll do lots of classloader magic.

Maybe you are looking for

  • When i use f/fox, i get tiny google bar and everything else disappears

    When I press m/Firefox, a much smaller google bar than usual comes up. Apart from the smaller bar the page is blank ie no File, Edit, View etc, no go back a page, not even a start button!

  • Batch process background color either side of artwork image

    I need to batch process the background color from several galleries from white to gray. On this page - Simon Toparovsky - A Letter from The Renaissance - some of the images in the gallery have a white background on the left and right side of the artw

  • When does the new PS CC published.

    I already paid a monthly fee, but I can not find more information about downloading??

  • How do I get audiobooks onto my iphone 5?

    How do I get audiobooks onto my iphone 5?  I don't have the option available in my music app.  audiobooks isn't there at all. When I can see my iphone on itunes in my computer it doesn't give me the option to sync audiobooks. I can't even find them w

  • ABAP  Upgrade  Documents

    Hi All, Plz let  me know where can  we get  the ABAP  delta documents,  as i  have to  prepare the list of all ABAP (Eg: keywords) changes made to  SAP  from  3.1H to  ECC 6.0. Thanks.