Como usar injeção de dependência numa aplicação Enterprise? Do módulo ear para o war

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?

Mais alguém?

Amigo você já tentou com a anotação @EJB ao invés de @Inject?

Acrescente a anotação @Named no seu SessionBean para poder injetar com @Inject, ou utilize a anotação @EJB ao invés de @Inject, como dito pelo “anjovingador”

[quote=Vin?ius Abreu de Fran?]Estou tentando injetar numa classe do módulo war (contexto web) um DAO do módulo EJB (contexto ejb) e não estou conseguindo.

O que poderia estar havendo?[/quote]

O que está havendo é que não funciona assim.

O war está contido no EJB. O war pode acessar o EJB , mas o EJB não pode acessar o WAr.
Se o DAO está no o EJB não terá acesso a ele.

Você pode compilar isso com o novo formato em que não existe arquivo ejb e fica tudo no war. Ou vc pode fazer como deve ser e tirar o DAO do war e colocar no EJB onde ele pertence.

Galera o tópico é bem antigo mas esbarrei no mesmo problema, gostaria de uma ajuda de vocês.
Eu tenho um modulo EJB e um módulo WAR, estou utilizando o Spring para fazer a injeção de dependência e controle das transações do meu DAO.
Consigo chamar o meu EJB do meu war tranquilamente, mas dentro do módulo EJB a minha camada facade não consegue injetar o DAO.

Eu acredito que seja algum esquema de contexto do Spring que não estou sabendo configurar, alguem consegue me ajudar por favor.

Desde já agradeço.