Erro com Spring + Hibernate + JSF - Me ajudem PLEASE!

5 respostas
Ginhu

Galera,

Estou com o seguinte erro, qdo uso meu DAO na classe ManagerBean esse dao está null, creio que seja alguma configuração errada que eu fiz no spring, será que vcs poderiam me ajudar ??? Segue meus arquivos abrigado:

Por favor, preciso de ajuda, quem puder me add no gtalk:[email removido]

web.xml:

<?xml version="1.0"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <description>Facelets StarterKit</description>
 <display-name>configuradorWeb</display-name>
 <context-param>
  <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
  <param-value>.xhtml</param-value>
 </context-param>
 <context-param>
  <param-name>facelets.REFRESH_PERIOD</param-name>
  <param-value>2</param-value>
 </context-param>
 <context-param>
  <param-name>facelets.DEVELOPMENT</param-name>
  <param-value>true</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>client</param-value>
 </context-param>
 <context-param>
  <param-name>com.sun.faces.validateXml</param-name>
  <param-value>true</param-value>
 </context-param>
 <context-param>
  <param-name>com.sun.faces.verifyObjects</param-name>
  <param-value>true</param-value>
 </context-param>
       <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
     <context-param>
    <param-name>org.richfaces.SKIN</param-name>
    <param-value>deepMarine</param-value>
</context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
    </listener>
    <listener>
        <listener-class>
            com.sun.faces.config.ConfigureListener
        </listener-class>
    </listener>
 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
  <filter>
    <display-name>RichFaces Filter</display-name>
    <filter-name>richfaces</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
    <filter-name>richfaces</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

faces-config.xml:

<application>
  	<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
 	<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
  </application>
 <managed-bean>
 	<managed-bean-name>configuradorMB</managed-bean-name>
 	<managed-bean-class>com.diebold.medial.configurador.web.controller.ConfiguradorMB</managed-bean-class>
 	<managed-bean-scope>application</managed-bean-scope>
 </managed-bean>
 <managed-bean>
 	<managed-bean-name>modeloMB</managed-bean-name>
 	<managed-bean-class>com.diebold.medial.configurador.web.controller.ModeloMB</managed-bean-class>
 	<managed-bean-scope>request</managed-bean-scope>
 </managed-bean>
 </faces-config>

persistence.xml

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="medialPU"  transaction-type="RESOURCE_LOCAL">  
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
      <property name="hibernate.archive.autodetection"	value="class, hbm" />
      <property name="hibernate.connection.username" value="admmedial"/>
      <property name="hibernate.connection.driver_class" value="oracle.jdbc.OracleDriver"/>
      <property name="hibernate.connection.password" value="a"/>      
      <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="use_sql_comments" value="true"/>
    </properties>
  </persistence-unit>
</persistence>

classe dao:

@Repository
@Transactional
public class ModeloDao {
    @PersistenceContext (unitName="medialPU")
    private EntityManager em;

    public ModeloDao() {
        System.out.println("["+this.getClass().getName()+"](ModeloDao()): constructor" );
    }

    

    public void insert(Modelo modelo)throws DataAccessException{

        try{
            this.em.persist(modelo);

        }catch(EntityExistsException e){
            System.out.println("["+this.getClass().getName()+"](insert):" + e.getMessage());
        }catch(IllegalStateException e){
            System.out.println("["+this.getClass().getName()+"](insert):" + e.getMessage());
        }catch(IllegalArgumentException e){
            System.out.println("["+this.getClass().getName()+"](insert):" + e.getMessage());
        }catch (TransactionRequiredException e){
            System.out.println("["+this.getClass().getName()+"](insert):" + e.getMessage());
        }catch (Exception e){
            System.out.println("["+this.getClass().getName()+"](insert):" + e.getMessage());
        }
    }

    public void delete(Integer id) throws DataAccessException{
        Modelo modelo = null;
        try{
            modelo = (Modelo) this.em.find(Modelo.class, id);
            if (modelo != null)
                this.em.remove(modelo);

        }catch(IllegalStateException e){
            System.out.println("["+this.getClass().getName()+"](delete):" + e.getMessage());
        }catch(IllegalArgumentException e){
            System.out.println("["+this.getClass().getName()+"](delete):" + e.getMessage());
        }catch (TransactionRequiredException e){
            System.out.println("["+this.getClass().getName()+"](delete):" + e.getMessage());
        }catch (Exception e){
            System.out.println("["+this.getClass().getName()+"](delete):" + e.getMessage());
        }

    }

    public void update (Modelo modelo)throws DataAccessException{
        Modelo modeloAtual = null;

        try{
            modeloAtual = (Modelo) this.em.find(Modelo.class, modelo.getModeId());
            if (modeloAtual != null){

                modeloAtual = modelo;

                this.em.merge(modeloAtual);
            }
        }catch(IllegalStateException e){
            System.out.println("["+this.getClass().getName()+"](update):" + e.getMessage());
        }catch(IllegalArgumentException e){
            System.out.println("["+this.getClass().getName()+"](update):" + e.getMessage());
        }catch(TransactionRequiredException e){
            System.out.println("["+this.getClass().getName()+"](update):" + e.getMessage());
        }catch(Exception e){
            System.out.println("["+this.getClass().getName()+"](update):" + e.getMessage());
        }
    }

    public Modelo findByPK(Integer id)throws DataAccessException{
        Modelo modelo = null;

        try{
            modelo = (Modelo) this.em.find(Modelo.class, id);
        } catch(IllegalStateException e){
            System.out.println("["+this.getClass().getName()+"](findByPK):" + e.getMessage());
        }catch(IllegalArgumentException e){
            System.out.println("["+this.getClass().getName()+"](findByPK):" + e.getMessage());
        }catch(Exception e){
            System.out.println("["+this.getClass().getName()+"](findByPK):" + e.getMessage());
        }
        return modelo;
    }

    public List findByDS(String description)throws DataAccessException{
        List lstResult = null;
        Query qry = null;
        try{
            qry = this.em.createQuery("SELECT m FROM MedModelo m  WHERE m.filiDs LIKE :ds");

            qry.setParameter("ds", description);

            lstResult = qry.getResultList();

        }catch(IllegalStateException e){
            System.out.println("["+this.getClass().getName()+"](findByDS):" + e.getMessage());
        }catch(IllegalArgumentException e){
            System.out.println("["+this.getClass().getName()+"](findByDS):" + e.getMessage());
        }catch(Exception e){
            System.out.println("["+this.getClass().getName()+"](findByDS):" + e.getMessage());
        }

        return lstResult;
    }

    public List findAll()throws DataAccessException{
        List lstResult = null;
        Query qry = null;
        try{
            qry = this.em.createQuery("SELECT m FROM MedModelo m ");

            lstResult = qry.getResultList();

        }catch(IllegalStateException e){
            System.out.println("["+this.getClass().getName()+"](findAll):" + e.getMessage());
        }catch(IllegalArgumentException e){
            System.out.println("["+this.getClass().getName()+"](findAll):" + e.getMessage());
        }catch(Exception e){
            System.out.println("["+this.getClass().getName()+"](findAll):" + e.getMessage());
        }
        return lstResult;
    }
}

classe managerbean:

public class ModeloMB {


	private  ModeloDao modeloDao = null;
	private DataModel model;
	
	public ModeloMB() {		
	}

	public ModeloDao getModeloDao() {
		return modeloDao;
	}

	public void setModeloDao(ModeloDao modeloDao) {
		this.modeloDao = modeloDao;
	}

	// mostra todas os modelos
	public List<Modelo> getTodos() {	
		System.out.println("vou findall.......");		
		return	modeloDao.findAll();
			
	}	

}

5 Respostas

bland

Ginhu,

Se eu não me engano, no faces-config você tem que criar referência para os beans mapeados no applicationContext.xml.

E por falar nisso, cadê o applicationContext.xml? Você não listou.

Abraço.

Ginhu

Bland,

Então, meu applicationcontext.xml é esse :

<bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
          p:location="/WEB-INF/jdbc.properties" />
          
       <!-- JPA EntityManagerFactory -->
      <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
     p:dataSource-ref="dataSource">
           <property name="jpaVendorAdapter">
               <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
	p:databasePlatform="${jpa.databasePlatform}" p:showSql="${jpa.showSql}"/>
           </property>
       </bean>  
       <bean id="dataSource"   class="org.springframework.jdbc.datasource.DriverManagerDataSource"          
         p:driverClassName="${jdbc.driverClassName}"  p:url="${jdbc.url}"  p:username="${jdbc.username}"
          p:password="${jdbc.password}" />    

      <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
      <bean lass="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
  
      <bean id="transactionManager" 	class="org.springframework.orm.jpa.JpaTransactionManager">
        	<property name="entityManagerFactory" ref="entityManagerFactory" />
     </bean>
    
     <tx:annotation-driven />
     <context:annotation-config/>
     <context:component-scan base-package="com.diebold.medial.configurador.web.controller" />
      
</beans>

Então eu tenho que colocar no applicationContext.xml meus managerbeans, tbm ???

É isso ???

bland

Ginhu,

Como te disse, acho que sim. Pelos exemplos que eu encontrei na internet você precisaria estar mapeando os beans do Spring no faces-config.xml através da #{bean_id_do_applicationContext}.

Faz uma tentativa e nos dê um retorno.

Abraço.

Ginhu

Galera,

Consegui resolver, o problema estava com o Spring que não estava fazendo a injeção de forma correta. Depois de muitas tentativas consegui resolver.

Obrigado pela força !!!
Abraços

bland

Ginhu,

Já que você conseguiu resolver, posta aqui pra nós como você fez isso.
Afinal de contas, outras pessoas podem estar passando pelo mesmo problema que você.
E então, como resolveu? Coloca aqui os fontes “corrigidos”.

Abraço.

Criado 30 de janeiro de 2009
Ultima resposta 6 de fev. de 2009
Respostas 5
Participantes 2