spring-loaded
spring-loaded copied to clipboard
Using Spring-Loaded with IBM WAS Liberty
Hey there,
I'm currently researching the usage of spring-loaded with IBM's WAS Liberty Profile and find it incompatible. When spring-loaded is added as a java agent, Liberty is unable to start properly. Here's a snippet of one of the logs I'm getting.
------Start of DE processing------ = [8/5/15 13:38:19:127 EDT]
Exception = java.lang.ClassNotFoundException
Source = com.ibm.ws.config.admin.internal.ConfigurationStore
probeid = 267
Stack Dump = java.lang.ClassNotFoundException: com.ibm.ws.config.admin.ConfigurationDictionary$CaseInsensitive
at java.lang.Class.forName(Class.java:283)
at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:704)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1696)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1601)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1874)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1433)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2093)
at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:579)
at java.util.TreeMap.readObject(TreeMap.java:2297)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
at java.lang.reflect.Method.invoke(Method.java:620)
at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
at java.lang.reflect.Method.invoke(Method.java:620)
at java.io.ObjectStreamClass.__sljlrmi(ObjectStreamClass.java)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1099)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1996)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1901)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1433)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2093)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1901)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1433)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2093)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1901)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1433)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:429)
at com.ibm.ws.config.admin.internal.ConfigurationStore.deserializeConfigurationData(ConfigurationStore.java:251)
at com.ibm.ws.config.admin.internal.ConfigurationStore.
My assumption is that the ObjectInputStream of the TreeMap is using the classloader of the Spring org.springsource.loaded.ri.ReflectiveInterceptor class instead of the class it should from Liberty. We haven't even reached as far as any application code, which leads me to believe there might be a bug in spring-loaded, though I'm still investigating.
To reproduce the problem, you can download the sample Liberty project from here https://github.com/WASdev/sample.ferret (note: you'll also need maven and ant to run this project, download and add to your path). Using cygwin also makes things a lot easier. Once you have maven and ant installed, follow these instructions:
1. Enter "export IBM_LIBERTY_LICENSE=
Let me know if there is anything else I can provide. Thanks for all of your help.