Estou tentando injetar numa classe do módulo war (contexto web) um DAO do módulo EJB (contexto ejb) e não estou conseguindo.
Já tenho o beans.xml no WEB-INF da aplicação web.
Classe regra (módulo ejb):
@Stateless
@LocalBean
public class RegraDAO extends GenericDAO<Regra> implements VerificadorDeEntidades {
@PersistenceContext(unitName = PersistenceUnitsUtil.UNIT_INTOUCH)
private EntityManager em;
QRegra REGRA = QRegra.regra;
public RegraDAO() {
super(Regra.class);
}
/**
* Retorna o Set com o nome das de todas as permissões do conjunto de regras
* repassado.
*
* @param roleNames Conjunto com nomes de regras.
* @return Set com o nome das permissões.
* @throws RegraException Em caso de erro lança essa exceção.
*/
// @Override
public Set<String> getPermissoesDasRegras(Set<String> roleNames) throws RegraException {
if (roleNames == null) {
throw new RegraException("O valor rolesNames recebeu nulo,"
+ " um conjunto de nomes de regras deve obrigatóriamente ser atribuído.");
}
Set<String> permissoesToString = null;
List<Permissao> permissoesList = null;
JPQLQuery query = new JPAQuery(getEntityManager());
//Pega o Set de permissões que pertence a regra e depois disto,
//intera o Set de permissões pegando o nome das permissões.
for (String regra : roleNames) {
Object regras = query.from(REGRA).where(REGRA.nomeDaRegra.eq(regra)).list(REGRA.permissoes);
if (regras != null && (regras instanceof List)) {
permissoesList = (List<Permissao>) regras;
permissoesToString = new HashSet<String>();
for (Permissao permissao : permissoesList) {
permissoesToString.add(permissao.getNomeDaPermissao());
}
} else {
throw new RegraException("As permissões não foram encontradas para esta regra.");
}
}
return permissoesToString;
}
/**
* Verifica duplicidade de valores nos campos NOME.
*
* @param valor Valor a ser verificado
* @return True se existe duplicidade, false para caso negativo.
*/
@Override
public boolean verficaValorJaExistenteParaCamposRestritos(String valor) {
boolean isExistente = false;
try {
JPQLQuery query = new JPAQuery(getEntityManager());
isExistente = query.from(REGRA).where(REGRA.nomeDaRegra.eq(valor)).exists();
} catch (Exception e) {
Logger.getLogger(REGRA.getClass().getName()).log(Level.SEVERE, null, e);
}
return isExistente;
}
@Override
protected EntityManager getEntityManager() {
return em;
}
}
Classe DataBaseRealm (módulo web):
public class DataBaseRealm extends AuthorizingRealm {
@Inject
private PessoaDAO pessoaDAO;
@Inject
private RegraDAO regraDAO;
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//O CÓDIGO DESTE MÉTODO ESTÁ BEM DIDÁTICO
//Se os principals (diretrizes identificadoras) forem null, isto
//significa que os usernames são inválidos.
if (principals == null) {
throw new AuthorizationException("O argumento PrincipalCollection do método não podem ser null");
}
String username = (String) getAvailablePrincipal(principals);
Set<String> roleNames = null;
Set<String> permissoesDasRegras = null;
Set<String> permissoesAvulsasDePessoa = null;
Set<String> todasAsPermissoes = null;
try {
//Adiquire regras e permissões do banco de dados.
//Regras.
roleNames = pessoaDAO.getRegrasDePessoaPeloLogin(username);
//Permissões das regras.
permissoesDasRegras = regraDAO.getPermissoesDasRegras(roleNames);
//Permissões avulsas
permissoesAvulsasDePessoa = pessoaDAO.getPermissoesDePessoaPeloLogin(username);
//Junta todas as permissões.
todasAsPermissoes = new HashSet<>();
todasAsPermissoes.addAll(permissoesDasRegras);
todasAsPermissoes.addAll(permissoesAvulsasDePessoa);
} catch (PessoaException | RegraException ex) {
Logger.getLogger(DataBaseRealm.class.getName()).log(Level.SEVERE, null, ex);
}
SimpleAuthorizationInfo info = ((roleNames == null) || (roleNames.isEmpty())) ? new SimpleAuthorizationInfo() : new SimpleAuthorizationInfo(roleNames);
info.setStringPermissions(todasAsPermissoes);
return info;
}
/**
* Retorna um
* <code>AuthenticationInfo</code> para a classe
* <code>AuthorizingRealm</code> poder completar o processo de autenticação.
* (
* <code>Subject</code>) com suas
* <code>Principals</code> e credenciais.
*
* @param token Um token contendo o nome de usuário e a senha para
* avaliação.
* @return Retorna um AuthenticationInfo. Este objeto representa um sujeito
* do Realm em questão.
* @throws AuthenticationException Retorna essa exceção caso entre em
* condição de erro.
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) token;
String userName = usernamePasswordToken.getUsername();
//Nome de usuário inválido
if (userName == null) {
throw new AccountException("Nomes de usuário nulos não são permitidos neste reino.");
}
SaltedAuthenticationInfo info = null;
try {
//Tenta pegar a senha do login repassado
String senha = pessoaDAO.getSenhaPeloLogin(userName);
String salDaSenha = pessoaDAO.getSalDeSenhaPeloLogin(userName);
ByteSource salt = new SimpleByteSource(Base64.decode(salDaSenha));
info = new SimpleAuthenticationInfo(userName, senha, salt, getName());
} catch (PessoaException ex) {
Logger.getLogger(DataBaseRealm.class.getName()).log(Level.SEVERE, null, ex.getMessage());
}
return info;
}
}
O que poderia estar havendo?