2013-03-14 15 views
5

Po prostu podążyłem za tutorialem z biletem na potwory (http://www.jboss.org/jdf/examples/ticket-monster/tutorial/Introduction/) i dodałem do mojego rozwiązania klasę usług odpoczynku.Wyjątek wdrażania JSF: Niezadowolone zależności dla typu EntityManager

package projectFoo.rest; 
import java.util.List; 
import javax.enterprise.context.RequestScoped; 
import javax.inject.Inject; 
import javax.persistence.EntityManager; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

import projectFoo.model.party; 


@Path("/partys") 
@RequestScoped 
public class partyService { 

@Inject 
private EntityManager em; 

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public List<party> getAllEvents() { 
    @SuppressWarnings("unchecked") 
    final List<party> results = 
      em.createQuery(
      "select e from party e order by e.name").getResultList(); 
    return results; 
} 
} 

@Inject jest podkreślony, powrót: "Nie fasola jest uprawniony do wstrzykiwań do punktu wtrysku [JSR-299 §5.2.1]"

Kiedy próbuję wdrożyć opakowania, proces zakończy się niepowodzeniem i zwróci następujący komunikat:

Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point. 

Czy muszę dodać komponent bean dla menedżera encji? Jak powinien wyglądać ten? Samouczek o tym nie wspomina. Właściwie nie mogłem znaleźć żadnej definicji fasoli w ostatecznym projekcie monster-biletu.

Odpowiedz

8

Znaleziono EntityManager w artefakcie, dla którego nie włączono mechanizmu CDI (słoiki dostawców JPA nie zawierają beans.xml).

Można użyć „stare dobre” @PersistenceContext adnotacji INSEAD z @Inject, lub jeśli chcesz używać @Inject, trzeba będzie dostarczyć producentowi na EntityManager takiego:

class Resources { 
    @SuppressWarnings("unused") 
    @Produces 
    @PersistenceContext 
    private EntityManager em; 
...