Class loader & cache

Hi!
I have developed an application that use CLASS LOADER methods to download classes when needed in the application.
I would like to know if there exist any way to use a JRE cache for using these classes and download it when it changes.
Thank you very much for any help!
Jose Monzon.

Hi,
Class is put into the cache of the class loader in the
defineClass() method and may be retrieved from the cache with the findLoadedClass() method.
Check the above methods for caching.
I hope this helped.
Roopasri Vittal
Developer Technical Support
Sun Microsystems
http://sun.com/developers/support

Similar Messages

  • Is it possible clear the class loader cache programatically?

    Hi,
    Is it possible clear the class loader cache programatically?
    Thanks

    By the cache do you mean the loaded classes? If so, you can do that by discarding any pointer you have to the class loader and creating a new class loader. ...though I wonder why you would need to do that...

  • Weblogic Class Loader caching/writing classes to weblogic/myServer/classfiles

    It seems that if I compile a class that a JSP uses while Weblogic is
              running, Weblogic's class loader has this nasty habit of caching/writing
              the class that already has loaded into memory into:
              weblogic/myServer/classfiles
              Weblogic then refers to the older class file under the above directory
              when the server is started again. Is there any way to turn this "class
              loader caching" off in Weblogic? Thanks!
              -hjk
              

    You have to tell WLAS where to load your new classes. You can change
              workingDir of your JSP configuration in weblogic.properties to point to your
              new class directory.
              Cheers - Wei
              Hyung-Jin Kim <[email protected]> wrote in message
              news:[email protected]..
              > It seems that if I compile a class that a JSP uses while Weblogic is
              > running, Weblogic's class loader has this nasty habit of caching/writing
              > the class that already has loaded into memory into:
              >
              > weblogic/myServer/classfiles
              >
              > Weblogic then refers to the older class file under the above directory
              > when the server is started again. Is there any way to turn this "class
              > loader caching" off in Weblogic? Thanks!
              >
              > -hjk
              >
              

  • Weblogic Class Loader issues.

    Hi all!
    Let me explain my problem.
    I have an EJB which has in its same Java package some support classes
    & also a startup class. I created an EJB jar file (containing the home,
    remote, bean, the deployment descriptors & the container generated stubs)
    for deployment. I also compiled all the support classes & the startup class
    into the /weblogic/myserver/serverclasses directory. I also added the
    required entries in the weblogic.properties file for the startup class.
    Now the problem is that the support classes & the startup class contain
    methods & constructors which have package level access (i.e the default
    access in Java). At runtime, when my bean tries to access one of these
    methods, an IllegalAccessException is thrown.
    I understand that this exception is thrown when one tries to access a
    method which should not be accessed (like private/protected/cross-package
    access). However, both the EJB & these classes are in the same package.
    So this should not be thrown.
    Now the next thing I thought is that the EJB & the support classes are
    being loaded by 2 different classloaders. I guess the classes under
    /weblogic/myserver/serverclasses are being loaded by the WebLogic
    Server ClassLoader & the EJB bean classes are being loaded by the
    specialized EJB ClassLoader.
    Now my question is,
    1) Is it the case that the WebLogic Server does not recognize that the
    EJB Bean class is in the same package as the support classes because
    they are loaded by 2 separate class loaders? Please note that the EJB
    jar file does not contain any support classes - so there is no
    duplicate classes here.
    2) Is this a bug?
    3) What should I do to prevent this problem?
    Some workarounds that I have done are:
    1) Copied the Bean.class (implementation class of EJB bean) into the
    serverclasses directory. Now the server does not throw any
    IllegalAccessException. -- This, however, does not appeal as a solution
    since it looks like the Bean class is now being loaded by the WebLogic
    Class Loader instead of from the EJB jar file.
    2) I changed all the default package access methods to public methods.
    Works like a charm. -- Problem is that this is a third party set of classes
    which I would like to avoid modifying.
    Hope this is not too confusing. Please let me know if you need any further info.
    Thanks much in advance,
    --Das

    You have to tell WLAS where to load your new classes. You can change
              workingDir of your JSP configuration in weblogic.properties to point to your
              new class directory.
              Cheers - Wei
              Hyung-Jin Kim <[email protected]> wrote in message
              news:[email protected]..
              > It seems that if I compile a class that a JSP uses while Weblogic is
              > running, Weblogic's class loader has this nasty habit of caching/writing
              > the class that already has loaded into memory into:
              >
              > weblogic/myServer/classfiles
              >
              > Weblogic then refers to the older class file under the above directory
              > when the server is started again. Is there any way to turn this "class
              > loader caching" off in Weblogic? Thanks!
              >
              > -hjk
              >
              

  • Wrapped: Unable to load class "com.cache.DBCacheStore"

    Hi,
    I was trying out a sample application for using DBCacheStore and getting the following error...
    (Wrapped: Unable to load class "com.cache.DBCacheStore" using sun.misc.Launc
    her$AppClassLoader@13f5d07
    <class-scheme>
    <class-name>com.cache.DBCacheStore</class-name>
    </class-scheme>) java.lang.ClassNotFoundException: com.cache.DBCacheStore
    I have the CLASSPATH set to the location of DBCacheStore.class file both in cache-server.cmd and in my application startup JVM params. But still i am not able to resolve this issue. However i am still able to hit the database and get the values for the first call and on sub-sequent call, i am able to retrive the value from cache. I also encounter the below error, after i have retrieved the values from cache...
    2010-11-10 15:08:31.553/29.671 Oracle Coherence GE 3.6.0.0 <Error> (thread=Distr
    ibutedCache, member=1): Terminating PartitionedCache due to unhandled exception:
    java.lang.UnsupportedOperationException
    2010-11-10 15:08:31.553/29.671 Oracle Coherence GE 3.6.0.0 <Error> (thread=Distr
    ibutedCache, member=1):
    java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableMap.put(Collections.java:1285)
    As the exception occurs, the cluster gets restarted and when i re-run the application, it again goes for a DB hit instead of cache hit.
    Note : I have the cache-server.cmd running in one the console window.
    Following is my cache-config.xml file content...
    <?xml version="1.0" encoding="UTF-8" ?>
    <cache-config>
         <caching-scheme-mapping>
              <!--
                   Caches with names that start with 'Virtual' will be created
                   as distributed-db-backed.
              -->
              <cache-mapping>
                   <cache-name>Virtual*</cache-name>
                   <scheme-name>distributed-db-backed</scheme-name>
              </cache-mapping>
         </caching-scheme-mapping>
         <caching-schemes>
              <!--
                   DB Backed Distributed caching scheme.
              -->
              <distributed-scheme>
                   <scheme-name>distributed-db-backed</scheme-name>
                   <service-name>DistributedCache</service-name>
                   <backing-map-scheme>
                        <read-write-backing-map-scheme>
                             <internal-cache-scheme>
                                  <class-scheme>
                                       <class-name>
                                            com.tangosol.util.ObservableHashMap
                                       </class-name>
                                  </class-scheme>
                             </internal-cache-scheme>
                             <cachestore-scheme>
                                  <class-scheme>
                                       <class-name>
                                            com.cache.DBCacheStore
                                       </class-name>
                                       <init-params>
                                            <init-param>
                                                 <param-type>
                                                      java.lang.String
                                                 </param-type>
                                                 <param-value>
                                                      EMP_ADDR_VIEW
                                                 </param-value>
                                            </init-param>
                                       </init-params>
                                  </class-scheme>
                             </cachestore-scheme>
                             <read-only>false</read-only>
                             <!--
                                  To make this a write-through cache just change the value below to 0 (zero)
                             -->
                             <write-delay-seconds>0</write-delay-seconds>
                        </read-write-backing-map-scheme>
                   </backing-map-scheme>
                   <listener />
                   <autostart>true</autostart>
              </distributed-scheme>
         </caching-schemes>
    </cache-config>
    Thanks
    Karthik
    Edited by: user1073902 on Nov 10, 2010 4:25 AM

    Hello Noah,
         I have listed the contents of log file ( for both cache-server.cmd and the client application ).
    cache-server.cmd Log File
    =========================
    java version "1.6.0_20"
    Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
    Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)
    2010-11-11 09:51:49.634/0.236 Oracle Coherence 3.6.0.0 <Info> (thread=main, memb
    er=n/a): Loaded operational configuration from "jar:file:/E:/coherence/lib/coher
    ence.jar!/tangosol-coherence.xml"
    2010-11-11 09:51:49.634/0.236 Oracle Coherence 3.6.0.0 <Info> (thread=main, memb
    er=n/a): Loaded operational overrides from "jar:file:/E:/coherence/lib/coherence
    .jar!/tangosol-coherence-override-dev.xml"
    2010-11-11 09:51:49.634/0.236 Oracle Coherence 3.6.0.0 <D5> (thread=main, member
    =n/a): Optional configuration override "/tangosol-coherence-override.xml" is not
    specified
    2010-11-11 09:51:49.649/0.251 Oracle Coherence 3.6.0.0 <D5> (thread=main, member
    =n/a): Optional configuration override "/custom-mbeans.xml" is not specified
    2010-11-11 09:51:49.649/0.251 Oracle Coherence 3.6.0.0 <D6> (thread=main, member
    =n/a): Loaded edition data from "jar:file:/E:/coherence/lib/coherence.jar!/coher
    ence-grid.xml"
    Oracle Coherence Version 3.6.0.0 Build 17229
    Grid Edition: Development mode
    Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
    2010-11-11 09:51:49.885/0.487 Oracle Coherence GE 3.6.0.0 <Info> (thread=main, m
    ember=n/a): Loaded cache configuration from "file:/E:/bea/user_projects/workspac
    es/workSpaceStudio/coh/cache-config.xml"
    2010-11-11 09:51:50.231/0.833 Oracle Coherence GE 3.6.0.0 <D4> (thread=main, mem
    ber=n/a): TCMP bound to /10.144.32.78:8088 using SystemSocketProvider
    2010-11-11 09:51:53.786/4.388 Oracle Coherence GE 3.6.0.0 <Info> (thread=Cluster
    , member=n/a): Created a new cluster "mycluster" with Member(Id=1, Timestamp=201
    0-11-11 09:51:50.231, Address=10.144.32.78:8088, MachineId=47694, Location=site:
    XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:4472, Role=CoherenceServer, Edit
    ion=Grid Edition, Mode=Development, CpuCount=2, SocketCount=2) UID=0x0A90204E000
    0012C392B0817BA4E1F98
    2010-11-11 09:51:53.786/4.388 Oracle Coherence GE 3.6.0.0 <Info> (thread=main, m
    ember=n/a): Started cluster Name=mycluster
    Group{Address=224.0.0.1, Port=5455, TTL=4}
    MasterMemberSet
    ThisMember=Member(Id=1, Timestamp=2010-11-11 09:51:50.231, Address=10.144.32.7
    8:8088, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,p
    rocess:4472, Role=CoherenceServer)
    OldestMember=Member(Id=1, Timestamp=2010-11-11 09:51:50.231, Address=10.144.32
    .78:8088, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026
    ,process:4472, Role=CoherenceServer)
    ActualMemberSet=MemberSet(Size=1, BitSetCount=2
    Member(Id=1, Timestamp=2010-11-11 09:51:50.231, Address=10.144.32.78:8088, M
    achineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:44
    72, Role=CoherenceServer)
    RecycleMillis=1200000
    RecycleSet=MemberSet(Size=0, BitSetCount=0
    TcpRing{Connections=[]}
    IpMonitor{AddressListSize=0}
    2010-11-11 09:51:53.833/4.435 Oracle Coherence GE 3.6.0.0 <D5> (thread=Invocatio
    n:Management, member=1): Service Management joined the cluster with senior servi
    ce member 1
    2010-11-11 09:51:54.085/4.687 Oracle Coherence GE 3.6.0.0 <D5> (thread=Distribut
    edCache, member=1): Service DistributedCache joined the cluster with senior serv
    ice member 1
    2010-11-11 09:51:54.101/4.703 Oracle Coherence GE 3.6.0.0 <D6> (thread=Distribut
    edCache, member=1): Service DistributedCache: sending PartitionConfig ConfigSync
    to all
    2010-11-11 09:51:54.116/4.718 Oracle Coherence GE 3.6.0.0 <Info> (thread=main, m
    ember=1):
    Services
    ClusterService{Name=Cluster, State=(SERVICE_STARTED, STATE_JOINED), Id=0, Vers
    ion=3.6, OldestMemberId=1}
    InvocationService{Name=Management, State=(SERVICE_STARTED), Id=1, Version=3.1,
    OldestMemberId=1}
    PartitionedCache{Name=DistributedCache, State=(SERVICE_STARTED), LocalStorage=
    enabled, PartitionCount=257, BackupCount=1, AssignedPartitions=257, BackupPartit
    ions=0}
    Started DefaultCacheServer...
    2010-11-11 09:55:41.209/231.811 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster
    , member=1): Member(Id=2, Timestamp=2010-11-11 09:55:41.216, Address=10.144.32.7
    8:8090, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,p
    rocess:5304, Role=XyzCacheDatabaseCache) joined Cluster with senior member 1
    2010-11-11 09:55:41.209/231.811 Oracle Coherence GE 3.6.0.0 <D6> (thread=Cluster
    , member=1): TcpRing connecting to Member(Id=2, Timestamp=2010-11-11 09:55:41.21
    6, Address=10.144.32.78:8090, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,ma
    chine:hdchshocms2026,process:5304, Role=XyzCacheDatabaseCache)
    2010-11-11 09:55:41.209/231.811 Oracle Coherence GE 3.6.0.0 <D6> (thread=Cluster
    , member=1): TcpRing connected to Member(Id=2, Timestamp=2010-11-11 09:55:41.216
    , Address=10.144.32.78:8090, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,mac
    hine:hdchshocms2026,process:5304, Role=XyzCacheDatabaseCache)
    2010-11-11 09:55:41.287/231.889 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster
    , member=1): Member 2 joined Service Management with senior member 1
    2010-11-11 09:55:41.553/232.155 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster
    , member=1): Member 2 joined Service DistributedCache with senior member 1
    2010-11-11 09:55:41.553/232.155 Oracle Coherence GE 3.6.0.0 <Error> (thread=Dist
    ributedCache, member=1): BackingMapManager com.tangosol.net.DefaultConfigurableC
    acheFactory$Manager: failed to instantiate a cache: VirtualCache
    2010-11-11 09:55:41.553/232.155 Oracle Coherence GE 3.6.0.0 <Error> (thread=Dist
    ributedCache, member=1):
    (Wrapped: Unable to load class "com.cache.DBCacheStore" using sun.misc.Launc
    her$AppClassLoader@13f5d07
    <class-scheme>
    <class-name>com.cache.DBCacheStore</class-name>
    <init-params>
    <init-param>
    <param-type>java.lang.String</param-type>
    <param-value>EMP_ADDR_VIEW</param-value>
    </init-param>
    </init-params>
    </class-scheme>) java.lang.ClassNotFoundException: com.cache.DBCacheStore
    at com.tangosol.util.Base.ensureRuntimeException(Base.java:293)
    at com.tangosol.run.xml.XmlHelper.createInstance(XmlHelper.java:2487)
    at com.tangosol.net.DefaultConfigurableCacheFactory.instantiateAny(Defau
    ltConfigurableCacheFactory.java:3256)
    at com.tangosol.net.DefaultConfigurableCacheFactory.instantiateCacheStor
    e(DefaultConfigurableCacheFactory.java:3106)
    at com.tangosol.net.DefaultConfigurableCacheFactory.instantiateReadWrite
    BackingMap(DefaultConfigurableCacheFactory.java:1674)
    at com.tangosol.net.DefaultConfigurableCacheFactory.configureBackingMap(
    DefaultConfigurableCacheFactory.java:1429)
    at com.tangosol.net.DefaultConfigurableCacheFactory$Manager.instantiateB
    ackingMap(DefaultConfigurableCacheFactory.java:3904)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache$Storage.instantiateResourceMap(Partition
    edCache.CDB:21)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache$Storage.setCacheName(PartitionedCache.CD
    B:25)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache$ServiceConfig$ConfigListener.entryInsert
    ed(PartitionedCache.CDB:17)
    at com.tangosol.util.MapEvent.dispatch(MapEvent.java:266)
    at com.tangosol.util.MapEvent.dispatch(MapEvent.java:226)
    at com.tangosol.util.MapListenerSupport.fireEvent(MapListenerSupport.jav
    a:556)
    at com.tangosol.util.ObservableHashMap.dispatchEvent(ObservableHashMap.j
    ava:229)
    at com.tangosol.util.ObservableHashMap$Entry.onAdd(ObservableHashMap.jav
    a:270)
    at com.tangosol.util.SafeHashMap.put(SafeHashMap.java:244)
    at com.tangosol.coherence.component.util.ServiceConfig$Map.put(ServiceCo
    nfig.CDB:43)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache$StorageIdRequest.onReceived(PartitionedC
    ache.CDB:45)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.G
    rid.onMessage(Grid.CDB:11)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.G
    rid.onNotify(Grid.CDB:33)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.PartitionedService.onNotify(PartitionedService.CDB:3)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache.onNotify(PartitionedCache.CDB:3)
    at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:42)
    at java.lang.Thread.run(Thread.java:619)
    Caused by: java.lang.ClassNotFoundException: com.cache.DBCacheStore
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at com.tangosol.util.ExternalizableHelper.loadClass(ExternalizableHelper
    .java:3011)
    at com.tangosol.run.xml.XmlHelper.createInstance(XmlHelper.java:2421)
    ... 22 more
    2010-11-11 09:55:41.631/232.233 Oracle Coherence GE 3.6.0.0 <D5> (thread=Distrib
    utedCache, member=1): 3> Transferring primary PartitionSet{0, 1, 2, 3, 4, 5, 6,
    7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
    28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
    68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
    88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 1
    06, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 1
    22, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 1
    38, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 1
    54, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 1
    70, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 1
    86, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 2
    02, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 2
    18, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 2
    34, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 2
    50, 251, 252, 253, 254, 255, 256} to member 2 requesting 128
    2010-11-11 09:55:41.741/232.343 Oracle Coherence GE 3.6.0.0 <D4> (thread=Distrib
    utedCache, member=1): 1> Transferring 129 out of 129 partitions to a node-safe b
    ackup 1 at member 2 (under 129)
    2010-11-11 09:55:41.757/232.359 Oracle Coherence GE 3.6.0.0 <D5> (thread=Distrib
    utedCache, member=1): Transferring 0KB of backup[1] for PartitionSet{128, 129, 1
    30, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 1
    46, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 1
    62, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 1
    78, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 1
    94, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 2
    10, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 2
    26, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 2
    42, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256} to mem
    ber 2
    2010-11-11 09:55:42.070/232.672 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster
    , member=1): TcpRing disconnected from Member(Id=2, Timestamp=2010-11-11 09:55:4
    1.216, Address=10.144.32.78:8090, MachineId=47694, Location=site:XyzT.CORP.Xyz.I
    N,machine:hdchshocms2026,process:5304, Role=XyzCacheDatabaseCache) due to a peer
    departure; removing the member.
    2010-11-11 09:55:42.070/232.672 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster
    , member=1): Member 2 left service Management with senior member 1
    2010-11-11 09:55:42.070/232.672 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster
    , member=1): Member 2 left service DistributedCache with senior member 1
    2010-11-11 09:55:42.070/232.672 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster
    , member=1): Member(Id=2, Timestamp=2010-11-11 09:55:42.07, Address=10.144.32.78
    :8090, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,pr
    ocess:5304, Role=XyzCacheDatabaseCache) left Cluster with senior member 1
    2010-11-11 09:55:42.101/232.703 Oracle Coherence GE 3.6.0.0 <Error> (thread=Dist
    ributedCache, member=1): Terminating PartitionedCache due to unhandled exception
    : java.lang.UnsupportedOperationException
    2010-11-11 09:55:42.101/232.703 Oracle Coherence GE 3.6.0.0 <Error> (thread=Dist
    ributedCache, member=1):
    java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableMap.put(Collections.java:1285)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache$Storage.putPrimaryResource(PartitionedCa
    che.CDB:44)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache$Storage.moveResourcesToPrimary(Partition
    edCache.CDB:50)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache$Storage.movePartition(PartitionedCache.C
    DB:9)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache.movePartition(PartitionedCache.CDB:14)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.PartitionedService.assignPrimaryPartition(PartitionedService.CDB:38)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.PartitionedService.restoreOrphans(PartitionedService.CDB:42)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.PartitionedService.onOwnershipRequest(PartitionedService.CDB:13)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.PartitionedService$OwnershipRequest.onReceived(PartitionedService.CDB:5)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.G
    rid.onMessage(Grid.CDB:11)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.G
    rid.onNotify(Grid.CDB:33)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.PartitionedService.onNotify(PartitionedService.CDB:3)
    at com.tangosol.coherence.component.util.daemon.queueProcessor.service.g
    rid.partitionedService.PartitionedCache.onNotify(PartitionedCache.CDB:3)
    at com.tangosol.coherence.component.util.Daemon.run(Daemon.CDB:42)
    at java.lang.Thread.run(Thread.java:619)
    2010-11-11 09:55:42.101/232.703 Oracle Coherence GE 3.6.0.0 <D5> (thread=Distrib
    utedCache, member=1): Service DistributedCache left the cluster
    2010-11-11 09:55:45.012/235.614 Oracle Coherence GE 3.6.0.0 <Info> (thread=main,
    member=1): Restarting Service: DistributedCache
    2010-11-11 09:55:45.012/235.614 Oracle Coherence GE 3.6.0.0 <D5> (thread=Distrib
    utedCache, member=1): Service DistributedCache joined the cluster with senior se
    rvice member 1
    2010-11-11 09:55:45.012/235.614 Oracle Coherence GE 3.6.0.0 <D6> (thread=Distrib
    utedCache, member=1): Service DistributedCache: sending PartitionConfig ConfigSy
    nc to all
    Client Application Log
    ======================
    2010-11-11 09:59:07.380/0.251 Oracle Coherence 3.6.0.0 <Info> (thread=main, member=n/a): Loaded operational configuration from "jar:file:/E:/coherence/lib/coherence.jar!/tangosol-coherence.xml"
    2010-11-11 09:59:07.380/0.251 Oracle Coherence 3.6.0.0 <Info> (thread=main, member=n/a): Loaded operational overrides from "jar:file:/E:/coherence/lib/coherence.jar!/tangosol-coherence-override-dev.xml"
    2010-11-11 09:59:07.380/0.251 Oracle Coherence 3.6.0.0 <D5> (thread=main, member=n/a): Optional configuration override "/tangosol-coherence-override.xml" is not specified
    2010-11-11 09:59:07.380/0.251 Oracle Coherence 3.6.0.0 <D5> (thread=main, member=n/a): Optional configuration override "/custom-mbeans.xml" is not specified
    2010-11-11 09:59:07.395/0.266 Oracle Coherence 3.6.0.0 <D6> (thread=main, member=n/a): Loaded edition data from "jar:file:/E:/coherence/lib/coherence.jar!/coherence-grid.xml"
    Oracle Coherence Version 3.6.0.0 Build 17229
    Grid Edition: Development mode
    Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
    2010-11-11 09:59:07.896/0.767 Oracle Coherence GE 3.6.0.0 <D4> (thread=main, member=n/a): TCMP bound to /10.144.32.78:8090 using SystemSocketProvider
    2010-11-11 09:59:09.164/2.035 Oracle Coherence GE 3.6.0.0 <Info> (thread=Cluster, member=n/a): This Member(Id=2, Timestamp=2010-11-11 09:59:09.164, Address=10.144.32.78:8090, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:2404, Role=XyzCacheDatabaseCache, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=2) joined cluster "mycluster" with senior Member(Id=1, Timestamp=2010-11-11 09:58:30.832, Address=10.144.32.78:8088, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:4772, Role=CoherenceServer, Edition=Grid Edition, Mode=Development, CpuCount=2, SocketCount=2)
    2010-11-11 09:59:09.180/2.051 Oracle Coherence GE 3.6.0.0 <D6> (thread=Cluster, member=n/a): TcpRing connecting to Member(Id=1, Timestamp=2010-11-11 09:58:30.832, Address=10.144.32.78:8088, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:4772, Role=CoherenceServer)
    2010-11-11 09:59:09.180/2.051 Oracle Coherence GE 3.6.0.0 <D6> (thread=Cluster, member=n/a): TcpRing connected to Member(Id=1, Timestamp=2010-11-11 09:58:30.832, Address=10.144.32.78:8088, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:4772, Role=CoherenceServer)
    2010-11-11 09:59:09.180/2.051 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Cluster with senior member 1
    2010-11-11 09:59:09.180/2.051 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service Management with senior member 1
    2010-11-11 09:59:09.180/2.051 Oracle Coherence GE 3.6.0.0 <D5> (thread=Cluster, member=n/a): Member 1 joined Service DistributedCache with senior member 1
    2010-11-11 09:59:09.180/2.051 Oracle Coherence GE 3.6.0.0 <Info> (thread=main, member=n/a): Started cluster Name=mycluster
    Group{Address=224.0.0.1, Port=5455, TTL=4}
    MasterMemberSet
    ThisMember=Member(Id=2, Timestamp=2010-11-11 09:59:09.164, Address=10.144.32.78:8090, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:2404, Role=XyzCacheDatabaseCache)
    OldestMember=Member(Id=1, Timestamp=2010-11-11 09:58:30.832, Address=10.144.32.78:8088, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:4772, Role=CoherenceServer)
    ActualMemberSet=MemberSet(Size=2, BitSetCount=2
    Member(Id=1, Timestamp=2010-11-11 09:58:30.832, Address=10.144.32.78:8088, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:4772, Role=CoherenceServer)
    Member(Id=2, Timestamp=2010-11-11 09:59:09.164, Address=10.144.32.78:8090, MachineId=47694, Location=site:XyzT.CORP.Xyz.IN,machine:hdchshocms2026,process:2404, Role=XyzCacheDatabaseCache)
    RecycleMillis=1200000
    RecycleSet=MemberSet(Size=0, BitSetCount=0
    TcpRing{Connections=[1]}
    IpMonitor{AddressListSize=0}
    2010-11-11 09:59:09.227/2.098 Oracle Coherence GE 3.6.0.0 <D5> (thread=Invocation:Management, member=2): Service Management joined the cluster with senior service member 1
    2010-11-11 09:59:09.289/2.160 Oracle Coherence GE 3.6.0.0 <Info> (thread=main, member=2): Loaded cache configuration from "file:/E:/bea/user_projects/workspaces/workSpaceStudio/coh/cache-config.xml"
    2010-11-11 09:59:09.461/2.332 Oracle Coherence GE 3.6.0.0 <D5> (thread=DistributedCache, member=2): Service DistributedCache joined the cluster with senior service member 1
    DB Hit
    DBCacheStore(String) called...
    2010-11-11 09:59:09.524/2.395 Oracle Coherence GE 3.6.0.0 <D4> (thread=DistributedCache, member=2): Asking member 1 for 128 primary partitions
    load() called...
    Emp Id:1, Emp Name:Employee, Emp Addr:Address
    Cache Hit
    Emp Id:1, Emp Name:Employee, Emp Addr:Address
    Client Java Program
    ===================
    package com.cache;
    import com.tangosol.net.CacheFactory;
    import com.tangosol.net.NamedCache;
    public class DatabaseCache {
         public DatabaseCache() { }
         private NamedCache cache;
         public void createCache() {
              CacheFactory.ensureCluster();
              cache = CacheFactory.getCache("VirtualCache");
         public void retrieveEntry() {
              System.out.println("DB Hit");
              System.out.println(cache.get("1"));
              System.out.println("Cache Hit");
              System.out.println(cache.get("1"));
         public static void main(String[] args) {
              DatabaseCache databaseCache = new DatabaseCache();
              databaseCache.createCache();
              databaseCache.retrieveEntry();
    DBCacheStore Java Program
    =========================
    Note : I am querying an ORACLE VIEW
    package com.cache;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Map;
    import com.tangosol.net.cache.CacheStore;
    import com.tangosol.util.Base;
    public class DBCacheStore extends Base implements CacheStore {
         private String tableName = null;
         public DBCacheStore() {
              System.out.println("DBCacheStore() called...");
         public DBCacheStore(String tableName) {
              System.out.println("DBCacheStore(String) called...");
              this.tableName = tableName;
         private Connection getConnection() throws Exception {
              Class.forName("oracle.jdbc.driver.OracleDriver");
              String url = "jdbc:oracle:thin:@localhost:1521:xe";
              Connection connection = DriverManager.getConnection(url,"system","manager");
              return connection;
         public void erase(Object arg0) {
              System.out.println("erase() called...");
         public void eraseAll(Collection arg0) {
              System.out.println("eraseAll() called...");
         public void store(Object key, Object value) {
              System.out.println("store() called...");
         public void storeAll(Map arg0) {
              System.out.println("storeAll() called...");          
         public Object load(Object obj) {
              System.out.println("load() called...");
              Employee employee = null;
              Connection con = null;
              PreparedStatement pStmt = null;
              ResultSet rSet = null;
              try {
                   con = getConnection();
                   pStmt = con.prepareStatement("select emp_id, emp_name, address from " + tableName + " where emp_id = ?");
                   pStmt.setInt(1, Integer.parseInt((String)obj));
                   rSet = pStmt.executeQuery();
                   if(rSet.next()) {
                        employee = new Employee();
                        employee.setEmpId(rSet.getInt("emp_id"));
                        employee.setEmpName(rSet.getString("emp_name"));
                        employee.setEmpAddr(rSet.getString("address"));
              } catch(Exception e) {
                   e.printStackTrace();
              } finally {
                   try {
                        if(rSet != null)
                             rSet.close();
                        if(pStmt != null)
                             pStmt.close();
                        if(con != null)
                             con.close();
                   } catch(Exception e) {
                        e.printStackTrace();
              return employee;
         public Map loadAll(Collection arg0) {
              System.out.println("loadAll() called...");
              Connection con = null;
              PreparedStatement pStmt = null;
              ResultSet rSet = null;          
              Employee employee = null;
              Map empMap = new HashMap();
              try {
                   con = getConnection();
                   pStmt = con.prepareStatement("select emp_id, emp_name, address from " + tableName);
                   rSet = pStmt.executeQuery();
                   while(rSet.next()) {
                        employee = new Employee();
                        employee.setEmpId(rSet.getInt("emp_id"));
                        employee.setEmpName(rSet.getString("emp_name"));
                        employee.setEmpAddr(rSet.getString("address"));
                        empMap.put(employee.getEmpId(), employee);
              } catch(Exception e) {
                   e.printStackTrace();
              } finally {
                   try {
                        if(rSet != null)
                             rSet.close();
                        if(pStmt != null)
                             pStmt.close();
                        if(con != null)
                             con.close();
                   } catch(Exception e) {
                        e.printStackTrace();
              return empMap;
         public Iterator keys() {
              Connection con = null;
              PreparedStatement pStmt = null;
              ResultSet rSet = null;          
              List returnList = null;
              try {
                   con = getConnection();
                   pStmt = con.prepareStatement("select emp_id from emp_addr_view");
                   rSet = pStmt.executeQuery();
                   returnList = new LinkedList();
                   while(rSet.next()) {
                        returnList.add(rSet.getString("empId"));
              } catch(Exception e) {
                   e.printStackTrace();
              } finally {
                   try {
                        if(rSet != null)
                             rSet.close();
                        if(pStmt != null)
                             pStmt.close();
                        if(con != null)
                             con.close();
                   } catch(Exception e) {
                        e.printStackTrace();
              return returnList.iterator();
    cache-server.cmd added lines
    ============================
    set CLASSPATH=%CLASSPATH%;E:\bea\user_projects\workspaces\workSpaceStudio\coh\bin;E:\bea\wlserver_10.0\server\lib\ojdbc14.jar;
    Note : E:\bea\user_projects\workspaces\workSpaceStudio\coh\bin in the above line contains compiled class files starting from "com" folder.
    "%java_exec%" -server -showversion "%java_opts%" -cp E:\bea\user_projects\workspaces\workSpaceStudio\coh\bin -Dtangosol.coherence.log.level=9 -Dtangosol.coherence.cluster=mycluster -Dtangosol.coherence.clusteraddress=224.0.0.1 -Dtangosol.coherence.clusterport=5455 -Dtangosol.coherence.cacheconfig=E:\bea\user_projects\workspaces\workSpaceStudio\coh\cache-config.xml -cp "%coherence_home%\lib\coherence.jar" com.tangosol.net.DefaultCacheServer %1
    JVM arguments for running Client Program : DatabaseCache.java
    =======================================
    -Dtangosol.coherence.cacheconfig=E:\bea\user_projects\workspaces\workSpaceStudio\coh\cache-config.xml
    -Dtangosol.coherence.cluster=mycluster
    -Dtangosol.coherence.clusteraddress=224.0.0.1
    -Dtangosol.coherence.clusterport=5455
    ==================================================================================================
    Please do let me know if you require further information.
    Thanks
    Karthik

  • Does Java load a class in caché ? New compiled class are not used .

    I run my application (using java.exe + 'my class').
    One 'Mybutton' launch a new class Frame based, with one button on it. I see this Frame and close it.Ok.
    Now a put a new button in this Frame ( I have 2 buttons then), I save it (and Eclipse compile it).
    If a do click on 'Mybutton' I see the old Frame (with one button) not the new Frame with 2 buttons.
    What happens ? Is there something like cache class loader? How to avoid this?
    My intention is to try to test the changes inmediatly, but in this situation I must to close Myapp and re-run it ?
    Some solution?
    Thamk you

    Java classes are loaded by an Object called a ClassLoader. Each classloader permanently caches all the classes it loads, and always uses an already loaded class in preference to loading a new one.
    When a program starts there's already a ClassLoader, the one that loaded your main class. It loads classes from the class path. It exists all the time the program is running.
    You can create your own classloaders in the program and if you load your changeable class through one then then you can get a new version by creating a new classloader.
    Typically you create an instance of URLClassLoader.
    However you need to know that classloaders "delegate" loadClass requests before loading the class themselves, which means that if the class you request is on the class path, your URLClassLoader will get the system class loader to load it and it won't work. You need a special directory (typically called a repsitory) for classes you wish to load multiple versions of.

  • Application Class Loader problem calling virtual function

    Hello everyone
    I have run in to very strange behavior of JVM
    I have created a class loader which allows my to load classes from
    jar file, regardless that URLClassLoader supplies this functionality.
    I am using this class loader to load some classes and call their virtual functions. The class diagram looks like that:
    public interface I {
       public void init();
    public class AAA implements
       public void init(){
    public class BBB extends AAA{
       public void init(){
          //here comes implementation
    }Interface I and class AAA are loaded with System Class loader and Class BBB is loaded using my class loader from jar file.
    ByteStreamClassLoader  classLoader =  new ByteStreamClassLoader  ();
    Class cl = classLoader. loadClass(�com.product.BBB�,true);
    I myInterface = cl.newInstance();
    myInterface.init();The problem is that from some unknown reason java class AAA.init() instead of BBB.init().
    Can somebody help me what am I doing wrong?
    Class Loader code attached below
      public class ByteStreamClassLoader   extends ClassLoader {
        protected HashMap m_cache = new HashMap();
        public void clearCashe() {
          m_cache = new HashMap();
        private String definePackage(String className) {
          StringBuilder strB = new StringBuilder();
          //Class name must be removed from the URI in order to define a package
          String[] packageArray = className.split("\\.");
          for (int i = 0; i < packageArray.length - 1; i++) {
            strB.append(packageArray).append(".");
    String packageName = strB.toString();
    packageName = packageName.substring(0, packageName.length() - 1);
    if (getPackage(packageName) == null) {
    m_logger.log(Level.FINEST, "Defining package '" + packageName + "'");
    definePackage(packageName, null, null, null, null, null, null, null);
    return packageName;
    public synchronized Class loadClass(String name, boolean resolve) throws
    ClassNotFoundException {
    name = name.replaceAll("/", ".").replaceAll(".class", "");
    //Try to locate the Class in cashe
    Class c = (Class) m_cache.get(name);
    //Try to locate the Class in the System Class Loader
    if (c == null) {
    try {
    c = ClassLoader.getSystemClassLoader().loadClass(name);
    catch (Exception ex) {}
    else {
    m_logger.log(Level.FINEST, "Class '" + name + "' found in cache");
    //Load the class from byte array
    if (c == null) {
    String resourceName = name;
    if (!resourceName.endsWith(".class")) {
    resourceName = resourceName.concat(".class");
    //Retrieve class byte representation
    if (resourceName.indexOf(".") != -1) {
    resourceName =
    resourceName.replaceAll("\\.", "/").replaceAll("/class", ".class");
    //Use the ByteStreamClassLoader to load the class from byte array
    byte[] classByteArray = null;
    try {
    classByteArray = getResourceBytes(resourceName);
    catch (IOException ex1) {
    throw new ClassNotFoundException(
    "Could not load class data." + ex1.getMessage());
    m_logger.log(
    Level.FINEST, "Loading class '" +
    name + "' Byte Length: " + classByteArray.length);
    String p = definePackage(name);
    c = defineClass(
    name,
    classByteArray,
    0,
    classByteArray.length,
    ByteStreamClassLoader.class.getProtectionDomain());
    m_cache.put(name, c);
    if (resolve) {
    resolveClass(c);
    return c;

    Hello everyone
    I have run in to very strange behavior of JVM
    I have created a class loader which allows my to load classes from
    jar file, regardless that URLClassLoader supplies this functionality.
    I am using this class loader to load some classes and call their virtual functions. The class diagram looks like that:
    public interface I {
       public void init();
    public class AAA implements
       public void init(){
    public class BBB extends AAA{
       public void init(){
          //here comes implementation
    }Interface I and class AAA are loaded with System Class loader and Class BBB is loaded using my class loader from jar file.
    ByteStreamClassLoader  classLoader =  new ByteStreamClassLoader  ();
    Class cl = classLoader. loadClass(�com.product.BBB�,true);
    I myInterface = cl.newInstance();
    myInterface.init();The problem is that from some unknown reason java class AAA.init() instead of BBB.init().
    Can somebody help me what am I doing wrong?
    Class Loader code attached below
      public class ByteStreamClassLoader   extends ClassLoader {
        protected HashMap m_cache = new HashMap();
        public void clearCashe() {
          m_cache = new HashMap();
        private String definePackage(String className) {
          StringBuilder strB = new StringBuilder();
          //Class name must be removed from the URI in order to define a package
          String[] packageArray = className.split("\\.");
          for (int i = 0; i < packageArray.length - 1; i++) {
            strB.append(packageArray).append(".");
    String packageName = strB.toString();
    packageName = packageName.substring(0, packageName.length() - 1);
    if (getPackage(packageName) == null) {
    m_logger.log(Level.FINEST, "Defining package '" + packageName + "'");
    definePackage(packageName, null, null, null, null, null, null, null);
    return packageName;
    public synchronized Class loadClass(String name, boolean resolve) throws
    ClassNotFoundException {
    name = name.replaceAll("/", ".").replaceAll(".class", "");
    //Try to locate the Class in cashe
    Class c = (Class) m_cache.get(name);
    //Try to locate the Class in the System Class Loader
    if (c == null) {
    try {
    c = ClassLoader.getSystemClassLoader().loadClass(name);
    catch (Exception ex) {}
    else {
    m_logger.log(Level.FINEST, "Class '" + name + "' found in cache");
    //Load the class from byte array
    if (c == null) {
    String resourceName = name;
    if (!resourceName.endsWith(".class")) {
    resourceName = resourceName.concat(".class");
    //Retrieve class byte representation
    if (resourceName.indexOf(".") != -1) {
    resourceName =
    resourceName.replaceAll("\\.", "/").replaceAll("/class", ".class");
    //Use the ByteStreamClassLoader to load the class from byte array
    byte[] classByteArray = null;
    try {
    classByteArray = getResourceBytes(resourceName);
    catch (IOException ex1) {
    throw new ClassNotFoundException(
    "Could not load class data." + ex1.getMessage());
    m_logger.log(
    Level.FINEST, "Loading class '" +
    name + "' Byte Length: " + classByteArray.length);
    String p = definePackage(name);
    c = defineClass(
    name,
    classByteArray,
    0,
    classByteArray.length,
    ByteStreamClassLoader.class.getProtectionDomain());
    m_cache.put(name, c);
    if (resolve) {
    resolveClass(c);
    return c;

  • Apparent EJB Class Loader Issue

    I am having a problem loading narrowing an EJB. It appears to be a class loader
    problem. I am getting a ClassCastException with the following message: Cannot
    narrow remote object to com.dte.ejb.facade.AccessoryServiceHome.
    Here is my code that looks up the EJB (I've ommitted the 'catch' clauses):
    EJBHome ejbHome = (EJBHome) cache.get(homeClass);
    try {
    Object temp = ctx.lookup("ejb/" + homeClass.getName());
    if (ejbHome == null) {
    ejbHome = (EJBHome) PortableRemoteObject.narrow(temp, homeClass);
    cache.put(homeClass, ejbHome);
    Here is the output of some debugging information from the above method. Here I've
    displayed the class.getName and the class.getClassLoader for the Class object
    passed to this method and the remote object being cast by the narrow method:
    homeClass : com.dte.ejb.facade.AccessoryServiceHome
    homeClass : weblogic.utils.classloaders.ChangeAwareClassLoader@29164c finder:
    weblogic.utils.classloaders.MultiClassFinder@300ec4
    From Lookup: com.dte.ejb.facade.AccessoryServiceBean_krx5el_HomeImpl
    From Lookup: weblogic.utils.classloaders.GenericClassLoader@1ea02f finder: weblogic.utils.classloaders.MultiClassFinder@6fca08
    As you can see, the Class passed into this method has been loaded with the ChangeAwareClassLoader
    but the HomeImpl class was loaded with the GenericClassLoader. I think that is
    the problem (please correct me if I am wrong).
    The application in question is an .ear with 2 .war modules and a ejb.jar file.
    It was my understanding that all classes needed by any module in a .ear were all
    loaded with the same class loader. Is this true? If so, then why am I having this
    problem?
    Thank you in advance for your help.

    I just want to add few comments hoping the iPlanet engineer will be able to help me.
    I mange to get one deployment of a war file with the client weblogic EJB to work; only if I add the Installation Directory path of the war file plus &#8220;web-inf/classes&#8221; to the classpath of the JVM configuration.
    This tells me that the class loader looks for the JVM classpath to load the EJB home class at run time. I think; if I can make iPlanet class loader to look for the application classpath instead of the JVM my problem will go away.
    Thank you in advance,
    Nad

  • Implementing a secure class loader..

    Hello,
    We have a custom class loader which loads in custom packages from the database or from the file system. We want to ensure that these custom classes do not read or write into the file system. I want to restrict access to these classes when creating them. I read that by setting the proper permissions when defining the class, this could be possible. Here is my implementation of the class loader :
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FilePermission;
    import java.io.IOException;
    import java.net.SocketPermission;
    import java.net.URL;
    import java.security.AccessController;
    import java.security.CodeSource;
    import java.security.PermissionCollection;
    import java.security.Permissions;
    import java.security.PrivilegedExceptionAction;
    import java.security.SecureClassLoader;
    public class TestClassLoader extends SecureClassLoader {
            JarParser jp;
            public TestClassLoader(JarParser jp) {
              super();
                    this.jp = jp;
            public Class findClass(final String name) throws ClassNotFoundException {
                   try {
                       return(Class)
                               AccessController.doPrivileged (
                                     new PrivilegedExceptionAction() {
                                                   public Object run() throws ClassNotFoundException {
                                                         byte[] buf = null;
                                                            try {
                                                               if(jp == null)
                                                                      throw new ClassNotFoundException("Jar file not found");
                                                                    String className = name.replace( '.', '/' ) + ".class";
                                                                    buf = jp.getResource(className);
                                                                    if(buf == null || buf.length == 0)
                                                                          throw new ClassNotFoundException("Class not found");
                                                                    CodeSource cs = getCodeSource(name);
                                                                    return defineClass(name, buf, 0, buf.length, cs);
                                                           catch(Exception e) {
                                                                throw new ClassNotFoundException(name, e);
                   catch(Exception e) {
                        throw new ClassNotFoundException(name, e);
          * @param name
         protected CodeSource getCodeSource(String name) {
                   try {
                       return new CodeSource(new URL("file", "localhost", name), null);
                   catch(Exception e){
                         e.printStackTrace();
                    return null;
            protected PermissionCollection getPermissions(CodeSource cs) {
              PermissionCollection pc = new Permissions();
                    pc.add(new RuntimePermission("exitVM"));
                    pc.add(new FilePermission("${user.home}${/}*", "read"));
                    pc.add(new FilePermission("${user.dir}${/}*", "read"));
             pc.add(new SocketPermission("localhost", "resolve"));
                    return pc;
            public static void main(String[] args) {
                    try {
                       byte[] bytes = new byte[8192];
                      long ttlBytesRead = 0;
                      int noOfBytesToRead = 0;
                            File readFile = new File("test.jar");
                            // "length" here indicates the total no of bytes to read.
                          // This is equal to the file size sans the offset value.
                            long length = readFile.length();
                            Long temp;
                          FileInputStream readFis = null;
                            // Create the RandomAccessFile
                      try{
                                 readFis = new FileInputStream(readFile);
                           catch(Exception e) {
                                throw new IOException(e.getMessage());
                           long tempLong;
                      StringBuffer buffer = new StringBuffer();
                            do {
                                if ((length - ttlBytesRead) > 8192)
                                         tempLong = 8192;
                                    else
                                        tempLong = (length - ttlBytesRead);
                                 temp = new Long((length - ttlBytesRead) > 8192 ? 8192 : (length - ttlBytesRead));
                                   noOfBytesToRead = temp.intValue();
                                  if(noOfBytesToRead == 0)
                                            break;
                              // Read the specified no of bytes into the byte
                                    // array from the file.
                             try {
                                       readFis.read(bytes,0,noOfBytesToRead);
                                   catch(Exception e1) {
                                       throw new IOException(e1.getMessage());
                                   String str  = new String(bytes, 0, noOfBytesToRead);
                                buffer.append(str);
                                    ttlBytesRead += noOfBytesToRead;
                            } while(ttlBytesRead < length);
                     try {
                               readFis.close();
                           catch(Exception e1) {}
                            JarParser jp = new JarParser("test.jar", buffer.toString().getBytes());
                     TestClassLoader tcl = new TestClassLoader(jp);
                      Class class1 = tcl.findClass("com.test.TestFileWrite");
                     Object obj = class1.newInstance();
                   catch(Exception e) {
                        e.printStackTrace();
    }JarParser is the class which parses through the jar file and caches the contents as bytes.
    The test.jar contains a single class which writes into the user's home directory. As you can see, I have granted only read access on the home dir.
    When I run this however, the newly loaded class does manage to write into the file system with no problems. Is there anything further that I need to do to enable restriction on the file system ?
    Thanks.

    If I've been reading correctly, they don't want you
    subclassing SecurityManager for security any more.
    Everything should be handled by the AccessController
    using Permission objects. The easiest way to configure
    the AccessController is through policy files.erg. where did you read this? I checked the 1.5.0 beta API just now, and nothing is officially deprecated.
    :{  I don't have time to figure out the AccessController API right now.
    I have yet to find a good tutorial on the matter of
    security and classloaders. If anyone has a good
    reference, it would be much appreciated.I second that.
    And as a temporary solution (because we're already behind schedule), I went ahead and wrote my own SecurityManager, using the ideas I mentioned above.
    I'm posting it at the site below in case anyone can offer any feedback (such as pointing out fatal weaknesses). We tried yesterday for an hour or so to break it, and it withstood all our tests; but security is not our specialty, so there's probably room for improvement.
    (I'd post it in this message, but it's a wee bit large.)
    www.personal.utulsa.edu/~jeremy-wood/software/ThreadBasedSecurityManager.java
    (And if it passes your scrutiny and looks useful, feel free to use it. But note the disclaimers.)

  • Weblogic Class Loading issue

    Note: I am not sure what is the best suitable subject for this issue.
    Stack Trace:
    Error 1)
    &lt;Dec 30, 2011 11:02:51 AM GMT+05:30&gt; &lt;Error&gt; &lt;HTTP&gt; &lt;BEA-101017&gt; &lt;[ServletContext@29472630[app:EM11X module:Web path:/Web spec-version:2.5], request: weblogic.servlet.internal.ServletRequestImpl@14d05d1[
    POST /Web/GenerateMealPlanAction.do HTTP/1.1
    Via: 1.1 INDCHN-MGMT01
    Cookie: org.ditchnet.jsp.tabs:CommercialFormulaTabs=; org.ditchnet.jsp.tabs:KitchenTabs=; JSESSIONID=sZQFT9MJQc6vS6MCSXtdjWwSTLCcG6nqL12Fdyj1NFHcp4WnpkCB!1348500068
    Referer: http://130.78.88.83:7001/Web/GenerateMealPlanAction.do?vo.viewCode=generateMealPlanFrame&method=1&&menu_id=DS_DFLT&module_id=DS&function_id=DS_GEN_MEAL_PLAN&function_name=Generate%20Meal%20Plan&function_type=R&access=YYYYN&desktopFlag=N&vo.functionId=DS_GEN_MEAL_PLAN
    Content-Type: application/x-www-form-urlencoded
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.1)
    Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
    Accept-Language: en-us
    Pragma: no-cache
    Connection: Keep-Alive
    Content-Length: 488
    ]] Root cause of ServletException.
    java.lang.IllegalArgumentException: Cannot invoke com.vo.GenerateMealPlanVO.setServingDate on bean class 'class com.vo.GenerateMealPlanVO' - argument type mismatch - had objects of type &quot;java.lang.String&quot; but expected signature &quot;com.core.util.Date&quot;
         at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2181)
         at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:2141)
         at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1948)
         at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:2054)
         at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1015)
         Truncated. see log file for complete stacktrace
    Caused By: java.lang.IllegalArgumentException: argument type mismatch
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2155)
         Truncated. see log file for complete stacktrace
    &gt;
    Error 2)
    &lt;Dec 30, 2011 11:11:19 AM GMT+05:30&gt; &lt;Error&gt; &lt;HTTP&gt; &lt;INDCHN-EPORT01&gt; &lt;AdminServer&gt; &lt;[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'&gt; &lt;&lt;WLS Kernel&gt;&gt; &lt;&gt; &lt;&gt; &lt;1325223679258&gt; &lt;BEA-101017&gt; &lt;[ServletContext@29472630[app:EM11X module:Web path:/Web spec-version:2.5], request: weblogic.servlet.internal.ServletRequestImpl@1da8bfe[
    POST /Web/LookupAction.do HTTP/1.1
    Via: 1.1 INDCHN-MGMT01
    Cookie: org.ditchnet.jsp.tabs:CommercialFormulaTabs=; org.ditchnet.jsp.tabs:KitchenTabs=; JSESSIONID=GhG4T9TJ0ytD8dhRSGBFv2c3v1hNLftTTCJQHp6Qn9C5SnMGTVYF!1348500068
    Referer: http://130.78.88.83:7001/Web/core/lookup/jsp/LookupCriteria.jsp?undefined
    Content-Type: application/x-www-form-urlencoded
    User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; InfoPath.1)
    Accept: */*
    Accept-Language: en-us
    Pragma: no-cache
    Connection: Keep-Alive
    Content-Length: 304
    ]] Root cause of ServletException.
    java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String
         at com.lookup.pojo.web.LookupAction.doActionQuery(LookupAction.java:107)
         at com.core.pojo.web.BaseAction.execute(BaseAction.java:97)
         at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)
         at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
         at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
         at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
         at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
         at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
         at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
         at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
         at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3717)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
         at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
         at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
         at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
         at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
    &gt;
    [b]Analysis:
    Migrating J2EE Application from Oracle 10g Application Server to Oracle 11g Weblogic Server. I am stuck with above two issues. This issue not present while running in Oracle 10g Application Server
    1) I was thinking it is something to do with JSTL versions and the below command is executed to make the JSTL version to jstl 1.1.2
    java weblogic.Deployer -adminurl t3://localhost:7001 -user weblogic -password weblogic -deploy -library D:/Oracle/Middleware/wlserver_10.3/common/deployable-libraries/jstl-1.1.2.war
    The problem remains same.
    2) Now &lt;wls:prefer-web-inf-classes&gt;true&lt;/wls:prefer-web-inf-classes&gt; is added to weblogic.xml to make the Web application to load application specific libraries from WEB-INF/lib directory.
    The problem remains same.
    3) I checked Class Loader Analysis Tool and found conflicting classes and based on CAT recommendation the below list is added to weblogic.xml and &lt;wls:prefer-web-inf-classes&gt;true&lt;/wls:prefer-web-inf-classes&gt; is removed since both cannot co-exist.
         &lt;wls:prefer-application-packages&gt;
                   &lt;wls:package-name&gt;antlr.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;antlr.collections.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;antlr.collections.impl.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;antlr.debug.misc.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;com.mysql.jdbc.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.ejb.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.ejb.spi.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.enterprise.deploy.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.jms.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.management.j2ee.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.resource.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.resource.cci.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.resource.spi.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.security.jacc.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.servlet.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.servlet.http.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.servlet.jsp.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.transaction.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.transaction.xa.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.xml.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.xml.datatype.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.xml.namespace.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.xml.parsers.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.xml.registry.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.xml.transform.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.xml.validation.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;javax.xml.xpath.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.core.lmx.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.core.lvf.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.aq.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.connector.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.dcn.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.diagnostics.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.driver.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.internal.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.oci.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.oracore.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.pool.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.rowset.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.util.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jdbc.xa.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jpub.runtime.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.jsp.provider.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.net.ano.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.net.aso.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.net.jdbc.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.net.jndi.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.net.ns.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.net.nt.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.net.resolver.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.security.o3logon.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.security.o5logon.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.sql.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;oracle.sql.converter.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.apache.commons.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.apache.derby.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.apache.oro.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.apache.xerces.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.apache.xmlcommons.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.gjt.mm.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.joda.time.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.w3c.dom.*&lt;/wls:package-name&gt;
                   &lt;wls:package-name&gt;org.xml.sax.*&lt;/wls:package-name&gt;
              &lt;/wls:prefer-application-packages&gt;
    The problem remains same.
    Your help is greatly appreciated as I am stuck with this issue.

    No I cannot ignore this error while deplyment. I'm not able to deploy the war.
    More ovet this needs to be working as during startup, the servlet loads some xml files and convert into tables for the kiosk in the airport to be working.
    Edited by: [email protected] on Mar 27, 2009 12:24 PM

  • JVM PermGen Class Loading & Unloading Concern

    Hi All,
    My application is spitting out lot of following statements periodically:
    [Loaded sun.reflect.GeneratedMethodAccessor833 from __JVM_DefineClass__] ..
    and ocassionally,
    [Unloading class sun.reflect.GeneratedMethodAccessor1220]
    My application uses lot of RMI and serialization & desrialization process. Initially, it was causing my application to slow down and later on we did the following:
    - Increased the PermGen space.
    - Tune the Garbage Collection Policy for Heap (Enabled ConcurrentMarkSweepGC and ParNewGC)
    After making above changes, we have restarted the application and not experienced slowness again (though we are still monitoring the application). But above statements are still visible, I have following questions:
    - Why "GeneratedMethodAccessor" is being loaded again and again? I guess these are required for accessing or invoking methods on serialized objects and proxy. But aren't they cached as reference in the main class that was loaded by JVM?
    - Does "Unloading class sun.reflect.GeneratedMethodAccessor1220" happen only after full GC runs? In actual, when it actually starts unloading these references?
    Any help shall be really appreciated?

    To add to the above, the classes get unloaded if they are collected.  To be collected they must be eligible.  And the only way that happens if the following are both true.
    1. The class loader is eligible for collection.
    2. There are no active references.

  • Cusotm Class Loader

    I'm trying to use a custom class loader to load specific classes (not handle everything). So in those particular situations I call my custom class loader's loadClass method which will first check for a .class file in a specific directory and use that, otherwise it will get from classpath.
    While testing, it worked perfectly fine. If I didn't put a class file in the directory it used the one from classpath, but as soon as I put the class in the directory then that class would override whatever was in my classpath- perfect.
    However, when I deployed this to WebLogic, the system broke. It seems to load the class fine but during class definition it can not find the other objects I reference within the class, so I get NoClassDefFoundError errors.
    Here's what the code looks like:
        public synchronized Class loadClass(String className, boolean resolveIt, String filePath)
             throws ClassNotFoundException {
            Class result;
            byte  classData[];
            /* Check our local cache of classes */
            result = (Class)classes.get(className);
            if (result != null) {
                return result;
            /* Try to load it from our repository */
            classData = getClassFromFile(className, filePath);
            if (classData != null) {   
                //System.out.println(" found in file");
                /* Define it (parse the class file) */
                result = defineClass(classData, 0, classData.length);
                if (result == null) {
                    throw new ClassFormatError();
                if (resolveIt) {
                    resolveClass(result);
                classes.put(className, result);
                return result;               
            /* Try the classpath */
            return Class.forName(className);
        }any idea what's up?

    I think the "linkage" to types(classes, interfaces) referenced by a class are resolved at the resolveClass method, not the defineClass method. Are you sure that's the method throwing the exception?
    anyway, what I meant is that when a class loaded by your classloader is resolved(linked to all refernced types), the referenced types are searched by your classloader, so you have to ensure it delegates to the appropriate class loader.
    lets say your WebLogic server configuration consists of an EJB/dependency classloader, and a descendent WAR classloader.
    If for example, your classloader is located in a dependency jar, hence loaded by the EJB/dependency classloader, any classes loaded by it that refer to types in the WAR will fail, because they will never get to the WAR classloader.
    I think you should simply create your classloader with a specified parent instead of relying on the classloader that loaded it as a parent.
    Better yet -> I know there are configurations that can be done on some servers(I don't have expirience with WebLogic, but I know it can be done with WebSphere) to configure the behavior you are looking for.
    for example, setting delegation mode to "parent last" on a WAR classloader if you want all classes in WEB-INF/lib to have "priority" over classes on server classpath.
    If this is possible in your case I'm sure it's better than messing around with implementing a custom classloader...

  • ConversionManager - Override and Class Loader Issues

    Hi
    We are using Toplink 10.1.3 deployed withiin 10gAS 10.1.3.
    We have overridden the ConversionManger as documented in tips.
    1. MyConversionManager extends ConversionManager.
    2. We have overriden convertObject
    3. We have a pre-login SessionEventAdapter that sets the ConversionManager.
    We have had issues of classloading within the application previously, particularly where we have two versions of our application deployed on the same App Server instance (potentially with differing versions of MyConversionManager).
    For this reason we only set the ConversionManager within the preLogin event on the Session as follows:
    *//Just set the conversion manager for the session.*
    event.getSession().getLogin().getPlatform().setConversionManager(getConversionManager());
    We no longer set the default conversion manager, as my understanding was that this would set it at the root level within the OC4J instance (meaning that each deployment would override the previous).
    Additionally, we have had to sepcify the class loader to use, within the ovverriden convertObject method, as otherwise start up of Toplink falied, as it was unable to solve references to application classes specified within class indicator mappings. We do this as follows:
    *@Override*
    *public Object convertObject(final Object source, final Class javaClass) {*
    super.setShouldUseClassLoaderFromCurrentThread(true);
    The only know issue with this, is that if I try and use OEM to veiw the Toplink Cache, I just get and AnnotatedClassNotFoundException as it is attempting to use the system class loader (that does not contain our Application classes).
    Two questions therefore:
    1. Is the deployment we have now stable, i.e. overriding the class loader within the overriden Conversion Manager, and only loading this against the session??
    2. How can I get mutiple versions of the application to still work, together with being able to view the Toplink Cache from within OE:M.
    Any help or insight, would be greatly appreciated.
    Marc

    Looks fine, you may also wish to investigate using Converters in your mappings instead of customizing the ConversionManager.
    For the OEM issue, try setting the class loader to be your application class loader instead of the thread one, i.e. MyAppClass.getLoader().
    James : http://www.eclipselink.org

  • Problem lies some where JVM Class Loader

    I suspect that the jar files are in the JPI cache. During applet initialization, the various classes start loading. Then, because of the page trasition,
    the applet gets shutdown by the Java Plug In. Because it doesn't terminate quickly enough, the JPI starts killing threads (java.lang.ThreadDeath).
    The classloader seems to be ungraceful in handling that situation. This seems to leave the classloader's internal state in an inconsitent state.
    Therefore, until the JVM is restarted, the class loading fails.
    Thanks and Regards
    Manoja

    I suspect that the jar files are in the JPI cache. During applet initialization, the various classes start loading. Then, because of the page trasition,
    the applet gets shutdown by the Java Plug In. Because it doesn't terminate quickly enough, the JPI starts killing threads (java.lang.ThreadDeath).
    The classloader seems to be ungraceful in handling that situation. This seems to leave the classloader's internal state in an inconsitent state.
    Therefore, until the JVM is restarted, the class loading fails.
    Thanks and Regards
    Manoja

  • How to load a class dynamically in the current/system class loader

    I need to dynamically load a new jdbc driver jar to the current/system class loader... Please note that creating a new classloader will not help since the DriverManager refers to the systemclassloader itself.
    Restarting the application by appending the jar to its classpath will solve the problem but I want to avoid doing this.

    Did you then create a ClassLoader to load the JDBC
    driver and then install it into the system as
    directed by the JDBC specification (ie
    Class.forName(someClassName))?
    And then try to use it from a class loaded fromsome
    other ClassLoader (i.e. the system class loader)?
    If you did not try this please explain why not.O.K. I just looked at the source to
    java.sql.DriverManager. I did not know what I was
    talking about, as what I suggested above will not
    work.
    This is my new Idea:
    Create a URLClassLoader to load the JDBC driver also
    in this ClassLoader you need to place a helper class
    that does the following:
    public class Helper {
    public Driver getJDBCDriver(String driverClassName,
    String url) {
    try {
    Class.forName(driverClassName);
    Driver d = DriverManager.getDriver(url);
    return d;
    catch(Exception ex) {
    ex.printStackTrace();
    return null;
    }Now create an instance of the Helper class in the new
    ClassLoader, and call its getJDBCDriver method to get
    an instance of the driver (you will probably have to
    create an interface in the root class loader that the
    Helper implements so that you can easily call it).
    Now from the root classloader you can make calls
    directly to the returned Driver and bypass the
    DriverManager and its restrictions on cross
    ClassLoader access.
    The only catch here is that you would have to call to
    the returned Driver directly and not use the Driver
    Manager.This sounds like will work but I did not want to load DriverManager in a new classloader.. I did a hack
    I unzip the jar dynamically in a previously known location (which I included in my classpath when launching the app). The classLoader finds the class now though it did not exist when the app was launched !
    A hack of-course but works eh ..

Maybe you are looking for