Не могу разобраться с фасадом. Что я упускаю?

Доброго времени дня. Остро нужна помощь. Есть фасад, и контроллер, который с ним работает, но при попытке создать/редактировать/удалить NullPointerException - то есть фасад (объект) почему-то пуст.
Абстрактный фасад
package entity;

import java.util.List;
import javax.persistence.EntityManager;

/**
 *
 * @author Nafanya Victorovna
 */
public abstract class AbstractFacade<T> {
    private Class<T> entityClass;

    public AbstractFacade(Class<T> entityClass) {
        this.entityClass = entityClass;
    }

    protected abstract EntityManager getEntityManager();

    public void create(T entity) {
        getEntityManager().persist(entity);
    }

    public void edit(T entity) {
        getEntityManager().merge(entity);
    }

    public void remove(T entity) {
        getEntityManager().remove(getEntityManager().merge(entity));
    }

    public T find(Object id) {
        return getEntityManager().find(entityClass, id);
    }

    public List<T> findAll() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        return getEntityManager().createQuery(cq).getResultList();
    }

    public List<T> findRange(int[] range) {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        cq.select(cq.from(entityClass));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        q.setMaxResults(range[1] - range[0] + 1);
        q.setFirstResult(range[0]);
        return q.getResultList();
    }

    public int count() {
        javax.persistence.criteria.CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
        javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
        cq.select(getEntityManager().getCriteriaBuilder().count(rt));
        javax.persistence.Query q = getEntityManager().createQuery(cq);
        return ((Long) q.getSingleResult()).intValue();
    }
    
}

фасад непосредственно, с которым я пытаюсь что-то делать
package entity;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author Nafanya Victorovna
 */
@Stateless
public class UsermyFacade extends AbstractFacade<Usermy> {
    @PersistenceContext(unitName = "MyPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public UsermyFacade() {
        super(Usermy.class);
    }
    
}

сущность, связанная с таблицей в БД
package entity;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Nafanya Victorovna
 */
@Entity
@Table(name = "usermy")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Usermy.findAll", query = "SELECT u FROM Usermy u"),
    @NamedQuery(name = "Usermy.findByIduser", query = "SELECT u FROM Usermy u WHERE u.iduser = :iduser"),
    @NamedQuery(name = "Usermy.findByIsAuth", query = "SELECT u FROM Usermy u WHERE u.isAuth = :isAuth")})
public class Usermy implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "iduser")
    private String iduser;
    @Column(name = "isAuth")
    private Boolean isAuth;

    public Usermy() {
    }

    public Usermy(String iduser) {
        this.iduser = iduser;
    }

    public String getIduser() {
        return iduser;
    }

    public void setIduser(String iduser) {
        this.iduser = iduser;
    }

    public Boolean getIsAuth() {
        return isAuth;
    }

    public void setIsAuth(Boolean isAuth) {
        this.isAuth = isAuth;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (iduser != null ? iduser.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Usermy)) {
            return false;
        }
        Usermy other = (Usermy) object;
        if ((this.iduser == null && other.iduser != null) || (this.iduser != null && !this.iduser.equals(other.iduser))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entity.Usermy[ iduser=" + iduser + " ]";
    }
    
}

мой чудесно не работающий контроллер
package entity;

import java.io.Serializable;
import javax.ejb.EJB;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;


@Named("usermyController")
@SessionScoped
public class UsermyController implements Serializable {

    private Usermy user;
    @EJB
    private UsermyFacade ejbFacade;

    public UsermyController(){}

    private UsermyFacade getFacade(){
        return ejbFacade;
    }

    public void create(){
            this.user = new Usermy();
            String id = OAuth.getId();
            boolean bool = OAuth.getAccess();
            this.user.setIduser(id);
            this.user.setIsAuth(bool);  
            System.out.println(this.user.getIduser());
            getFacade().create(this.user);
    }

    public void update(String id) {
            this.user = getUsermy(id);
            boolean bool = OAuth.getAccess();
            this.user.setIsAuth(bool);
            getFacade().edit(this.user);
   }
        
    public void delete(String id) {
            this.user = getUsermy(id);
            this.user.setIsAuth(Boolean.FALSE);
    }
    
    public Usermy getUsermy(java.lang.String id) {
        return ejbFacade.find(id);
    }
}
  • Вопрос задан
  • 2951 просмотр
Решения вопроса 1
1. Оно же даже не компилируется. У вас в AbstractFacade конструктор с одним аргументом, а в UsermyFacade - конструктор по умолчанию.
2. Всё ломается из-за того, что вы строите UsermyController вручную, вызовом new UsermyController(). Естественно, что никакие зависимости в него не внедряются. UsermyController должен быть сконструирован контейнером. Он может быть получен сервлетом как поле с аннотацией @Inject, например.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NafanyaVictorovna
@NafanyaVictorovna Автор вопроса
+ я дописала конвертер, видимо его там не хватало, потому как после этого заработало всё хорошо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект