SPRING - Erro ao obter componentes do conteiner

4 respostas
edusi001

[color=green]Olá galerinha, eu muito pouco faço posts aqui mas preciso da colaboração de vc’s, [/color]

Pessoal tô utilizando Spring pela primeira vez para fazer um projeto. Criei minhas interfaces e suas implementacoes a serem injetadas pelo conteiner porém quando vou testar o conteiner através de ClassPathXmlApplicationContext, está me aparecendco um erro dizendo que meu componente não está definido mas eu coloquei as namespaces <context:component-scan base-package=“com.meuspacotes” /> , <context:annotation-config />, <tx:annotation-driven />
na configuração , assim ele não registraria meus Componentes e beans automagicamente ? e nas classes dos componentes tem as anotations @Component(“gerenciadorHospede”), @Service(“DAOhospede”), e vou usar @Controler() nos BackingBeans do JSF.
To usando Hibernate/JPA, JSF 2, Spring.

A Exeption que tá aparecendo é a seguinte:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'gerenciadorHospede' is defined at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:387) at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:96 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:246) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881) at config.SpringAccess.getClasseTeste(SpringAccess.java:42)

O que é que faço? Já testei de varias formas , colocando pacote por pacote no <context:component-scan base-package=“com.meuspacotes” />, o nome do componente da Anotation @Component é o mesmo do usado no getBean("") do conteiner…, já testei com Spring 2 e 3 e nada … será que terei de definir os Beans de componentes manualmente tendo o avanço do scan de classes?

Preciso de alguma colaboração do que devo fazer? Alguem já passou por esta situação?

4 Respostas

R

Kd o applicationContext.xml?

edusi001

Meu application-context.xml é este :

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd"&gt;
    
   &lt;tx:annotation-driven transaction-manager="txManager" /&gt;

	&lt;context:annotation-config /&gt;

	&lt;context:component-scan base-package="com.eduardo" /&gt;
        
                                                     
    &lt;bean  class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" /&gt;  
        
    	&lt;bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"&gt;
		&lt;property name="entityManagerFactory" ref="entityManagerFactory" /&gt;
        &lt;/bean&gt;

        &lt;context:property-placeholder
		location="/WEB-INF/database.properties" /&gt;
                
	&lt;bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"&gt;
		&lt;property name="persistenceUnitName" value="SistemaHotelPU" /&gt;
		&lt;property name="dataSource" ref="dataSource" /&gt;
                
		&lt;property name="jpaVendorAdapter"&gt;
			&lt;bean
				class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"&gt;
				&lt;property name="showSql" value="${jpa.show.sql}" /&gt;
				&lt;property name="generateDdl"
					value="${jpa.generate.ddl}" /&gt;
				&lt;property name="database" value="${jpa.database}" /&gt;
			&lt;/bean&gt;
		&lt;/property&gt;
                
                &lt;property name="jpaProperties"&gt;
			&lt;props&gt;
				&lt;prop key="hibernate.dialect"&gt;${jpa.dialect}&lt;/prop&gt;
			&lt;/props&gt;
		&lt;/property&gt;
                
	&lt;/bean&gt;

	

        &lt;bean id="dataSource"  class="org.apache.commons.dbcp.BasicDataSource"&gt;
                    
            &lt;property name="driverClassName" value="${db.driverClassName}" /&gt;
            &lt;property name="url" value="${db.url}" /&gt;
            &lt;property name="username" value="${db.username}" /&gt;
            &lt;property name="password" value="${db.password}" /&gt;
        &lt;/bean&gt;



&lt;/beans&gt;

Daí tenho meu serviço:

@Service("DAOhospede")
public class DAOhospede implements IDAObasico&lt;Hospede&gt; {

    @PersistenceContext
    private EntityManager managerHospede;
    
    @Transactional(propagation = Propagation.REQUIRED)
    public Hospede pegaObjeto(long codigo) {
        try {
            Query q = managerHospede.createQuery("from hospedes where codigo = :codigo").setParameter("codigo", codigo);
            if (q.getResultList().isEmpty()) {
                return null;
            }
            return (Hospede) q.getSingleResult();
     
        } catch (Exception e) {
            throw new DAOhospedeException("Erro ao recuperar o hospede.", e);
        }

    }

Meu componente :

@Component("gerenciadorHospede")
public class GerenciadorHospede implements IGerenciadorHospede{
    
    @Resource
    private IDAOhospede DAOhospede;
    
    public GerenciadorHospede(){
        super();
    }
    
    @Transactional(propagation = Propagation.REQUIRED)
    public Hospede carregaHospede(long codigo) {
        try {
            return DAOhospede.pegaObjeto(codigo);
        } catch (Exception e) {
            throw new DAOhospedeException("Erro ao recuperar o hospede.", e);
        }

 
    }

E finalmente meu teste do conteiner onde ao executar gera o erro e exceção:

public class TesteMain {

  
    public static void main(String[] args) {
         
        ApplicationContext contexto = new ClassPathXmlApplicationContext(
				"classpath*:WEB-INF/application-context.xml");
        
        IGerenciadorHospede gh = null;
        
        gh = (IGerenciadorHospede) contexto.getBean("gerenciadorHospede");
        
        Hospede h = new Hospede();
        h.setNome("EDUARDO SANTANA V MENDES");
        h.setProfissao("PROGRAMADOR ANALISTA");
        h.setTelefone(87281431);
        h.setIdentidade("058998708423");
        h.setCpf(2667749);
        
        gh.cadastrarHospede(h);
        System.out.println("Hospede foi cadastrado...");
        
        
    }
}
edusi001

Dei um print no contexto só p/ confirmar também :

ApplicationContext contexto = new ClassPathXmlApplicationContext(
				"classpath*:WEB-INF/application-context.xml");
        System.out.println(contexto);

run: 21/06/2011 19:40:02 org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@54172f: display name [org.springframework.context.support.ClassPathXmlApplicationContext@54172f]; startup date [Tue Jun 21 19:40:02 BRT 2011]; root of context hierarchy 21/06/2011 19:40:02 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory INFO: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@54172f]: org.springframework.beans.factory.support.DefaultListableBeanFactory@131f71a 21/06/2011 19:40:02 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@131f71a: defining beans []; root of factory hierarchy org.springframework.context.support.ClassPathXmlApplicationContext@54172f: display name [org.springframework.context.support.ClassPathXmlApplicationContext@54172f]; startup date [Tue Jun 21 19:40:02 BRT 2011]; root of context hierarchy CONSTRUÍDO COM SUCESSO (tempo total: 6 segundos)

edusi001

Eae galera de volta ao combate ae ? Preciso de ajuda não vou desistir , sem ela eu nao vou sair daqui… hehe

Criado 21 de junho de 2011
Ultima resposta 27 de jun. de 2011
Respostas 4
Participantes 2