2009-07-01 60 views
2

我正在将我的EAR/WAR文件部署到Jboss 4.2,并且我已经连接web.xml以加载公共应用上下文文件,所以我可以通过父弹簧上下文共享公共bean 。基于Spring的Web应用中的父上下文

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"  
version="2.4"> 
<display-name>Validation Service</display-name> 
<description>Validation Service</description> 

<context-param> 
    <param-name>locatorFactorySelector</param-name> 
    <param-value>classpath*:coreBeanContext.xml</param-value> 
</context-param> 
<context-param> 
    <param-name>parentContextKey</param-name> 
    <param-value>coreBeanFactory</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

和我的'coreBeanFactory'被定义为使用'ClassPathXmlApplicationContext'。

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd" 
    default-lazy-init="true"> 

<bean id="coreBeanFactory" 
    class="org.springframework.context.support.ClassPathXmlApplicationContext"> 
    <constructor-arg> 
     <value>coreApplicationContext.xml</value> 
    </constructor-arg> 
</bean> 

但启动过程中,coreBeanContext.xml文件被加载,但我得到这个例外

Caused by: org.springframework.beans.factory.access.BootstrapException: 
Unable to return specified BeanFactory instance: factory key [coreBeanFactory], 
from group with resource name [classpath*:coreBeanContext.xml]; 
nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: 
Bean named 'coreBeanFactory' must be of type 
[org.springframework.beans.factory.BeanFactory], 
but was actually of type 
[org.springframework.context.support.ClassPathXmlApplicationContext] 
at org.springframework.beans.factory.access.SingletonBeanFactoryLocator.useBeanFactory(SingletonBeanFactoryLocator.java:410) 

我想知道为什么SingletonBeanFactoryLocator的是捡这个bean了为错误的类型?

UPDATE(20/06/2009)

添加完整堆栈跟踪。我的应用程序使用@Webservice注释,并在部署期间生成WSDL文件。接口中的一个对象引用需要在其构造函数中连接到数据库 - 以及对导致此问题的spring数据源bean引用的查找。 ATM - 我正在考虑使用SpringBeanAutowiringInterceptor来确保对象被正确注入。

