大体情况是这样的:
SSH2 添加事务代理后就出错,去掉事务代理后就不报错了 (启动服务器的时候)测试阶段,只有一个Action
希望各位不要觉得代码有点多并不吝指教 解决了 分数绝对不是问题 我另外加分?下面是配置信息:
Spring配置:<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 数据源层 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url" value="jdbc:oracle:thin:@Jeelon:1521:fx"></property>
<property name="username" value="drp"></property>
<property name="password" value="drp"></property>
</bean>
<!-- SessionFactory层-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- 事务管理层Biz-->
<bean id="tm" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 事务代理层 定义父类(为了使得多个Biz时不全部写以增加冗余 写出这个父类 下面的只需要几层次代理父类即可 把不同的目标类taret写出即可) -->
<bean id="BizProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true" lazy-init="true">
<property name="transactionManager" ref="tm"></property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- DAO层-->
<bean id="tUserDAO" class="com.jeelon.drp.dao.impl.TUserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- BIZ层 -->
<bean id="tUserBiz" class="com.jeelon.drp.biz.impl.TUserBiz">
<property name="tUserDAO" ref="tUserDAO"></property>
</bean>
<!-- 继承上面的代理事务 -->
<bean id="moduleProxy" parent="BizProxy">
<property name="target" ref="tUserBiz"></property>
</bean>
<!-- Action层 -->
<bean id="UserAction" class="com.jeelon.drp.view.UserAction">
<property name="tUserBiz" ref="moduleProxy"></property>
</bean>
</beans>struts配置:<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 将struts交给spring管理 -->
<constant name="struts.objectFactory" value="spring"></constant> <package name="user" extends="struts-default">
<action name="login" class="UserAction">
<result name="success">main.jsp</result>
<result name="error">login.jsp</result>
</action>
</package>
</struts> 下面是异常:
SSH2 添加事务代理后就出错,去掉事务代理后就不报错了 (启动服务器的时候)测试阶段,只有一个Action
希望各位不要觉得代码有点多并不吝指教 解决了 分数绝对不是问题 我另外加分?下面是配置信息:
Spring配置:<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 数据源层 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url" value="jdbc:oracle:thin:@Jeelon:1521:fx"></property>
<property name="username" value="drp"></property>
<property name="password" value="drp"></property>
</bean>
<!-- SessionFactory层-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- 事务管理层Biz-->
<bean id="tm" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 事务代理层 定义父类(为了使得多个Biz时不全部写以增加冗余 写出这个父类 下面的只需要几层次代理父类即可 把不同的目标类taret写出即可) -->
<bean id="BizProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true" lazy-init="true">
<property name="transactionManager" ref="tm"></property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- DAO层-->
<bean id="tUserDAO" class="com.jeelon.drp.dao.impl.TUserDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!-- BIZ层 -->
<bean id="tUserBiz" class="com.jeelon.drp.biz.impl.TUserBiz">
<property name="tUserDAO" ref="tUserDAO"></property>
</bean>
<!-- 继承上面的代理事务 -->
<bean id="moduleProxy" parent="BizProxy">
<property name="target" ref="tUserBiz"></property>
</bean>
<!-- Action层 -->
<bean id="UserAction" class="com.jeelon.drp.view.UserAction">
<property name="tUserBiz" ref="moduleProxy"></property>
</bean>
</beans>struts配置:<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 将struts交给spring管理 -->
<constant name="struts.objectFactory" value="spring"></constant> <package name="user" extends="struts-default">
<action name="login" class="UserAction">
<result name="success">main.jsp</result>
<result name="error">login.jsp</result>
</action>
</package>
</struts> 下面是异常:
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserAction' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type '$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised' to required type 'com.jeelon.drp.biz.impl.TUserBiz' for property 'tUserBiz'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.jeelon.drp.biz.impl.TUserBiz] for property 'tUserBiz': no matching editors or conversion strategy found
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:562)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:272)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:196)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4323)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4771)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:785)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:763)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:558)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1124)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1047)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:542)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1390)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:355)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:89)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:312)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:292)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:998)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:772)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:990)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:275)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:424)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:648)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:138)
at org.apache.catalina.startup.Catalina.start(Catalina.java:576)
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:415)
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type '$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised' to required type 'com.jeelon.drp.biz.impl.TUserBiz' for property 'tUserBiz'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.jeelon.drp.biz.impl.TUserBiz] for property 'tUserBiz': no matching editors or conversion strategy found
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:462)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1354)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1313)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
... 43 more
Caused by: java.lang.IllegalStateException: Cannot convert value of type [$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.jeelon.drp.biz.impl.TUserBiz] for property 'tUserBiz': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:289)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:154)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:452)
... 47 more
2011-10-20 22:17:55 org.apache.catalina.core.StandardContext startInternal
严重: Error listenerStart
2011-10-20 22:17:55 org.apache.catalina.core.StandardContext startInternal
严重: Context [/DRP1.0] startup failed due to previous errors
2011-10-20 22:17:55 org.apache.catalina.core.ApplicationContext log
信息: Closing Spring root WebApplicationContext
2011-10-20 22:17:55 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
严重: The web application [/DRP1.0] registered the JBDC driver [oracle.jdbc.driver.OracleDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserAction' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type '$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised' to required type 'com.jeelon.drp.biz.impl.TUserBiz' for property 'tUserBiz'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.jeelon.drp.biz.impl.TUserBiz] for property 'tUserBiz': no matching editors or conversion strategy found
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value
也就是你注入的属性类型不相匹配
应该是实现的这两个接口的问题,经过事物处理的biz对象传过去报出类型转换错误。
你再好好看看吧、
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource" />
</property>
</bean>
<!-- 事务模板 -->
<bean id="baseTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop> <!-- 本文仅简单用一种方式说明。所有方法起事务,可以修改以精细和区别性控制事务 -->
</props>
</property>
</bean>
<!-- 业务对象 -->
<bean id="authService" parent="baseTransactionProxy">
<property name="target">
<bean class="com.xxxx.cms.service.AuthorityService">
<property name="authDao" ref="authDao" />
</bean>
</property>
</bean>
<bean id="departmentService" parent="baseTransactionProxy">
<property name="target">
<bean class="com.xxxx.cms.service.pojo.DepartmentService">
<property name="departmentDao" ref="departmentDao" />
</bean>
</property>
</bean>
<!-- 数据访问对象 -->
<bean id="authDao" class="com.xxxx.cms.dao.jdbc.AuthorityDao">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="departmentDao" class="com.xxxx.cms.dao.jdbc.DepartmentDao">
<property name="dataSource" ref="dataSource" />
</bean> 对比一下这个正确的配置。楼主配的好像有点问题
<bean id="tUserBiz" class="com.jeelon.drp.biz.impl.TUserBiz">
<property name="tUserDAO" ref="tUserDAO"></property>
</bean>
<!-- 继承上面的代理事务 -->
<bean id="moduleProxy" parent="BizProxy">
<property name="target" ref="tUserBiz"></property>
</bean>
<!-- Action层 -->
<bean id="UserAction" class="com.jeelon.drp.view.UserAction">
<property name="tUserBiz" ref="moduleProxy"></property>
</bean>终于被我找到一个问题:
首先看你的错误提醒:
Failed to convert property value of type '$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised' to required type 'com.jeelon.drp.biz.impl.TUserBiz' for property 'tUserBiz'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.jeelon.drp.biz.impl.TUserBiz] for property 'tUserBiz': no matching editors or conversion strategy found
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:462)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1354)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1313)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1067)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:511)
... 43 more
Caused by: java.lang.IllegalStateException: Cannot convert value of type [$Proxy4 implementing com.jeelon.drp.biz.ITUserBiz,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.jeelon.drp.biz.impl.TUserBiz] for property 'tUserBiz': no matching editors or conversion strategy found
这个错误是指:你的tUserBiz在上面配置的是一个BIZ层【即我们平时习惯说的service层】的bean名称,而看看你下面
<!-- Action层 -->
<bean id="UserAction" class="com.jeelon.drp.view.UserAction">
<property name="tUserBiz" ref="moduleProxy"></property>
</bean>这里为action配置biz层注入时,的属性名称又是tUserBiz,两处同名。
导致spring报错无法将com.jeelon.drp.biz.impl.TUserBiz这种类型转换为下面的属性所指的类型。。导致出错。。
把下面<property name="tUserBiz" ref="moduleProxy"></property>这个名称改一下,应该能正确
这里注入moduleProxy代理事务没有问题。是他的属性名和bean名称同名问题。如我上面说的。
非常感谢17楼的朋友细心回答 但是我改名称问题还是仍旧
<property name="tUserBiz" ref="moduleProxy"></property>这里边儿的tUserBiz是我在UserAction里面的setter:private TUserBiz tUserBiz;
public void settUserBiz(TUserBiz tUserBiz) {
this.tUserBiz = tUserBiz;
}
首先 看怎么实例化bean的 如果在web.xml中要有监听器啊
第二个 异常原因地方:Caused by: org.springframework.beans.ConversionNotSupportedException: Failed
ConversionNotSupportedException这个是不是说什么什么源..异常啊!
java.lang.IllegalStateException: Cannot convert value of type [$Proxy4
$Proxy4好像是代理什么的瞎猜的!
换jar试试!期待高人 解答 学习了!
没见过这么智能的Spring,如果直接实现类,他写的这种配置方法必须声明abstract="false"
action中应该用接口吧。 要不然用cglib代理。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!-- 事务管理层Biz-->
这里有问题