2015-03-05 4 views
3

У меня есть пружины и веб-приложение все было нормально, но теперь мне нужно один способ быть транзакционными,@Transactional Spring MyBatis не работает

это мой 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> 

и это мой 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}" /> 

и в одном классе обслуживания я есть autowired Prope rty, и это свойство имеет транзакционный метод, подобный этому: я делаю обновление, чтобы изменить одну строку на значение «2», и после того, как я выбрал исключение RuntimeException, и если все хорошо, обновление должно быть откатом.

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(); 
    } 
} 

Я так 2 дня назад, пытаясь так много возможных решений, которые я нашел в Google и StackOverflow, но он никогда не работает хорошо. В database.xml transactionManager является комментарием, потому что я пытался с другими примерами, которые я нашел.

Если вы хотите получить дополнительную информацию о моей проблеме, я дам вам более подробную информацию, спросите меня. Извините, если я не объяснил хорошо.

Спасибо за все!

EDIT:

А вот ошибка, если я пишу и бросить комментарии для TransactionManager боба.

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'.` 

ответ

0

Я не вижу в вашей конфигурации транзакций xml самостоятельно. Вы не забыли поставить там:

<tx:annotation-driven transaction-manager="transactionManager"/> 

ум, что это отличается от пружинного штуковина MVC.

+0

Да, я пробую это несколько часов назад, но где я могу написать эту строку ?, Я пишу это в applicationContext, а в database.xml и не работая, давая мне эту ошибку: – isrmor

+0

Вы также должны добавить пространство имен для своего xml: 'xmlns: tx =" http://www.springframework.org/schema/tx "' –

+0

Да, у меня есть это в моей базе данных.xml, и мое приложение дает мне окончательную ошибку моего вопроса. – isrmor

Смежные вопросы