spring与hibernate+struts2整合问题、

成一粒 2012-03-01 02:20:31
spring+hibernate都已经通过单元测试没有问题但是集成上是struts2启动tomcat就出现这样的错误:

2012-3-1 14:19:38 org.apache.catalina.core.AprLifecycleListener init
信息: An older version 1.1.9 of the Apache Tomcat Native library is installed, while Tomcat recommends version greater then 1.1.10
2012-3-1 14:19:38 org.apache.catalina.core.AprLifecycleListener init
信息: Loaded Apache Tomcat Native library 1.1.9.
2012-3-1 14:19:38 org.apache.catalina.core.AprLifecycleListener init
信息: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
2012-3-1 14:19:39 org.apache.coyote.http11.Http11AprProtocol init
信息: Initializing Coyote HTTP/1.1 on http-8080
2012-3-1 14:19:39 org.apache.coyote.ajp.AjpAprProtocol init
信息: Initializing Coyote AJP/1.3 on ajp-8009
2012-3-1 14:19:39 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 760 ms
2012-3-1 14:19:39 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2012-3-1 14:19:39 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/6.0.13
log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory).
log4j:WARN Please initialize the log4j system properly.
2012-3-1 14:19:40 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring root WebApplicationContext
2012-3-1 14:19:48 org.apache.catalina.core.StandardContext listenerStart
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans.xml]; nested exception is java.lang.OutOfMemoryError: Java heap space
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:420)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
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:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4334)
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.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
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:566)
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.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:216)
at org.springframework.asm.ClassReader.a(Unknown Source)
at org.springframework.asm.ClassReader.readUTF8(Unknown Source)
at org.springframework.asm.ClassReader.readConst(Unknown Source)
at org.springframework.asm.ClassReader.accept(Unknown Source)
at org.springframework.asm.ClassReader.accept(Unknown Source)
at org.springframework.core.type.classreading.SimpleMetadataReader.getAnnotationMetadata(SimpleMetadataReader.java:55)
at org.springframework.core.type.filter.AnnotationTypeFilter.matchSelf(AnnotationTypeFilter.java:68)
at org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter.match(AbstractTypeHierarchyTraversingFilter.java:55)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.isCandidateComponent(ClassPathScanningCandidateComponentProvider.java:252)
at org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider.findCandidateComponents(ClassPathScanningCandidateComponentProvider.java:192)
at org.springframework.context.annotation.ClassPathBeanDefinitionScanner.doScan(ClassPathBeanDefinitionScanner.java:201)
at org.springframework.context.annotation.ComponentScanBeanDefinitionParser.parse(ComponentScanBeanDefinitionParser.java:84)
at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:69)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1297)
at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1287)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:135)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:92)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:507)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:398)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:342)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:310)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124)
at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:92)
at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
2012-3-1 14:19:48 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2012-3-1 14:19:48 org.apache.catalina.core.StandardContext start
严重: Context [/ssh2test] startup failed due to previous errors
2012-3-1 14:19:48 org.apache.catalina.core.ApplicationContext log
信息: Closing Spring root WebApplicationContext
2012-3-1 14:19:48 org.apache.coyote.http11.Http11AprProtocol start
信息: Starting Coyote HTTP/1.1 on http-8080
2012-3-1 14:19:48 org.apache.coyote.ajp.AjpAprProtocol start
信息: Starting Coyote AJP/1.3 on ajp-8009
2012-3-1 14:19:48 org.apache.catalina.startup.Catalina start
信息: Server startup in 9062 ms
...全文
478 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxbccsu 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 wuda236556254 的回复:]
引用 22 楼 xiaolong_456 的回复:
jar包的 问题 删除 某些包 就好了!


不知道你说的是那些包?
[/Quote]
Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [beans.xml]; nested exception is java.lang.OutOfMemoryError: Java heap space

异常信息的提示其实很明显:发送一个已初始化的上下文事件给ContextLoaderListener的实例时出现java.lang.OutOfMemoryError: Java heap space,是个org.springframework.beans.factory.BeanDefinitionStoreException,可以看出是Spring还没完成beans.xml中的bean创建,Java堆栈空间就不足了;

集成Struts后出现这个问题,一种是web容器加载初始化了很多Struts的类和实例占用了很多堆栈空间,像Listener、Filter、Servlet等;其次是Spring要为Struts的一些实例注入一些bean,如给Action注入 Service对象,或Spring给Struts创建的一些代理对象;

上面建议了两种解决途径:
1、如果必须这么大的空间才能容下所有的资源,那就需要加大Java堆栈空间;
2、如果初始化应用上下文时,不需要开始就加载创建这么多,就定制一些配置信息来减少;

再说jar包,其实大多是class文件,或某些打包进的其它文件(如属性文件),JVM是按需加载class的,也即没用到的是不会加载的,只要不存在重复、缺失或版本错误的jar,一般不会出错;

当然,上面都是些没有测试过的方法,需要验证,也许这些解决方法具体化时错了,但并不表示解决问题的方向错了;

现在有很多工具能查看和跟踪Java堆栈,那么到底是Java堆栈中哪些占用了很大的空间,不知楼主是否清楚?

CSDN人很多,但也不见得都会很热心、实在的参与讨论;本来想和楼主一起看能否解决问题,等待楼主,结果是 现在桃花都快谢了。最后望楼主早日解决。



成一粒 2012-03-07
  • 打赏
  • 举报
回复
你们的回答都有一些理由。。错误已经找到。
zuxianghuang 2012-03-06
  • 打赏
  • 举报
回复
堆内存小了,加大虚拟机内存
成一粒 2012-03-04
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 xiaolong_456 的回复:]
jar包的 问题 删除 某些包 就好了!
[/Quote]

不知道你说的是那些包?
xiaolong_456 2012-03-04
  • 打赏
  • 举报
回复
jar包的 问题 删除 某些包 就好了!
成一粒 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iisgirl 的回复:]
怎么会报堆空间内存不够呢。
java.lang.OutOfMemoryError: Java heap space
把beans.xml贴出来。
[/Quote]
这是我的beans.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
<context:component-scan base-package="com"/>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<tx:annotation-driven transaction-manager="txManager"/>
</beans>
游一游走一走 2012-03-02
  • 打赏
  • 举报
回复
java.lang.OutOfMemoryError: Java heap space
请加大相关内存大小看看
昨日凡阳 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 lxbccsu 的回复:]

引用 19 楼 iisgirl 的回复:
会就会,不会就不会,装什么。

你就等着工作中做你会的事情。

楼主,如果没能解决,冲着这股学习的劲,我帮你帮到底;告诉我你联系方式,没解决,我再不来CSDN。
[/Quote]
好自为之吧
lxbccsu 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 iisgirl 的回复:]
会就会,不会就不会,装什么。
[/Quote]
你就等着工作中做你会的事情。

楼主,如果没能解决,冲着这股学习的劲,我帮你帮到底;告诉我你联系方式,没解决,我再不来CSDN。
昨日凡阳 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lxbccsu 的回复:]

引用 17 楼 iisgirl 的回复:
引用 13 楼 lxbccsu 的回复:

引用 12 楼 wuda236556254 的回复:
那句话是从com这个包开始搜索所有的子包

首先来说 偶是个spring盲(不要笑,确实没用过Spring, 可以说是SSH盲,应该好好的学习下了,要不赶不上时代了)。但分析下:
不是说Spring有个核心功能是 依赖注入(DI),注入的是什么……
[/Quote]

会就会,不会就不会,装什么。
lxbccsu 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 iisgirl 的回复:]
引用 13 楼 lxbccsu 的回复:

引用 12 楼 wuda236556254 的回复:
那句话是从com这个包开始搜索所有的子包

首先来说 偶是个spring盲(不要笑,确实没用过Spring, 可以说是SSH盲,应该好好的学习下了,要不赶不上时代了)。但分析下:
不是说Spring有个核心功能是 依赖注入(DI),注入的是什么呢,就是你上面的这个Java heap spa……
[/Quote]
懒得根你这样人说;

建议最好的修改测试还是这样:
<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" />

昨日凡阳 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lxbccsu 的回复:]

引用 12 楼 wuda236556254 的回复:
那句话是从com这个包开始搜索所有的子包

首先来说 偶是个spring盲(不要笑,确实没用过Spring, 可以说是SSH盲,应该好好的学习下了,要不赶不上时代了)。但分析下:
不是说Spring有个核心功能是 依赖注入(DI),注入的是什么呢,就是你上面的这个Java heap space中的对象(当然应该Spring产生的),这……
[/Quote]

没用过都敢在这里说。
ll894311655 2012-03-02
  • 打赏
  • 举报
回复
感觉是版本的问题。。。。检查所用的包是否正确,配置文件是否正确。。。。
lxbccsu 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 wuda236556254 的回复:]
我用的是Myeclipse自己带的tomcat
[/Quote]
这个不是问题,不会修改带的那个Tomcat,就下载个Tomcat;

看了下这个<context:component-scan > element:(你可以学习下 3.12. 对受管组件的Classpath扫描)
http://fengyin.name/ij2ee/spring/beans.html#beans-annotation-config

同时参考:(把下面的地址直接在IE或FF中输入,找到<xsd:element name="component-scan">)
http://www.springframework.org/schema/context/spring-context-2.5.xsd

偶想可以这样修改再测试(根据你的实际包路径情况修改):
<context:component-scan base-package="com" annotation-config="false">
<context:include-filter type="regex" expression=".service.impl.*ServiceImpl"/>
<context:include-filter type="regex" expression=".dao.impl.*DaoImpl"/>
</context:component-scan>
成一粒 2012-03-02
  • 打赏
  • 举报
回复
我用的是Myeclipse自己带的tomcat
lxbccsu 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wuda236556254 的回复:]
那句话是从com这个包开始搜索所有的子包
[/Quote]
首先来说 偶是个spring盲(不要笑,确实没用过Spring, 可以说是SSH盲,应该好好的学习下了,要不赶不上时代了)。但分析下:
不是说Spring有个核心功能是 依赖注入(DI),注入的是什么呢,就是你上面的这个Java heap space中的对象(当然应该Spring产生的),这些对象为什么产生了这么多,使得Java heap space都不足了?(楼主就可以分析下了)

你可以这样测试:
先把这配置注销,采用典型的Bean配置,就是象<bean id="sessionFactory">这样做, 看还会出现那个异常不。

当然最好是学习下这个:
<context:component-scan base-package="com"/>
看是不是在这个文件中有定义:spring-context-2.5.xsd(当然这需要了解XML Schema)

成一粒 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lxbccsu 的回复:]
引用 10 楼 iisgirl 的回复:
引用 9 楼 lxbccsu 的回复:

引用 6 楼 iisgirl 的回复:
怎么会报堆空间内存不够呢。
java.lang.OutOfMemoryError: Java heap space
把beans.xml贴出来。

怎么要 bean 贴出了?

直接修改%tomcat服务器路径%/bin下的catalina.bat:
在……
[/Quote]
那句话是从com这个包开始搜索所有的子包
lxbccsu 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 iisgirl 的回复:]
引用 9 楼 lxbccsu 的回复:

引用 6 楼 iisgirl 的回复:
怎么会报堆空间内存不够呢。
java.lang.OutOfMemoryError: Java heap space
把beans.xml贴出来。

怎么要 bean 贴出了?

直接修改%tomcat服务器路径%/bin下的catalina.bat:
在首行加入下面的参数设置:
set JAVA……
[/Quote]
说了一大堆,却不指出你认为有问题的地方;

第一时间解决问题竟不是根据Exception提示来解决?
而且一般root cause在此能发现;

建议楼主分析这句:
<context:component-scan base-package="com"/>
昨日凡阳 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lxbccsu 的回复:]

引用 6 楼 iisgirl 的回复:
怎么会报堆空间内存不够呢。
java.lang.OutOfMemoryError: Java heap space
把beans.xml贴出来。

怎么要 bean 贴出了?

直接修改%tomcat服务器路径%/bin下的catalina.bat:
在首行加入下面的参数设置:
set JAVA_OPTS= -Xms256m -Xmx51……
[/Quote]

之所以让lz贴出bean.xml,是为了查明原因。
lz现在遇到的是,加了struts就报这个错。

至于修改什么,修改多少,lz自然会去了解jvm相关原理。
但是并不是,一遇到java.lang.OutOfMemoryError: Java heap space
就去改web服务器的配置。
lxbccsu 2012-03-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 iisgirl 的回复:]
怎么会报堆空间内存不够呢。
java.lang.OutOfMemoryError: Java heap space
把beans.xml贴出来。
[/Quote]
怎么要 bean 贴出了?

直接修改%tomcat服务器路径%/bin下的catalina.bat:
在首行加入下面的参数设置:
set JAVA_OPTS= -Xms256m -Xmx512m -XX:MaxNewSize=256m -XX:MaxPermSize=512m

在运行测试。
加载更多回复(6)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