Menu

Error on application startup

Help
TSI
2009-07-28
2012-09-28
  • TSI

    TSI - 2009-07-28

    I am using HA-JDBC 2.0.16 together with hibernate/JPA and am getting the following error when the application starts up:

    nested exception is java.lang.ClassCastException: net.sf.hajdbc.balancer.LoadBalancer cannot be cast to net.sf.hajdbc.Balancer

    Anyone have any ideas as to what is going on here?

     
    • Paul Ferraro

      Paul Ferraro - 2009-07-28

      Check your classpath for multiple versions of the ha-jdbc jar.

       
    • TSI

      TSI - 2009-07-29

      There is only a single instance of ha-jdbc-2.0.16-rc-1-jdk1.6.jar in there.

       
    • TSI

      TSI - 2009-07-31

      Here is the full stack trace:

      method failed; nested exception is java.lang.ClassCastException: net.sf.hajdbc.balancer.LoadBalancer cannot be cast to net.sf.hajdbc.Balancer
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
      at java.security.AccessController.doPrivileged(Native Method)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
      at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
      at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
      at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
      at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
      at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:423)
      at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
      at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
      at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
      at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
      at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
      at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
      at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
      at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:830)
      at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:719)
      at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:490)
      at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1149)
      at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
      at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
      at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
      at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
      at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
      at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
      at org.apache.catalina.core.StandardService.start(StandardService.java:516)
      at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
      at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
      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.catalina.startup.Bootstrap.start(Bootstrap.java:288)
      at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
      Caused by: java.lang.ClassCastException: net.sf.hajdbc.balancer.LoadBalancer cannot be cast to net.sf.hajdbc.Balancer
      at $Proxy84.getBalancer(Unknown Source)
      at net.sf.hajdbc.sql.AbstractRootInvocationHandler.<init>(AbstractRootInvocationHandler.java:44)
      at net.sf.hajdbc.sql.DriverInvocationHandler.<init>(DriverInvocationHandler.java:38)
      at net.sf.hajdbc.sql.Driver.connect(Driver.java:86)
      at java.sql.DriverManager.getConnection(DriverManager.java:582)
      at java.sql.DriverManager.getConnection(DriverManager.java:154)
      at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
      at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:111)
      at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2101)
      at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1325)
      at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
      at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
      at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:132)
      at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:224)
      at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:291)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
      at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)

       
    • Paul Ferraro

      Paul Ferraro - 2009-07-31

      Hmm - well, it's definitely a classloader problem. Where does your ha-jdbc jar reside? Can you try moving it to the same location as your jdbc client (i.e. hibernate jar)?

       
    • TSI

      TSI - 2009-08-02

      It resides in the web application's WEB-INF/lib directory, which is the same place as the Spring/Hibernate jar files live.

      The server itself is Tomcat 6, and it's running on Mac OSX, although the problem appears on all other operating systems that I've tried it on as well (Ubuntu and Windows 2003).

       
    • TSI

      TSI - 2009-08-05

      In case anyone else encounters this issue, I've done some digging and found the cause. As the web application was set as the default context, Tomcat would unpack the application .war file and then duplicate the extracted app as ROOT (so you have 2 folders containg the same application). I'm guessing because of the container singletons that HA-JDBC uses, Tomcat gets confused when it loads the duplicated classes and errors out.

      The solution to this is to upload the web app as ROOT.war, this way it will be unpacked directly to the root context and no duplication will occur.

       

Log in to post a comment.