Spring Transaktionen funktionieren nicht

Diskutiere Transaktionen funktionieren nicht im Application Tier Forum; Hi @ all, ich verzweifel so langsam, ich finde einfach den Fehler nicht. Ich hoffe mir kann jemand helfen: Folgendes, Spring Controller...

  1. Todo
    Todo Mitglied
    Hi @ all,

    ich verzweifel so langsam, ich finde einfach den Fehler nicht.
    Ich hoffe mir kann jemand helfen:

    Folgendes, Spring Controller packt in eine View ein UserDTO Objekt, die erforderlichen Daten werden ausgefüllt und es soll dann in die Datenbank gepackt werden. Meine Datenbank + Transaktion wird so deklariert:
    [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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    Index of /schema/tx
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    Index of /schema/aop
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">

    <tx:annotation-driven />

    <bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://192.168.1.10:3306/ba_am" />
    <property name="username" value="xxxx" />
    <property name="password" value="xxxx" />
    </bean>

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

    </beans>
    [/XML]

    Meine Dao arbeitet mit dem JDBCTemplate von Spring, das Interface:
    Code (Java):

    public interface UserDAO {

    public User getByUsername(String username);
     
     public User getByEmail(String username);
     
     public User getById(Long id);
     
     public void createUser(User user);
     
     ......
    }
     
    Und die Implementierung:
    Code (Java):

    @Repository
    public class UserDAOImpl extends JdbcDaoSupport implements UserDAO {

        @Autowired
        public UserDAOImpl(@Qualifier("mysqlDataSource") DataSource dataSource) {
            setDataSource(dataSource);
        }

        @Override
        public User getByUsername(String username) {
            try {
                return (User) getJdbcTemplate().queryForObject(
                        "select * from tbl_user as u where u.username = ?",
                        new Object[]{username},
                        new UserMapper());
            } catch (EmptyResultDataAccessException erdae) {
                return null;
            }
        }

        @Override
        public User getByEmail(String email) {
            try {
                return (User) getJdbcTemplate().queryForObject(
                        "select * from tbl_user as u where u.email = ?",
                        new Object[]{email},
                        new UserMapper());
            } catch (EmptyResultDataAccessException erdae) {
                return null;
            }
        }

        @Override
        public User getById(Long id) {
            try {
                return (User) getJdbcTemplate().queryForObject(
                        "select * from tbl_user as u where u.user_id = ?",
                        new Object[]{id},
                        new UserMapper());
            } catch (EmptyResultDataAccessException erdae) {
                erdae.printStackTrace();
                return null;
            }
        }

        @Override
        public void createUser(User user) {
            getJdbcTemplate().update(
                    "INSERT INTO tbl_user(create_time, email, enabled, first_name, last_name, "
                    + "password, username) VALUES (?,?,?,?,?,?,?)",
                    new Object[]{
                        user.getCreateTime(), user.getEmail(),
                        user.getEnabled(), user.getFirstName(), user.getLastName(),
                        user.getPassword(), user.getUsername()});

        }

    .....
    }
     

    Und mein Service:
    Code (Java):

    @Service("userRegistrationService")
    @Transactional
    public class UserRegistrationServiceImpl implements UserRegistrationService {

        @Autowired
        UserDAO userdao;

        private final Logger log = Logger.getLogger(UserRegistrationServiceImpl.class.getName());

        @Override
        @Transactional(readOnly = false, rollbackFor = NullPointerException.class, propagation = Propagation.REQUIRED, timeout = 30)
        public void register(final UserDTO userDTO) throws UsernameAlreadyExistsException,
                UserEmailAlreadyExistsException {

            User usernameTest = userdao.getByUsername(userDTO.getUsername());
            if (usernameTest != null) {
                throw new UsernameAlreadyExistsException(userDTO.getUsername());
            }

            User userEmailTest = userdao.getByEmail(userDTO.getEmail());
            if (userEmailTest != null) {
                throw new UserEmailAlreadyExistsException(userDTO.getEmail());
            }

            User toPersitUser = new User();
            toPersitUser.setUsername(userDTO.getUsername());
            toPersitUser.setFirstName(userDTO.getFirstName());
            toPersitUser.setLastName(userDTO.getLastName());
            toPersitUser.setEmail(userDTO.getEmail());
            toPersitUser.setCreateTime(new Date());
            toPersitUser.setEnabled(true);
            toPersitUser.setPassword(RandomStringUtils.random(6, true, true));
            userdao.createUser(toPersitUser);
            // Löst Nullpointer Exception aus
            userdao.createUser(null);
        }
    }
     
    So, das Problem: es ist der erste User trotzdem eingetragen, kann mir jemand sagen was ich falsch mache? Danke schon mal ihr würdet mir sehr helfen.
     
    Zuletzt bearbeitet: 19. Jan. 2014
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. torsan
    torsan Neues Mitglied
    Hi,

    welche MySQL Speicher-Engine verwendest du für deine User-Tabelle? InnoDB oder MyISAM?
    Evtl. verwendest du MyISAM, denn diese Engine unterstützt keine Transaktionen.
     
Die Seite wird geladen...

Transaktionen funktionieren nicht - Ähnliche Themen

JPA Transaktionen für Web-Application und Desktop-Client
JPA Transaktionen für Web-Application und Desktop-Client im Forum Data Tier
Problem mit EJBs und Transaktionen
Problem mit EJBs und Transaktionen im Forum Data Tier
Transaktionen von mehreren Anwendungen aus - JDBC
Transaktionen von mehreren Anwendungen aus - JDBC im Forum Datenbankprogrammierung
Grundsätzliche Frage zu JPA, mehreren Enitäten und Transaktionen
Grundsätzliche Frage zu JPA, mehreren Enitäten und Transaktionen im Forum Data Tier
Geschachtelte Transaktionen in einem DBMS
Geschachtelte Transaktionen in einem DBMS im Forum Datenbankprogrammierung
Thema: Transaktionen funktionieren nicht