@Transactional Spring MyBatis nicht funktioniert

Habe ich eine Feder webapp und alles war ok, aber jetzt brauche ich eine Methode, die zu Transaktions -,

dies ist mein applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- DispatcherServlet Context: defines this servlet's request-processing 
        infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />

    <!-- Bean para Nombre de Cliente -->

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving 
        up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources 
        in the /WEB-INF/views directory -->
   <beans:bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <beans:bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <beans:property name="basename" value="classpath:mensajes" />
        <beans:property name="defaultEncoding" value="UTF-8" />
    </beans:bean>

    <beans:bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <beans:property name="defaultLocale" value="es" />
        <beans:property name="cookieName" value="myAppLocaleCookie"></beans:property>
        <beans:property name="cookieMaxAge" value="3600"></beans:property>
    </beans:bean>


    <interceptors>
        <beans:bean id="localeChangeInterceptor"
            class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            <beans:property name="paramName" value="locale" />
        </beans:bean>
    </interceptors>

    <context:component-scan base-package="com.web.*" />
    <context:component-scan base-package="com.*" />

</beans:beans>

- und das ist meine database.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:p="http://www.springframework.org/schema/p"
    xmlns:c="http://www.springframework.org/schema/c" xmlns:tx="http://www.springframework.org/schema/tx"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
        p:location="monitor-properties/monitor.properties" />


    <bean class="org.mybatis.spring.transaction.SpringManagedTransactionFactory"
        id="springManagedTransactionFactory">
    </bean>

 <!-- 
 <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="mapperLocations" value="classpath:com/*/database/*.xml" />
        <property name="dataSource" ref="dataSource" />
        <property name="transactionFactory" ref="springManagedTransactionFactory" />
    </bean>

    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

    <bean id="adminSaveSettings" class="com.SaveSettings">
        <property name="sqlSession" ref="sqlSession" />
    </bean>

    <!-- ORACLE -->
 <bean id="dataSource" class="com.CustomBasicDataSource" 
        p:driverClassName="${oracle.driverClassName}" p:url="${oracle.url}" p:username="${oracle.username}" 
        p:password="${oracle.password}" />

und in eine service-Klasse, ich habe eine autowired-Eigenschaft, und diese Eigenschaft hat eine Transaktions-Methode wie folgt: ich mache ein update zum ändern einer Zeile zu "2" - Wert, und nachdem ich das werfen einer RuntimeException, und wenn alles gut ist, das update muss man rollback.

public class SaveSettings {

    protected final Logger logger = LoggerFactory.getLogger(getClass());

    private SqlSession sqlSession;


    public SqlSession getSqlSession() {
        return sqlSession;
    }


    public void setSqlSession(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }


    @Transactional(readOnly=false,rollbackFor=Exception.class)
    public int saveNewSettings(WebServer settings) {
        AdminPanelMapper qmap = sqlSession.getMapper(AdminPanelMapper.class);
        int inserted = 0;
        qmap.updateTo2();

        throw new NullPointerException();
    }
}

War ich seit 2 Tagen versucht so viel möglich Lösungen, die ich gefunden habe in google und stackoverflow, aber es läuft nie gut. In database.xml der transactionManager ist ein Kommentar, weil ich versucht hatte, mit anderen Beispielen, die ich gefunden.

Wenn Sie möchten mehr Informationen zu meinem Problem, ich werde Ihnen mehr details, Fragen Sie mich. Sorry, wenn ich nicht gut erklärt.

Danke für alles!!!

EDIT:

Und hier ist der Fehler, wenn ich Schreibe, und beenden Sie die Kommentare für transactionManager bean.

ERROR: org.springframework.web.context.ContextLoader `- Context initialization failed org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 9 in XML document from ServletContext resource [/WEB-INF/spring/database.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 65; cvc-complex-type.2.4.c: El comodín coincidente es estricto, pero no se ha encontrado ninguna declaración para el elemento 'tx:annotation-driven'.`
InformationsquelleAutor isrmor | 2015-03-05
Schreibe einen Kommentar