Integrar Spring com JSF

7 respostas
serp

Onde eu consigo um exemplo prático de como integrar um managed-bean de JSF com um bean do Spring?

7 Respostas

urubatan

http://blog.urubatan.com.br
Clica em publicações, e baixa o exemplo do WebDays deste ano.
Tem mais coisas no exemplo, tipo o spring-annotation, mas tem o que tu quer também :smiley:

dgrava

Ricardo, o exemplo do WebDays do Urubatan é muito bom! Baixa que é muito útil!

Eu estou acabando um projetinho exemplo (Hibernate + Spring + JSF) (que eu fiz baseado nesse do Urubatan) bem simples, sem as annotatios do Hibernate e tb sem as spring-annotations que existem no exemplo WebDays… se vc quiser eu te envio ele quando eu terminar!

Acho que até esse domingo eu finalizo ele…

É isso aí!

Abraços!

L

Dgrava,
Estou tendo problemas ao carregar uma tela que tem objetos relacionados, tipo um Socio que tem uma Funcao, um Setor e uma Profissao.
Ele fica dando um monte de selects sem parar .

Como tu ta conseguindo resolver esses problemas de coleções ?

urubatan

isto parece erro de mapeamento no hibernate, tu tem como colocar as classes mapeadas que estão entrando em loop ai pra darmos uma olhadinha?

L

Fala mestre Urubatan,

Eu tava com problema de lazy nas coleções então coloquei o openSessionInViewFilter no web.xml, parou de dar este problema.

Tenho dois graves problemas:

  1. Quando vou carregar uma página com uma h:dataTable(recebendo uma lista de sócios), ele fica dando select feito louco, como se tivesse carregando os objetos relacionados(setor, profissao…, etc.)

  2. Quando vou para a página de editar, selecionando um Sócio na h:dataTable ele fica que nem louco carregando todas as classes relacionadas até que estoura a memória heap.

HBM de Sócios

<?xml version="1.0"?>
	<!DOCTYPE hibernate-mapping PUBLIC
	    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
	    
	<hibernate-mapping default-lazy="true">
		<class  name="br.com.simcaweb.model.pojo.Socio" table="public.socios">	
			<id name="id" type="java.lang.Long">
		            <generator class="sequence">
		            	<param name="sequence">funcoes_seq</param>
		        	</generator>
		    </id>
		    <property name="nome" type="java.lang.String" not-null="true"/>
		    <property name="matricula" type="java.lang.String"/>
		    <property name="sexo" type="java.lang.String"/>
		   	<property name="formaTratamento" type="java.lang.String" column="formatratamento"/>
		   	<property name="nascimento" type="java.sql.Date"/>
		    <property name="email" type="java.lang.String"/>
		    <property name="recebeEmail" type="java.lang.String" column="recebeemailsn"/>
		    <property name="dataFiliacao" type="java.sql.Timestamp" column="datafiliacao"/>
		    <property name="dataRecebimento" type="java.sql.Timestamp" column="datarecebimento"/>
		    <property name="ativo" type="java.lang.String" column="ativosn"/>
		    <property name="licenca" type="java.lang.String" column="licencasn"/>
		    <property name="ipe" type="java.lang.String" column="ipesn"/>
		    <property name="dataCadastro" type="java.sql.Timestamp" column="datacadastro"/>
		    <property name="dataAtualizacao" type="java.sql.Timestamp" column="dataatualizacao"/>
		    <property name="dataDesativado" type="java.sql.Timestamp" column="datadesativado"/>
		    <property name="caminhoFoto" type="java.lang.String" column="caminhofoto"/>
		    <property name="cargaHoraria" type="java.lang.String" column="cargahoraria"/>
		    <property name="endereco" type="java.lang.String"/>
		    <property name="cidade" type="java.lang.String"/>
		    <property name="uf" type="java.lang.String"/>
		    <property name="cep" type="java.lang.String"/>
		    <property name="fone" type="java.lang.String"/>
		    <property name="celular" type="java.lang.String"/>
		    <property name="obs" type="java.lang.String"/>
		    <!-- Associations -->  
		    <!-- bi-directional many-to-one association to Instancia -->
		    <many-to-one
		        name="instancia"
		        class="br.com.simcaweb.model.pojo.Instancia"
		        not-null="true"
		        not-found="ignore"
		    >
		        <column name="instancia" />
		    </many-to-one>
		    <!-- bi-directional many-to-one association to Setore -->
		    <many-to-one
		        name="setor"
		        class="br.com.simcaweb.model.pojo.Setor"
		        not-null="true"
		        not-found="ignore"
		    >
		        <column name="setor" />
		    </many-to-one>
		    <!-- bi-directional many-to-one association to Funcoe -->
		    <many-to-one
		        name="funcao"
		        class="br.com.simcaweb.model.pojo.Funcao"
		        not-null="true"
		        not-found="ignore"
		    >
		        <column name="funcao" />
		    </many-to-one>
		    <!-- bi-directional many-to-one association to Regime -->
		    <many-to-one
		        name="regime"
		        class="br.com.simcaweb.model.pojo.Regime"
		        not-null="true"
		        not-found="ignore"
		    >
		        <column name="regime" />
		    </many-to-one>
		    <!-- bi-directional many-to-one association to Secretaria -->
		    <many-to-one
		        name="secretaria"
		        class="br.com.simcaweb.model.pojo.Secretaria"
		        not-null="true"
		        not-found="ignore"
		    >
		        <column name="secretaria" />
		    </many-to-one>
		    <!-- bi-directional many-to-one association to Profissoe -->
		    <many-to-one
		        name="profissao"
		        class="br.com.simcaweb.model.pojo.Profissao"
		        not-null="true"
		        not-found="ignore"
		    >
		        <column name="profissao" />
		    </many-to-one>
		</class>
	</hibernate-mapping>

