我正在尝试使用JAX-RS和JPA持久性构建应用程序;现在,我能够直接从资源类中持久化对象,但我想在REST和数据库之间使用另一层。
我想做的是将EntityManager注入我的UserService,然后从资源中调用我的UserService。
这是我所做的,但我总是在userService属性上有一个NullPointerException ...有什么想法吗?
UserResource
@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;
}
}
UserService
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;
}
答案 0 :(得分:0)
@EJB
注释在Jax-RS规范中无效:它可以在EJB层中使用。这就是为什么在userService中没有注入任何内容的原因。如果您想获得UserService
实例,则必须:
java:global[/<app-name>]/<module-name>/<bean-name>
@Stateless
注释您的Rest资源,如here所述(示例2)。