Menu

Problem with context loading

2004-08-10
2004-08-10
  • Emmanuel Boudrant

    Hi,

    I have a problem for loading my Spring context inside an ear deployed on Weblogic 8. I use a web ContextListener .
    My context contains a hibernate  sessionFactory which use vairous hibernate mapping files (*.hbm.xml). My hibernate mapping files
    are in a jar bundled in ear file.

    So here my EAR structure

    - various jars (spring 1.0.2, hibernate...)
    - my-hibernate-ressource.jar (containing my hibernate mapping files)
    - my-hibernate-dao.jar (containing my hibernate daos/managers)
    - ejbjar.war
    - webapp.war
        - webwork jars
        - MyContextListener.class
       
    Here my code in MyContextListener :

    public void contextInitialized(ServletContextEvent contextEvent) {
        log.info("Initlializing Booking service...");
        try {
       
            log.info("ClassPathResource.class loaded in :" + ClassPathResource.class.getClassLoader());
            log.info("BookingContextListener.class loaded in     :" + BookingContextListener.class.getClassLoader());
            log.info("BsContract.xml found " + new ClassPathResource("com/foo/BsContract.hbm.xml").getInputStream());
           
            XmlWebApplicationContext ctx = new XmlWebApplicationContext();
            ctx.setServletContext(contextEvent.getServletContext());
            ctx.refresh();
           
            Spring.setContext(ctx);
           
        } catch (Exception e) {
            log.error(e, e);
        }
        log.info("Initlialize of Booking service : done");
    }

    Here the server trace :

    2004-08-10 16:17:19,838 [user : ] INFO  (BookingContextListener.java:31) - Initlializing Booking service...
    2004-08-10 16:17:19,838 [user : ] INFO  (BookingContextListener.java:35) - ClassPathResource.class loaded in :weblogic.utils.classloaders.GenericClassLoader@ff431c finder: weblogic.utils.classloaders.MultiClassFinder@22e2f9 annotation: bookingservice-app-1.0.0@
    2004-08-10 16:17:19,838 [user : ] INFO  (BookingContextListener.java:36) - BookingContextListener.class loaded in       :weblogic.utils.classloaders.ChangeAwareClassLoader@10020f9 finder: weblogic.utils.classloaders.MultiClassFinder@28fde4 annotation: bookingservice-app-1.0.0@/bookingservice-we
    2004-08-10 16:17:19,838 [user : ] INFO  (BookingContextListener.java:38) - BsContract.xml found weblogic.utils.zip.SafeZipFileInputStream@1cdc8f4
    2004-08-10 16:17:19,900 [user : ] INFO  (XmlBeanDefinitionReader.java:118) - Loading XML bean definitions from resource [/WEB-INF/applicationContext.xml] of ServletContext
    2004-08-10 16:17:19,963 [user : ] INFO  (AbstractXmlApplicationContext.java:68) - Bean factory for application context [Root XmlWebApplicationContext]: org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [MBS_QUEUE,MBS_EXTERNAL_ID,EAI_DATASOURCE,sessionFactory,tr
    2004-08-10 16:17:19,979 [user : ] INFO  (AbstractApplicationContext.java:249) - 9 beans defined in ApplicationContext [Root XmlWebApplicationContext]
    2004-08-10 16:17:19,994 [user : ] INFO  (AbstractApplicationContext.java:337) - No MessageSource found for context [Root XmlWebApplicationContext]: using empty StaticMessageSource
    2004-08-10 16:17:20,010 [user : ] INFO  (UiApplicationContextUtils.java:67) - No ThemeSource found for [Root XmlWebApplicationContext]: using ResourceBundleThemeSource
    2004-08-10 16:17:20,010 [user : ] INFO  (AbstractApplicationContext.java:358) - Refreshing listeners
    2004-08-10 16:17:20,057 [user : ] INFO  (DefaultListableBeanFactory.java:168) - Pre-instantiating singletons in factory [org.springframework.beans.factory.support.DefaultListableBeanFactory defining beans [MBS_QUEUE,MBS_EXTERNAL_ID,EAI_DATASOURCE,sessionFactory,transactionManager,bsContractDao,...
    2004-08-10 16:17:20,057 [user : ] INFO  (AbstractBeanFactory.java:158) - Creating shared instance of singleton bean 'MBS_QUEUE'
    2004-08-10 16:17:20,213 [user : ] INFO  (AbstractBeanFactory.java:158) - Creating shared instance of singleton bean 'MBS_EXTERNAL_ID'
    2004-08-10 16:17:20,229 [user : ] INFO  (AbstractBeanFactory.java:158) - Creating shared instance of singleton bean 'EAI_DATASOURCE'
    2004-08-10 16:17:20,244 [user : ] INFO  (AbstractBeanFactory.java:158) - Creating shared instance of singleton bean 'sessionFactory'
    2004-08-10 16:17:20,307 [user : ] INFO  (Environment.java:462) - Hibernate 2.1.4
    2004-08-10 16:17:20,307 [user : ] INFO  (Environment.java:491) - hibernate.properties not found
    2004-08-10 16:17:20,307 [user : ] INFO  (Environment.java:522) - using CGLIB reflection optimizer
    2004-08-10 16:17:20,322 [user : ] ERROR (BookingContextListener.java:47) - org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in resource [/WEB-INF/applicationContext.xml] of ServletContext: Initialization of bean failed; nested excep
                                            com/foo/BsContract.hbm.xml
                                    ]
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in resource [/WEB-INF/applicationContext.xml] of ServletContext: Initialization of bean failed; nested exception is java.io.FileNotFoundException: Could not open class path resource [
                                            com/foo/BsContract.hbm.xml
                                    ]
    java.io.FileNotFoundException: Could not open class path resource [
                                            com/foo/BsContract.hbm.xml
                                    ]
            at org.springframework.core.io.ClassPathResource.getInputStream()Ljava.io.InputStream;(ClassPathResource.java:84)
            at org.springframework.orm.hibernate.LocalSessionFactoryBean.afterPropertiesSet()V(LocalSessionFactoryBean.java:322)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(Ljava.lang.String;Lorg.springframework.beans.factory.support.RootBeanDefinition;Ljava.lang.Object;)V(AbstractAutowireCapableBeanFactory.java:801)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(Ljava.lang.String;Lorg.springframework.beans.factory.support.RootBeanDefinition;Z)Ljava.lang.Object;(AbstractAutowireCapableBeanFactory.java:249)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(Ljava.lang.String;Lorg.springframework.beans.factory.support.RootBeanDefinition;)Ljava.lang.Object;(AbstractAutowireCapableBeanFactory.java:177)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(Ljava.lang.String;)Ljava.lang.Object;(AbstractBeanFactory.java:159)
           
           
           
    So, If I resume, when I use directly this : log.info("BsContract.xml found " + new ClassPathResource("com/foo/BsContract.hbm.xml").getInputStream());
    It is working but by using the XmlWebApplicationContext, is is not working.

    Regarding the classLoader, I have two differents classLoader :

    EarClassLoader : Containing Spring, Hibernate, My hibernate class/ressources...
    WarClassLoader : Containing all the EAR class/ressource +  my WEB-INF/classes and WEB-INF/lib

    I cannot understand this problem, any idea ?

    Of course, I check the ressource path and the EAR classpath in manifest, all is ok.

    Thx,
    -emmanuel

     
    • Emmanuel Boudrant

      I just try to add a bean before my sessionFactory declaration (bsContract). The class com/foo/BsContract.class is in same jar than com/foo/BsContract.hbm.xml

      <bean id="bsContract" class="com.foo.BsContract"/>

      <bean id="sessionFactory"
          class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
          <property name="mappingResources">
              <list>
                  <value>
                      com/foo/BsContract.hbm.xml
                  </value>
              </list>
          </property>
          <property name="hibernateProperties">
              <props>
                  <prop key="hibernate.dialect">
                      net.sf.hibernate.dialect.OracleDialect
                  </prop>
              </props>
          </property>
          <property name="dataSource">
              <ref bean="EAI_DATASOURCE" />
          </property>
      </bean>

      When I run with this I have :

      2004-08-10 16:17:20,229 [user : ] INFO (AbstractBeanFactory.java:158) - Creating shared instance of singleton bean 'EAI_DATASOURCE'
      2004-08-10 16:17:20,238 [user : ] INFO (AbstractBeanFactory.java:158) - Creating shared instance of singleton bean 'bsContract'
      2004-08-10 16:17:20,244 [user : ] INFO (AbstractBeanFactory.java:158) - Creating shared instance of singleton bean 'sessionFactory'
      2004-08-10 16:17:20,307 [user : ] INFO (Environment.java:462) - Hibernate 2.1.4
      2004-08-10 16:17:20,307 [user : ] INFO (Environment.java:491) - hibernate.properties not found
      2004-08-10 16:17:20,307 [user : ] INFO (Environment.java:522) - using CGLIB reflection optimizer
      2004-08-10 16:17:20,322 [user : ] ERROR (BookingContextListener.java:47) - org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in resource [/WEB-INF/applicationContext.xml] of ServletContext: Initialization of bean failed; nested excep
      com/foo/BsContract.hbm.xml
      ]
      org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in resource [/WEB-INF/applicationContext.xml] of ServletContext: Initialization of bean failed; nested exception is java.io.FileNotFoundException: Could not open class path resource [
      com/foo/BsContract.hbm.xml
      ]
      java.io.FileNotFoundException: Could not open class path resource [
      com/foo/BsContract.hbm.xml
      ]

      So the *.class is ok but the *.hbm.xml is not visible by Spring !

       
    • Emmanuel Boudrant

      In fact it came from my applicationContext.xml formatting

              <property name="mappingResources">
                  <list>
                      <value>
                          com/foo/BsContract.hbm.xml
                      </value>
                  </list>
              </property>

      Spring try to open a file named :

      "
                          com/foo/BsContract.hbm.xml
                      "

      I open an JIRA issue : http://opensource.atlassian.com/projects/spring/browse/SPR-254

       

Log in to post a comment.

MongoDB Logo MongoDB