org.jboss.deployment.DeploymentException: Could not create deployment: file:/C:/projects/libs/jboss-4.2.2.GA/server/default/tmp/deploy/tmp30413validationservice.ear-contents/validation-ejb.jar; - nested throwable: (java.lang.ExceptionInInitializerError) 
at org.jboss.deployment.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:53) 
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1050) 
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1015) 
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819) 
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782) 
at sun.reflect.GeneratedMethodAccessor20.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) 
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) 
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) 
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:659) 
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) 
at $Proxy9.deploy(Unknown Source) 
at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421) 
at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634) 
at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263) 
at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336) 
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289) 
at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245) 
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) 
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) 
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) 
at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978) 
at $Proxy0.start(Unknown Source) 
at org.jboss.system.ServiceController.start(ServiceController.java:417) 
at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) 
at org.jboss.mx.server.Invocation.invoke(Invocation.java:86) 
at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264) 
at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659) 
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) 
at $Proxy4.start(Unknown Source) 
at org.jboss.deployment.SARDeployer.start(SARDeployer.java:302) 
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025) 
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819) 
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782) 
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766) 
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:585) 
at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155) 
at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94) 
at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133) 
at org.jboss.mx.server.Invocation.invoke(Invocation.java:88) 
at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142) 
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:659) 
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) 
at $Proxy5.deploy(Unknown Source) 
at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482) 
at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362) 
at org.jboss.Main.boot(Main.java:200) 
at org.jboss.Main$1.run(Main.java:508) 
at java.lang.Thread.run(Thread.java:595) 
Caused by: java.lang.ExceptionInInitializerError 
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:585) 
at java.lang.Class.getEnumConstants(Class.java:2903) 
at java.util.EnumMap.<init>(EnumMap.java:109) 
at com.sun.xml.bind.v2.model.impl.RuntimeEnumLeafInfoImpl.<init>(RuntimeEnumLeafInfoImpl.java:83) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createEnumLeafInfo(RuntimeModelBuilder.java:103) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.createEnumLeafInfo(RuntimeModelBuilder.java:79) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:207) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:98) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:79) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:192) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:93) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:79) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:298) 
at com.sun.xml.bind.v2.model.impl.TypeRefImpl.calcRef(TypeRefImpl.java:92) 
at com.sun.xml.bind.v2.model.impl.TypeRefImpl.getTarget(TypeRefImpl.java:69) 
at com.sun.xml.bind.v2.model.impl.RuntimeTypeRefImpl.getTarget(RuntimeTypeRefImpl.java:58) 
at com.sun.xml.bind.v2.model.impl.RuntimeTypeRefImpl.getTarget(RuntimeTypeRefImpl.java:51) 
at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl$1.get(ElementPropertyInfoImpl.java:74) 
at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl$1.get(ElementPropertyInfoImpl.java:77) 
at java.util.AbstractList$Itr.next(AbstractList.java:422) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:238) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:98) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:79) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:192) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:93) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:79) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:298) 
at com.sun.xml.bind.v2.model.impl.TypeRefImpl.calcRef(TypeRefImpl.java:92) 
at com.sun.xml.bind.v2.model.impl.TypeRefImpl.getTarget(TypeRefImpl.java:69) 
at com.sun.xml.bind.v2.model.impl.RuntimeTypeRefImpl.getTarget(RuntimeTypeRefImpl.java:58) 
at com.sun.xml.bind.v2.model.impl.RuntimeTypeRefImpl.getTarget(RuntimeTypeRefImpl.java:51) 
at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl$1.get(ElementPropertyInfoImpl.java:74) 
at com.sun.xml.bind.v2.model.impl.ElementPropertyInfoImpl$1.get(ElementPropertyInfoImpl.java:77) 
at java.util.AbstractList$Itr.next(AbstractList.java:422) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:238) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:98) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:79) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getClassInfo(ModelBuilder.java:192) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:93) 
at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.getClassInfo(RuntimeModelBuilder.java:79) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:298) 
at com.sun.xml.bind.v2.model.impl.ModelBuilder.getTypeInfo(ModelBuilder.java:313) 
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:432) 
at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:286) 
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:139) 
at com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:105) 
at com.sun.xml.bind.api.JAXBRIContext.newInstance(JAXBRIContext.java:116) 
at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilder.createJAXBContext(JAXWSMetaDataBuilder.java:921) 
at org.jboss.ws.metadata.builder.jaxws.JAXWSWebServiceMetaDataBuilder.buildWebServiceMetaData(JAXWSWebServiceMetaDataBuilder.java:146) 
at org.jboss.ws.metadata.builder.jaxws.JAXWSServerMetaDataBuilder.setupProviderOrWebService(JAXWSServerMetaDataBuilder.java:50) 
at org.jboss.ws.metadata.builder.jaxws.JAXWSMetaDataBuilderEJB3.buildMetaData(JAXWSMetaDataBuilderEJB3.java:78) 
at org.jboss.wsf.stack.jbws.UnifiedMetaDataDeploymentAspect.create(UnifiedMetaDataDeploymentAspect.java:71) 
at org.jboss.wsf.framework.deployment.DeploymentAspectManagerImpl.deploy(DeploymentAspectManagerImpl.java:115) 
at org.jboss.wsf.container.jboss42.ArchiveDeployerHook.deploy(ArchiveDeployerHook.java:97) 
at org.jboss.wsf.container.jboss42.DeployerInterceptor.start(DeployerInterceptor.java:90) 
at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188) 
at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95) 
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:659) 
at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210) 
at $Proxy34.start(Unknown Source) 
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025) 
... 67 more 
Caused by: org.springframework.beans.factory.access.BootstrapException: Unable to return specified BeanFactory instance: factory key [coreBeanFactory], from group with resource name [classpath*:coreBeanContext.xml]; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'coreBeanFactory' must be of type [org.springframework.beans.factory.BeanFactory], but was actually of type [org.springframework.context.support.ClassPathXmlApplicationContext] 
at org.springframework.beans.factory.access.SingletonBeanFactoryLocator.useBeanFactory(SingletonBeanFactoryLocator.java:410) 
at xxx.common.utilities.spring.SpringContainerUtilities.getSingletonFactoryBean(SpringContainerUtilities.java:211) 
at xxx.common.utilities.spring.SpringContainerUtilities.getCoreFocusDataSource(SpringContainerUtilities.java:145) 
at xxx.common.collections.LabelSerialCollection.checkForConnection(LabelSerialCollection.java:687) 
at xxx.common.collections.LabelSerialCollection.populate(LabelSerialCollection.java:813) 
at xxx.common.collections.LabelSerialCollection.getInstance(LabelSerialCollection.java:342) 
at xxx.common.enums.SEIProducts.<clinit>(SEIProducts.java:23) 
... 133 more 
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'coreBeanFactory' must be of type [org.springframework.beans.factory.BeanFactory], but was actually of type [org.springframework.context.support.ClassPathXmlApplicationContext] 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168) 
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:884) 
at org.springframework.beans.factory.access.SingletonBeanFactoryLocator.useBeanFactory(SingletonBeanFactoryLocator.java:397) 
... 139 more 
2009-07-20 10:20:20,487 DEBUG [org.jboss.deployment.scanner.URLDeploymentScanner] Watch URL for: file:/C:/projects/libs/jboss-4.2.2.GA/server/default/deploy/validationservice.ear -> file:/C:/projects/libs/jboss-4.2.2.GA/server/default/deploy/validationservice.ear 
2009-07-20 10:20:20,487 ERROR [org.jboss.deployment.scanner.URLDeploymentScanner] Incomplete Deployment listing: 

回答

0

我的猜测是Spring被两个不同的类加载器加载。如果是这种情况,那么webapp的类加载器不能将父上下文转换为BeanFactory。

您的WAR包装在您的EAR中,是否正确?如果是这样,你是否在EAR内部有一个Spring副本,或者你在WAR内是否有额外的Spring JAR?

+0

我在EAR的“LIB”文件夹春天2.5.6的一个副本,和我的战争中没有罐子。 jboss服务器文件夹有一个老版本的spring,但是我确定我的配置在EAR lib文件夹中使用了这个版本。 在我耳边,deployer.xml我目前使用这种隔离级别 <属性名=“隔离”>当我把这个字段设置“假”真 但异常消失。 – emeraldjava 2009-07-01 16:36:21

0

我会将此分类为弹簧配置的问题,而不是JBoss的类加载。你能描述一下你的意图是什么吗?

您是否只需要加载多个应用程序上下文,还是需要以这种方式加载应用程序上下文?

你可以尝试通过web.xml中只是加载单一的应用程序上下文和导入所有其他应用程序上下文在配置或配置所有的背景和让他们通过Spring上下文加载器监听器加载。

如果你有你为什么选择来配置你的应用程序这样的任何特殊要求,请提供更多的细节。推荐的方法是在外部配置所有上下文(在本例中是通过web.xml上下文参数),或者让上下文通过<import/>导入其他上下文。

我希望这可以帮助,
Kariem

相关问题