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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
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 !
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
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 !
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