Le printemps des transactions ne sont pas commettre
J'ai du mal à obtenir mon printemps géré les opérations de commettre, quelqu'un pourrait-veuillez repérer ce que j'ai fait de mal. Tous mes tableaux sont mysql InnonDB tables. Mon RemoteServiceServlet (GWT) est comme suit:
public class TrainTrackServiceImpl extends RemoteServiceServlet implements TrainTrackService {
@Autowired
private DAO dao;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext());
AutowireCapableBeanFactory beanFactory = ctx.getAutowireCapableBeanFactory();
beanFactory.autowireBean(this);
}
@Transactional(propagation= Propagation.REQUIRED, rollbackFor=Exception.class)
public UserDTO createUser(String firstName, String lastName,
String idNumber, String cellPhone, String email, int merchantId) {
User user = new User();
user.setFirstName(firstName);
user.setLastName(lastName);
user.setIdNumber(idNumber);
user.setCellphone(cellPhone);
user.setEmail(email);
user.setDateCreated(new Date());
Merchant merchant = (Merchant) dao.find(Merchant.class, merchantId);
if (merchant != null) {
user.setMerchant(merchant);
}
//Save the user.
dao.saveOrUpdate(user);
UserDTO dto = new UserDTO();
dto.id = user.getId();
dto.firstName = user.getFirstName();
dto.lastName = user.getLastName();
return dto;
}
Le DAO est comme suit:
public class DAO extends HibernateDaoSupport {
private String adminUsername;
private String adminPassword;
private String godUsername;
private String godPassword;
public String getAdminUsername() {
return adminUsername;
}
public void setAdminUsername(String adminUsername) {
this.adminUsername = adminUsername;
}
public String getAdminPassword() {
return adminPassword;
}
public void setAdminPassword(String adminPassword) {
this.adminPassword = adminPassword;
}
public String getGodUsername() {
return godUsername;
}
public void setGodUsername(String godUsername) {
this.godUsername = godUsername;
}
public String getGodPassword() {
return godPassword;
}
public void setGodPassword(String godPassword) {
this.godPassword = godPassword;
}
public void saveOrUpdate(ModelObject obj) {
getHibernateTemplate().saveOrUpdate(obj);
}
Et mon applicationContext.xml est comme suit:
<context:annotation-config/>
<context:component-scan base-package="za.co.xxx.traintrack.server"/>
<!-- Application properties -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>file:${user.dir}/@propertiesFile@</value>
</list>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${connection.dialect}</prop>
<prop key="hibernate.connection.username">${connection.username}</prop>
<prop key="hibernate.connection.password">${connection.password}</prop>
<prop key="hibernate.connection.url">${connection.url}</prop>
<prop key="hibernate.connection.driver_class">${connection.driver.class}</prop>
<prop key="hibernate.show_sql">${show.sql}</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.c3p0.min_size">5</prop>
<prop key="hibernate.c3p0.max_size">20</prop>
<prop key="hibernate.c3p0.timeout">300</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
<prop key="hibernate.c3p0.idle_test_period">60</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>za.co.xxx.traintrack.server.model.Answer</value>
<value>za.co.xxx.traintrack.server.model.Company</value>
<value>za.co.xxx.traintrack.server.model.CompanyRegion</value>
<value>za.co.xxx.traintrack.server.model.Merchant</value>
<value>za.co.xxx.traintrack.server.model.Module</value>
<value>za.co.xxx.traintrack.server.model.Question</value>
<value>za.co.xxx.traintrack.server.model.User</value>
<value>za.co.xxx.traintrack.server.model.CompletedModule</value>
</list>
</property>
</bean>
<bean id="dao" class="za.co.xxx.traintrack.server.DAO">
<property name="sessionFactory" ref="sessionFactory"/>
<property name="adminUsername" value="${admin.user.name}"/>
<property name="adminPassword" value="${admin.user.password}"/>
<property name="godUsername" value="${god.user.name}"/>
<property name="godPassword" value="${god.user.password}"/>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<!-- enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="transactionManager"/>
Si je change la sessionFactory propriété autoCommit=vrai alors mon objet ne se persisited.
<prop key="hibernate.connection.autocommit">true</prop>
avez-vous essayé de tourner le printemps de l'exploitation forestière pour voir exactement où cela va mal?
OriginalL'auteur Clinton Bosch | 2010-06-07
Vous devez vous connecter pour publier un commentaire.
Quand GWT appels
createUser
, cet appel ne va pas au moyen d'un Ressort de transactionnelle proxy. Afin d'utiliser@Transactional
vous pouvez introduire un niveau supplémentaire d'indirection:MODIFIER: Vous pouvez également utiliser spring4gwt au lieu de.
OriginalL'auteur axtavt
J'ai eu un problème similaire avec la transaction ne pas s'engager, par conséquent, de la création de serrures sur les lignes, jusqu'à ce que j'ai trouvé que j'avais un autre DAO (avec @transactional annotations) qui n'a pas participé à la transaction, mais néanmoins, il a été appelé avant transactionnelle dao.
J'ai nettoyé que dao et il a travaillé par la suite.
OriginalL'auteur Alexander
Utilisation PROPAGATION_NOT_SUPPORTED comme ci-dessous:
OriginalL'auteur Pratip Mondal