Enable transactions with mybatis-spring

53 views
Skip to first unread message

Emanuele Pavan

unread,
Dec 10, 2011, 5:58:16 AM12/10/11
to mybatis-user
Hi guys, i read some configurations in forums but i'm not able to make
work the transaction annotation driven of SPring with mybatis. These
is my configuration:

Mybatis 3.0.5
spring libraries 3.0.5
mybatis-spring.1.0.2

ApplicationContext.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:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">

<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url"
value="jdbc:sqlserver://localhost:1433;databaseName=SKEG1" />
<property name="username" value="SKE_WSPU" />
<property name="password" value="generali" />
</bean>

<tx:annotation-driven/>

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="net.generali.corp.dto" />
<property name="mapperLocations">
<list>
<value>classpath:/net/generali/corp/dao/*.xml</value>
<value>classpath:/net/generali/corp/service/*.xml</value>
</list>
</property>
</bean>

<import resource="/beans.xml" />
</beans>

If i delete this piece of code:

<tx:annotation-driven/>

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

server go up perfectly. Instead looking to enable transactions with
that code i get this exception:

10-dic-2011 11.49.12 org.apache.catalina.core.StandardContext
listenerStart
GRAVE: 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 'sqlSessionFactory' defined in ServletContext
resource [/WEB-INF/applicationContext.xml]: Initialization of bean
failed; nested exception is
java.lang.reflect.MalformedParameterizedTypeException
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
527)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:
456)
at org.springframework.beans.factory.support.AbstractBeanFactory
$1.getObject(AbstractBeanFactory.java:291)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:
222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:
288)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:
190)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:
563)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:
895)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:
425)
at
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:
276)
at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:
197)
at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:
47)
at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:
4206)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:
4705)
at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:
799)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:
779)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:
601)
at
org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:
675)
at
org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:
601)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:
502)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:
324)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:
142)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:
1065)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:
1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:
463)
at
org.apache.catalina.core.StandardService.start(StandardService.java:
525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:
754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
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:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: java.lang.reflect.MalformedParameterizedTypeException
at
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:
42)
at
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:
35)
at
sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:
77)
at
sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:
86)
at
sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:
122)
at
sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:
31)
at
sun.reflect.generics.visitor.Reifier.visitArrayTypeSignature(Reifier.java:
141)
at
sun.reflect.generics.tree.ArrayTypeSignature.accept(ArrayTypeSignature.java:
24)
at
sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:
76)
at java.lang.reflect.Method.getGenericParameterTypes(Method.java:282)
at
org.springframework.core.GenericTypeResolver.getTargetType(GenericTypeResolver.java:
65)
at
org.springframework.core.GenericTypeResolver.resolveParameterType(GenericTypeResolver.java:
80)
at
org.springframework.beans.GenericTypeAwarePropertyDescriptor.getWriteMethodParameter(GenericTypeAwarePropertyDescriptor.java:
147)
at
org.springframework.beans.GenericTypeAwarePropertyDescriptor.getPropertyType(GenericTypeAwarePropertyDescriptor.java:
129)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.isExcludedFromDependencyCheck(AbstractAutowireCapableBeanFactory.java:
1234)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.filterPropertyDescriptorsForDependencyCheck(AbstractAutowireCapableBeanFactory.java:
1211)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:
1069)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:
517)
... 35 more

Thanks in advance...hope to solve in some way!

Eduardo

unread,
Dec 10, 2011, 5:23:17 PM12/10/11
to mybatis-user
Hi Emanuele. From my experience a MalformedParameterizedTypeException
is a version conflict. I may happen when you mix different Spring
versions but in this case MyBatis-Spring 1.0.2 is meant to work with
MyBatis 3.0.6 not 3.0.5 so that may cause the problem. Downgrade
MyBatis-Spring to 1.0.1 or upgrade MyBatis to 3.0.6 and post the
results.

Emanuele Pavan

unread,
Dec 12, 2011, 11:04:59 AM12/12/11
to mybatis-user
Thanks Eduardo, it was a problem of libraries compatibility. As you
wrote, updating myBatis to 3.0.6 problem was solved.
Reply all
Reply to author
Forward
0 new messages