【发布时间】:2014-01-20 10:58:51
【问题描述】:
我正在尝试构建一个具有 JAX-RS 和 JPA 持久性的应用程序;目前,我可以直接从资源类中持久化对象,但我想在 REST 和数据库之间使用另一层。
我想做的是将EntityManager注入我的UserService,然后从资源中调用我的UserService..
这是我所做的,但我总是在 userService 属性上有一个 NullPointerException ......有什么想法吗?
用户资源
@Path( "/user" )
@Produces( MediaType.APPLICATION_JSON )
public class UserResource {
@EJB
private UserService userService;
@GET
public User findAll() {
// TEST
User user = userService.create( "testLogin", "testPassword", "user" );
return user;
}
}
用户服务
public class UserService {
@Inject
private EntityManager em;
/**
* Create a new user
*
* @param user New user or null if error
*/
public User create( String login, String password, String type ) {
User user = null;
try {
AuthenticationService authService = new AuthenticationService();
byte[] salt = authService.generateSalt();
byte[] encryptedPassword = authService.getEncryptedPassword( password, salt );
user = new User();
user.setLogin( login );
user.setSalt( salt );
user.setPassword( encryptedPassword );
user.setType( type );
em.persist( user );
} catch( NoSuchAlgorithmException e ) {
System.out.println( "Error during encryption" );
e.printStackTrace();
} catch( DAOException e ) {
System.out.println( "Error accessing database" );
e.printStackTrace();
} catch( Exception e ) {
e.printStackTrace();
}
return user;
}
}
资源
public class Resources {
@Produces
@PersistenceContext( unitName="configurator_db" )
private EntityManager em;
}
【问题讨论】: