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:
Und die Implementierung:
Und mein Service:
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.
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:
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:
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:
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);
}
}
Zuletzt bearbeitet: