2014-10-15 6 views
0

Я пытаюсь выполнить аутентификацию и авторизацию с использованием Spring Framework безопасности, но я с трудом, Im застрял в этом исключением:org.springframework.beans.factory.BeanCreationException с помощью КДИ

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clienteBO': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected br.com.logtec.dao.GenericCrudDAO br.com.logtec.business.GenericCrudBO.dao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'crudDAO': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected javax.persistence.EntityManager br.com.logtec.dao.GenericCrudDAO.entityManager; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.persistence.EntityManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.inject.Inject(), @br.com.logtec.factory.DataFactory()} 

Это мои родственные классы:

@Named("clienteBO") 
public class ClienteBO extends PersonificacaoBO<Cliente>{ 
private static final long serialVersionUID = 119528316663693560L; 

public ClienteBO() { 
    super(); 
} 

@Override 
public Feedback salvar(Cliente instancia) { 
    instancia.getPessoa().setCliente(true); 
    //TODO PEGAR EMPRESA DO USUARIO LOGADO 
//  if(instancia.getEmpresa() == null) 
//   throw new RuntimeException("O cliente deve obrigatoriamente possuir uma empresa"); 
    return super.salvar(instancia); 
} 

@Override 
public Feedback salvar(Cliente instancia, CrudDAO<Cliente> dao) { 
    instancia.getPessoa().setCliente(true); 
    return super.salvar(instancia, dao); 
} 

@Override 
protected Exemplo criarExemplo(Cliente pesquisa) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
    return super.criarExemplo(pesquisa); 
} 

@Override 
public Feedback salvar(Collection<Cliente> instancias) { 
    for (Cliente cliente : instancias) { 
     cliente.getPessoa().setCliente(true); 
    } 
    return super.salvar(instancias); 
} 

@Override 
public Feedback salvar(Collection<Cliente> instancias, CrudDAO<Cliente> dao) { 
    for (Cliente cliente : instancias) { 
     cliente.getPessoa().setCliente(true); 
    } 
    return super.salvar(instancias, dao); 
} 
} 

public abstract class PersonificacaoBO<T extends Personificacao> extends GenericCrudBO<T>{ 
private static final long serialVersionUID = 5475960092794378740L; 

@Override 
protected Exemplo criarExemplo(T pesquisa) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
    Exemplo exemplo = super.criarExemplo(pesquisa); 
    exemplo.excludeField("pessoa.cliente"); 
    exemplo.excludeField("pessoa.funcionario"); 
    exemplo.excludeField("pessoa.fornecedor"); 
    exemplo.excludeField("pessoa.usuario"); 
    exemplo.excludeField("pessoa.contador"); 
    return exemplo; 
} 

}

@Named("crudBO") 
public class GenericCrudBO<E extends EntidadeBase> implements CrudBO<E>{ 
private static final long serialVersionUID = 1L; 
private static final String DEFAULT_ERROR_MESSAGE = "Um erro inesperado ocorreu, contate o administrador do sistema."; 
private static final String DEFAULT_SUCESS_MESSAGE = "Operação realizada com sucesso!"; 

@Inject 
@Named("crudDAO") 
protected GenericCrudDAO<E> dao; 

public GenericCrudBO() { 
    super(); 
} 
public GenericCrudBO(GenericCrudDAO<E> dao) { 
    super(); 
    this.dao = dao; 
} 

public Feedback salvar(E instancia, CrudDAO<E> dao) { 
    Feedback feedback; 
    try { 
     dao.atualizar(instancia); 
     feedback = new Feedback(TipoFeedback.SUCESSO, EtapaFeedback.CADASTRO, DEFAULT_SUCESS_MESSAGE); 
    } catch (RuntimeException e) { 
     feedback = new Feedback(TipoFeedback.ERRO, EtapaFeedback.CADASTRO, DEFAULT_ERROR_MESSAGE); 
     throw e; 
    } 
    return feedback; 
} 

public Feedback salvar(Collection<E> instancias, CrudDAO<E> dao) { 
    try { 
     dao.cadastrar(instancias); 
     return new Feedback(TipoFeedback.SUCESSO, EtapaFeedback.CADASTRO, "Operação realizada com sucesso"); 
    } catch (Exception e) { 
     return new Feedback(TipoFeedback.ERRO, EtapaFeedback.CADASTRO, "Erro ao salvar, contate o administrador"); 
    } 
} 

@Override 
public Feedback salvar(Collection<E> instancias) { 
    return salvar(instancias, dao); 
} 

public Feedback salvar(E instancia) { 
    return salvar(instancia, dao); 
} 

@Override 
public Feedback deletar(E entidade) { 
    Feedback feedback; 
    try { 
     dao.deletar(entidade); 
     feedback = new Feedback(TipoFeedback.SUCESSO, EtapaFeedback.CADASTRO, DEFAULT_SUCESS_MESSAGE); 
    } catch (RuntimeException e) { 
     feedback = new Feedback(TipoFeedback.ERRO, EtapaFeedback.DELECAO, DEFAULT_ERROR_MESSAGE); 
    } 
    return feedback; 
} 

public E pesquisarPorId(Class<E> clazz, Long id) { 
    return dao.pesquisarPorId(clazz, id); 
} 

public E pesquisarPorId(E instancia) { 
    return dao.pesquisarPorId(instancia); 
} 

public List<E> pesquisar(Class<E> clazz) { 
    return dao.pesquisarTodos(clazz); 
} 

/** 
* Pesquisa para entidades simples sem composição 
*/ 
@Override 
public List<E> pesquisar(E pesquisa) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
    Exemplo exemplo = criarExemplo(pesquisa); 
    return dao.pesquisar(exemplo); 
} 

protected Exemplo criarExemplo(E pesquisa) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
    Exemplo exemplo = new Exemplo(pesquisa); 
    exemplo.excludeField("serialVersionUID"); 
    exemplo.setMatchingMode(MatchingMode.ANYWHERE); 
    exemplo.excludeZeroes(); 
    return exemplo; 
} 

@Override 
public int total(E pesquisa) { 
    return this.dao.total(pesquisa); 
} 

public List<E> listarLazy(E pesquisa, int startingAt, int maxPerPage, String sortField, String sortOrder) { 
    inicializarCamposPesquisa(pesquisa); 
    return this.dao.listarLazy(pesquisa, startingAt, maxPerPage, sortField, sortOrder); 
} 

protected void inicializarCamposPesquisa(E pesquisa) { 
    //método que deverá ser implementado pelas classes filhas que quiserem filtrar os resultados no lazyList 
} 

public String getListIds(List<EntidadeBase> entidades) { 
    StringBuilder builder = new StringBuilder('('); 
    EntidadeBase e = null; 
    for (int i = 0; i < entidades.size(); i++) { 
     e = entidades.get(i); 
     builder.append(e.getId()); 
     if(i < entidades.size()-1) { 
      builder.append(','); 
     } 
    } 
    builder.append(')'); 
    return builder.toString(); 
} 

@SuppressWarnings("unchecked") 
protected Class<E> getClassType() { 
    ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass(); 
    return (Class<E>) parameterizedType.getActualTypeArguments()[0]; 
} 

}

@Named("crudDAO") 
public class GenericCrudDAO<E extends EntidadeBase> implements CrudDAO<E>{ 

private static final long serialVersionUID = 1L; 
private static final Logger LOGGER = Logger.getLogger(CrudDAO.class); 

@Inject 
@DataFactory 
protected EntityManager entityManager; 

public GenericCrudDAO() { 
    super(); 
} 

public GenericCrudDAO(EntityManager entityManager) { 
    super(); 
    this.entityManager = entityManager; 
} 

@Override 
public void cadastrar(E instancia) { 
    entityManager.getTransaction().begin(); 
    entityManager.persist(instancia); 
    entityManager.getTransaction().commit(); 
} 

public void cadastrar(Collection<E> instancias) { 
    try { 
     entityManager.getTransaction().begin(); 
     for(E e : instancias) { 
      entityManager.merge(e); 
     } 
     entityManager.getTransaction().commit(); 
    } catch (Exception e) { 
     entityManager.getTransaction().rollback(); 
     throw e; 
    } 
} 

@Override 
public void atualizar(E instancia) { 
    entityManager.getTransaction().begin(); 
    entityManager.merge(instancia); 
    entityManager.getTransaction().commit(); 
} 

@Override 
public void deletar(E instancia) { 
    entityManager.getTransaction().begin(); 
    entityManager.remove(entityManager.merge(instancia)); 
    entityManager.getTransaction().commit(); 
} 

public E pesquisarPorId(Class<E> clazz, Long id) { 
    return (E) entityManager.find(clazz, id); 
} 

@SuppressWarnings("unchecked") 
public E pesquisarPorId(E instancia) { 
    Class<E> clazz = (Class<E>) instancia.getClass(); 
    return (E) entityManager.find(clazz, instancia.getId()); 
} 

@SuppressWarnings("unchecked") 
public List<E> pesquisarTodos(Class<E> clazz) { 
    List<E> lista = new ArrayList<E>(); 
    lista = entityManager.createQuery(" FROM " + clazz.getName()).getResultList(); 
    return lista; 
} 

@Override 
public List<E> pesquisar(Exemplo exemplo) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
    return QBE.using(entityManager).getList(exemplo); 
} 

@Override 
public E pesquisarUnico(Exemplo exemplo) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
    return QBE.using(entityManager).getSingle(exemplo); 
} 

@Override 
@SuppressWarnings("unchecked") 
public List<E> pesquisar(String queryString) { 
    return entityManager.createQuery(queryString).getResultList(); 
} 

@SuppressWarnings("unchecked") 
@Override 
public List<E> pesquisar(String queryString, Map<String, Object> param) { 
    String key = null; 
    Query query = entityManager.createQuery(queryString); 
    for(Map.Entry<String, Object> entry : param.entrySet()) { 
     key = entry.getKey().trim(); 
     key = key.startsWith(":") ? key.substring(1) : key; 
     query.setParameter(key, entry.getValue()); 
    } 
    return query.getResultList(); 
} 

public int total(E pesquisa) { 
    Long count = 0L; 

    try {; 
     Query q = entityManager.createQuery("SELECT count(*) FROM " 
       + pesquisa.getClass().getName()); 
     count = (Long) q.getSingleResult(); 
    } catch (Exception e) { 
     LOGGER.error("Erro ao buscar total listagem lazy", e); 
    } 
    return count.intValue(); 
} 

public void rollback() { 
    entityManager.getTransaction().rollback(); 
} 

@SuppressWarnings("unchecked") 
protected Class<E> getClassType() { 
    ParameterizedType parameterizedType = (ParameterizedType) getClass().getGenericSuperclass(); 
    return (Class<E>) parameterizedType.getActualTypeArguments()[0]; 
} 

@SuppressWarnings("unchecked") 
public List<E> listarLazy(E pesquisa, int startingAt, int maxPerPage, 
     String sortField, String sortOrder) { 
    List<E> lista = new ArrayList<E>(); 
    try { 
     Query q = entityManager.createQuery("FROM " 
       + pesquisa.getClass().getName()); 
     q.setFirstResult(startingAt); 
     q.setMaxResults(maxPerPage); 
     lista = q.getResultList(); 
    } catch (Exception e) { 
     LOGGER.error("Erro ao buscar listagem Lazy", e); 
    } 
    return lista; 
} 

}

Я новичок на Spring Security, будучи так, любая помощь приветствуется, спасибо

+0

Если ваш вопрос о весне, то это, вероятно, не о CDI. –

+0

Я использую только Spring Security, поэтому я просто удалил тег Spring, спасибо за внимание –

ответ

1

Если я получаю это право, вы хотите использовать Spring Security для безопасности и КДИ для инъекций зависимости.

В этом случае вам необходимо убедиться, что Spring и CDI не пытаются управлять одним и тем же компонентом. Даже если вы не используете Spring Core напрямую, теперь у вас есть Spring и CDI на вашем пути к классам. Когда Spring обнаруживает javax.inject.Inject на пути к классу, он будет обрабатывать @Inject как синонимом @Autowired и попытаться ввести весенние бобы в аннотированную цель инъекции.

Вот почему вы получаете исключение - это Весна, а не CDI, жалующаяся на отсутствующий боб.

Смежные вопросы