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?
ThanksBy 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,
--DasYou 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 AMHello 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 youJava 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 “web-inf/classes” 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.) -
Note: I am not sure what is the best suitable subject for this issue.
Stack Trace:
Error 1)
<Dec 30, 2011 11:02:51 AM GMT+05:30> <Error> <HTTP> <BEA-101017> <[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 "java.lang.String" but expected signature "com.core.util.Date"
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
>
Error 2)
<Dec 30, 2011 11:11:19 AM GMT+05:30> <Error> <HTTP> <INDCHN-EPORT01> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1325223679258> <BEA-101017> <[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)
>
[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 <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> 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 <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes> is removed since both cannot co-exist.
<wls:prefer-application-packages>
<wls:package-name>antlr.*</wls:package-name>
<wls:package-name>antlr.collections.*</wls:package-name>
<wls:package-name>antlr.collections.impl.*</wls:package-name>
<wls:package-name>antlr.debug.misc.*</wls:package-name>
<wls:package-name>com.mysql.jdbc.*</wls:package-name>
<wls:package-name>javax.ejb.*</wls:package-name>
<wls:package-name>javax.ejb.spi.*</wls:package-name>
<wls:package-name>javax.enterprise.deploy.*</wls:package-name>
<wls:package-name>javax.jms.*</wls:package-name>
<wls:package-name>javax.management.j2ee.*</wls:package-name>
<wls:package-name>javax.resource.*</wls:package-name>
<wls:package-name>javax.resource.cci.*</wls:package-name>
<wls:package-name>javax.resource.spi.*</wls:package-name>
<wls:package-name>javax.security.jacc.*</wls:package-name>
<wls:package-name>javax.servlet.*</wls:package-name>
<wls:package-name>javax.servlet.http.*</wls:package-name>
<wls:package-name>javax.servlet.jsp.*</wls:package-name>
<wls:package-name>javax.transaction.*</wls:package-name>
<wls:package-name>javax.transaction.xa.*</wls:package-name>
<wls:package-name>javax.xml.*</wls:package-name>
<wls:package-name>javax.xml.datatype.*</wls:package-name>
<wls:package-name>javax.xml.namespace.*</wls:package-name>
<wls:package-name>javax.xml.parsers.*</wls:package-name>
<wls:package-name>javax.xml.registry.*</wls:package-name>
<wls:package-name>javax.xml.transform.*</wls:package-name>
<wls:package-name>javax.xml.validation.*</wls:package-name>
<wls:package-name>javax.xml.xpath.*</wls:package-name>
<wls:package-name>oracle.core.lmx.*</wls:package-name>
<wls:package-name>oracle.core.lvf.*</wls:package-name>
<wls:package-name>oracle.jdbc.*</wls:package-name>
<wls:package-name>oracle.jdbc.aq.*</wls:package-name>
<wls:package-name>oracle.jdbc.connector.*</wls:package-name>
<wls:package-name>oracle.jdbc.dcn.*</wls:package-name>
<wls:package-name>oracle.jdbc.diagnostics.*</wls:package-name>
<wls:package-name>oracle.jdbc.driver.*</wls:package-name>
<wls:package-name>oracle.jdbc.internal.*</wls:package-name>
<wls:package-name>oracle.jdbc.oci.*</wls:package-name>
<wls:package-name>oracle.jdbc.oracore.*</wls:package-name>
<wls:package-name>oracle.jdbc.pool.*</wls:package-name>
<wls:package-name>oracle.jdbc.rowset.*</wls:package-name>
<wls:package-name>oracle.jdbc.util.*</wls:package-name>
<wls:package-name>oracle.jdbc.xa.*</wls:package-name>
<wls:package-name>oracle.jpub.runtime.*</wls:package-name>
<wls:package-name>oracle.jsp.provider.*</wls:package-name>
<wls:package-name>oracle.net.ano.*</wls:package-name>
<wls:package-name>oracle.net.aso.*</wls:package-name>
<wls:package-name>oracle.net.jdbc.*</wls:package-name>
<wls:package-name>oracle.net.jndi.*</wls:package-name>
<wls:package-name>oracle.net.ns.*</wls:package-name>
<wls:package-name>oracle.net.nt.*</wls:package-name>
<wls:package-name>oracle.net.resolver.*</wls:package-name>
<wls:package-name>oracle.security.o3logon.*</wls:package-name>
<wls:package-name>oracle.security.o5logon.*</wls:package-name>
<wls:package-name>oracle.sql.*</wls:package-name>
<wls:package-name>oracle.sql.converter.*</wls:package-name>
<wls:package-name>org.apache.commons.*</wls:package-name>
<wls:package-name>org.apache.derby.*</wls:package-name>
<wls:package-name>org.apache.oro.*</wls:package-name>
<wls:package-name>org.apache.xerces.*</wls:package-name>
<wls:package-name>org.apache.xmlcommons.*</wls:package-name>
<wls:package-name>org.gjt.mm.*</wls:package-name>
<wls:package-name>org.joda.time.*</wls:package-name>
<wls:package-name>org.w3c.dom.*</wls:package-name>
<wls:package-name>org.xml.sax.*</wls:package-name>
</wls:prefer-application-packages>
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. -
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.
MarcLooks 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
ManojaI 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
-
I keep getting a pop up on Itunes when I try to add a file saying that ITUNES HAS STOPPED WORKING AN NEEDS TO CLOSE. W indows will notify me when corrected. iuninstalled and reinstalled 3 times to no avail. how do i fix?
-
Is it possible to add columns to segmentation wizzard
Hi, I'd like to know if there would be any way that when i generate a segment with segmantation wizzard and i could add some columns that i need and that the segmentation wizzard populates it. For instance i'd like to add a column for account, to see
-
hi, i am running personal oracle 8i on a windows 98 pc. i would like to use the utl_file function, but am not sure if it is installed or configured correctly. is there a way to verify this? also, i don't think that the 'utl_file_dir = <dirname>' is s
-
Will an archive and install solve account problems?
I want to remove old accounts and create a new one. Currently, I have to authenticate whenever I want to save any of my files. Somehow I fouled up the user library. Will an archive and install of the OS (10.5.8) correct this on my iMac PPC?
-
I was watching a video when it crashed, wont allow me to reset, but can still here clicking sound, any answers?