JBoss Seam @In attribute requires non-null value[Resolvido]

2 respostas
G

Seguinte, montei a seguinte estrutura:

public interface GenericDao<T> { public T find(Class<T> c, Object id); public T merge(T obj); public void persist(T obj); public void remove(T obj); }

Name("genericDao")
public class GenericDaoImpl<T> implements GenericDao<T> {

    @In(create = true)
    protected EntityManager entityManager;

    public T find(Class<T> c, Object id) {
        return entityManager.find(c, id);
    }

    public T merge(T obj) {
        return entityManager.merge(obj);
    }

    public void persist(T obj) {
        entityManager.persist(obj);
    }

    public void remove(T obj) {
        entityManager.remove(obj);
    }
}
@Name("availabilityDao")
public class AvailabilityDaoImpl extends GenericDaoImpl<Availability> implements AvailabilityDao {
}
@Name("availabilityService")
public class AvailabilityService extends BaseService {

    @In(create = true)
    private AvailabilityDao availabilityDao;

    public void persist(Availability obj) {
        availabilityDao.persist(obj);
    }

    public List<Availability> findBy(Long idUser) {
        return availabilityDao.findBy(idUser);
    }
}
@Name("availabilityAction")
@Restrict("#{s:hasRole('PAID_USER') || s:hasRole('ADMIN')}")
public class AvailabilityAction {

    @In(create = true)
    private AvailabilityService availabilityService;
    @In
    private User user;

    @Out(required = false)
    private Availability availability;

    public void save(Availability availability) {
        availabilityService.persist(availability);
    }

    public void renew() {
        availability= new Availability();
    }

    public void select(Availability availability) {
        this.availability = availability == null ? new Availability() : availability;
    }

    public List<Availability> getAvailabilities() {
        return availabilityService.findBy(user.getId());
    }
}

Quando eu acesso da AvailabilityAction da o seguinte erro do Seam: @In attribute requires non-null value: availabilityDao.entityManager

Estranho pois eu coloquei @In(create = true) para esse Seam Bean. Aonde estou errando?

2 Respostas

C

Se nao me engano a convençao para o nome de EntityManager é "em"
Se vc utilizar outro nome tem que informar o seam.

ou seja troque

private EntityMananger entityMananger
por
private EntityMananger em

e tambem tem isso aqui

"The @PersistenceContext injection no longer works in POJOs. In order to obtain an EntityManager in a Seam POJO, you have to initialize the EntityManager in Seam configuration file and then use the Seam @In annotation to inject it into the POJO. " by infoQ
http://www.infoq.com/articles/jboss-seam

G

Realmente meu caro! Era esse o problema. E o pior é que estou acostumado a trabalhar com o “em” e nem me dei conta. hehehehe

Valeu.

Criado 22 de junho de 2009
Ultima resposta 23 de jun. de 2009
Respostas 2
Participantes 2