HBM de Setor

<?xml version="1.0"?>
	<!DOCTYPE hibernate-mapping PUBLIC
	    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
    
	<hibernate-mapping package="br.com.simcaweb.model.pojo" default-lazy="true">
	<class  name="Setor" table="public.setores">	
		<id name="id" type="java.lang.Long">
	            <generator class="sequence">
	            	<param name="sequence">setores_seq</param>
	        	</generator>
	    </id>
	    <property name="descricao" type="java.lang.String" not-null="true"/>
	    <!-- Associations -->  
	    <!-- bi-directional one-to-many association to Socio -->
	    <bag
	        name="socios"
	        inverse="true"
			cascade="all"
	    >
	        <key>
	            <column name="setor" />
	        </key>
	        <one-to-many 
	            class="Socio"
	        />
	    </bag>
	</class>
	</hibernate-mapping>
urubatan

tenta colocar o

&lt;bag name="socios" inverse="true" cascade="all" &gt; &lt;key&gt; &lt;column name="setor" /&gt; &lt;/key&gt; &lt;one-to-many class="Socio" /&gt; &lt;/bag&gt;

como lazy=true ou algo assim, acho que ele ta entrando em loop, por causa de referencias circulares.
ou então tenta só para testes remover as dependencias circulares do código.

L

Urubatan,
Removi as referências circulares e realmente melhorou bastante, mas ao tentar editar um socio, olha só o que acontence:

Hibernate: /* from Socio order by nome */ select socio0_.id as id, socio0_.nome as nome7_, socio0_.matricula as matricula7_, socio0_.sexo as sexo7_, socio0_.formatratamento as formatra5_7_, socio0_.nascimento as nascimento7_, socio0_.email as email7_, socio0_.recebeemailsn as recebeem8_7_, socio0_.datafiliacao as datafili9_7_, socio0_.datarecebimento as datarec10_7_, socio0_.ativosn as ativosn7_, socio0_.licencasn as licencasn7_, socio0_.ipesn as ipesn7_, socio0_.datacadastro as datacad14_7_, socio0_.dataatualizacao as Hibernate: /* load br.com.simcaweb.model.pojo.Setor */ select setor0_.id as id0_, setor0_.descricao as descricao6_0_ from public.setores setor0_ where setor0_.id=?
Hibernate: /* load br.com.simcaweb.model.pojo.Funcao */ select funcao0_.id as id0_, funcao0_.descricao as descricao1_0_ from public.funcoes funcao0_ where funcao0_.id=?
Hibernate: /* load br.com.simcaweb.model.pojo.Profissao */ select profissao0_.id as id0_, profissao0_.descricao as descricao4_0_ from public.profissoes profissao0_ where profissao0_.id=?
Hibernate: /* load br.com.simcaweb.model.pojo.Setor */ select setor0_.id as id0_, setor0_.descricao as descricao6_0_ from public.setores setor0_ where setor0_.id=?
Hibernate: /* load br.com.simcaweb.model.pojo.Funcao */ select funcao0_.id as id0_, funcao0_.descricao as descricao1_0_ from public.funcoes funcao0_ where funcao0_.id=?.............................

Ou seja, ele repete o Select algumas vezes e da load nos objetos várias vezes também.
O que será que poder ser isto ?

Criado 16 de junho de 2006
Ultima resposta 13 de jul. de 2006
Respostas 7
Participantes 4