Class loader classloader

Java class loader, classloader! Recent production deployment encountered class cast exception, might be due to class loader again.

I will update once verified. Java class loader, got to crack it.

And found myself too focus, tuned to get tired, make me tired to think. Note this!

=================================================================================

Here is the exception encountered,which failed the deployment:

ClassCastException encountered during gcom v3 production release.

2012-06-09 05:08:20,659 INFO [main] spring.ServiceBean - Exposing service with name {http://www.bglobal.com/services/FASService}FASService
2012-06-09 05:08:20,669 INFO [main] ldap.LdapInstanceDescriptorPersistenceHelper - Services environment is OU=PROD
2012-06-09 05:08:20,672 WARN [main] ldap.LdapInstanceDescriptorPersistenceHelper - Could not configure the Realm
javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.jndi.dns.DnsContextFactory. Root exception is
java.lang.ClassCastException: com.sun.jndi.dns.DnsContextFactory cannot be cast to javax.naming.spi.InitialContextFactory
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:659)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:250)
at javax.naming.InitialContext.init(InitialContext.java:226)
at javax.naming.InitialContext.<init>(InitialContext.java:202)
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:87)
at com.bglobal.reuse.serviceframework.directory.Realm.<init>(Realm.java:74)
at com.bglobal.reuse.serviceframework.discovery.ldap.LdapInstanceDescriptorPersistenceHelper.<init>(LdapInstanceDescriptorPersistenceHelper.java:131)
at com.bglobal.reuse.serviceframework.discovery.ldap.LdapInstanceDescriptorPersistenceHelper.<init>(LdapInstanceDescriptorPersistenceHelper.java:102)
at com.bglobal.reuse.serviceframework.discovery.DefaultServiceLocator.<init>(DefaultServiceLocator.java:27)
at com.bglobal.reuse.serviceframework.discovery.Registry.<init>(Registry.java:14)
at com.bglobal.reuse.xfire.extensions.server.listeners.ServiceRegistrationEventListener.getRegistry(ServiceRegistrationEventListener.java:174)
at com.bglobal.reuse.xfire.extensions.server.listeners.ServiceRegistrationEventListener.configureDiscovery(ServiceRegistrationEventListener.java:100)
at com.bglobal.reuse.xfire.extensions.server.listeners.ServiceRegistrationEventListener.endpointRegistered(ServiceRegistrationEventListener.java:53)
at org.codehaus.xfire.service.DefaultServiceRegistry.register(DefaultServiceRegistry.java:58)
at org.codehaus.xfire.spring.ServiceBean.afterPropertiesSet(ServiceBean.java:226)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3910)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4393)
at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeployInternal(TomcatDeployment.java:310)
at org.jboss.web.tomcat.service.deployers.TomcatDeployment.performDeploy(TomcatDeployment.java:142)
at org.jboss.web.deployers.AbstractWarDeployment.start(AbstractWarDeployment.java:461)
at org.jboss.web.deployers.WebModule.startModule(WebModule.java:118)
at org.jboss.web.deployers.WebModule.start(WebModule.java:97)
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.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:157)
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:96)
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:668)
at org.jboss.system.microcontainer.ServiceProxy.invoke(ServiceProxy.java:206)
at $Proxy38.start(Unknown Source)
at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:42)
at org.jboss.system.microcontainer.StartStopLifecycleAction.installAction(StartStopLifecycleAction.java:37)
at org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
at org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
at org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.system.microcontainer.ServiceControllerContext.install(ServiceControllerContext.java:286)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.system.ServiceController.doChange(ServiceController.java:688)
at org.jboss.system.ServiceController.start(ServiceController.java:460)
at org.jboss.system.deployers.ServiceDeployer.start(ServiceDeployer.java:163)
at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:99)
at org.jboss.system.deployers.ServiceDeployer.deploy(ServiceDeployer.java:46)
at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1439)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1157)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1178)
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1210)
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1098)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:781)
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70)
at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53)
at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:361)
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1631)
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:934)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1082)
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:984)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:822)
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
at org.jboss.system.server.profileservice.repository.AbstractProfileService.activateProfile(AbstractProfileService.java:306)
at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:271)
at org.jboss.bootstrap.AbstractServerImpl.start(AbstractServerImpl.java:461)
at org.jboss.Main.boot(Main.java:221)
at org.jboss.Main$1.run(Main.java:556)
at java.lang.Thread.run(Thread.java:619) 

Reason for this:
Team member put some redundant library in the package, which cause diffferent class loader for duplicated class, ultimately caused this ClassCast Exception, which failed the deployment.

      <dependency>
           <groupId>com.ibm.mq</groupId>
           <artifactId>jndi</artifactId>
           <version>${mq.version}</version>
       </dependency>
       <dependency>
           <groupId>com.ibm.mq</groupId>
           <artifactId>jta</artifactId>
           <version>${mq.version}</version>
       </dependency>
       <dependency>
           <groupId>com.ibm.mq</groupId>
           <artifactId>ldap</artifactId>
           <version>${mq.version}</version>
       </dependency>
       <dependency>
           <groupId>com.ibm.mq</groupId>
           <artifactId>postcard</artifactId>
           <version>${mq.version}</version>
       </dependency>
       <dependency>
           <groupId>com.ibm.mq</groupId>
           <artifactId>providerutil</artifactId>
           <version>${mq.version}</version>
       </dependency>
       <dependency>
           <groupId>com.ibm.mq</groupId>
           <artifactId>rmm</artifactId>
           <version>${mq.version}</version>
       </dependency> 

The duplicate javax.naming.spi.InitialContextFactory is also in this library, which could caused different classloader for two same class.

      <dependency>
           <groupId>com.ibm.mq</groupId>
           <artifactId>jndi</artifactId>
           <version>${mq.version}</version>
       </dependency>

Readings:
https://community.jboss.org/wiki/JBossClassLoaderIntroduction

http://docs.jboss.org/jbossas/docs/Server_Configuration_Guide/4/html/Class_Loading_and_Types_in_Java-ClassCastExceptions___Im_Not_Your_Type.html

class loader

http://objectmix.com/weblogic/509088-app-inf-lib-app-inf-classes-classloading.html

i think the problem in above post, is related to the fact, that
Classes loaded by Bootstrap class loader have no visibility into classes
loaded by its descendants (ie Extensions and Systems class loaders).
The classes loaded by system class loader have visibility into classes loaded
by its parents (ie Extensions and Bootstrap class loaders).
If there were any sibling class loaders they cannot see classes loaded by
each other. They can only see the classes loaded by their parent class
loader. For example Sibling1 class loader cannot see classes loaded by
Sibling2 class loader
Both Sibling1 and Sibling2 class loaders have visibilty into classes loaded
by their parent class loaders (eg: System, Extensions, and Bootstrap)classloader

java class file version

yesterday trying to build the current project, in the course, having encountered the class file version problem, like saying “class file version 50 required, yet it’s currently version 49” something like this.

This problem is due to the jdk version difference. The currently compiling class is using a jdk version different from its dependency class, which has been already compiled by a different version jdk.

basically, class version 50, is compiled using jdk 6. version 49 using jdk 5. version 48 using jdk 4