You shouldn't call flush() but instead create an enterprise bean so:
@Stateless
public class MovieEJB
{
@PersistenceContext(unitName = "movieDS")
private EntityManager em;
@Override
public Movie create(Movie movie) throws Exception
{
em.persist(movie);
return movie;
}
@Override
public void delete(Movie movie)
{
em.remove(em.merge(movie));
}
@Override
public Movie update(Movie movie) throws Exception
{
return em.merge(movie);
}
}
then modify your MovieResource class so:
@ManagedBean(name = "restController")
@SessionScoped
@Resource(name = "movie")
@Path("/movie")
public class MovieResource
{
@EJB
private MovieEJB movieEJB;
public MovieResource()
{
}
public MovieEJBLocal getMovieEJB()
{
return movieEJB;
}
public void setMovieEJB(MovieEJBLocal movieEJB)
{
this.movieEJB = movieEJB;
}
@POST
@Path("/post")
@Consumes(
{
MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML
})
public Response createMovie(Movie movie)
{
getMovieEJB().create(movie);
String result = "Movie created : " + movie;
return Response.status(201).entity(movie).build();
}
}