Problema com cache de objeto serializado - Aplicação VRaptor?

Pessoal procurei muito antes de apelar pros gujeiros.
Tenho uma aplicação com VRaptor e Hibernate.

Em uma das páginas, quando inicio o servidor, no caso o tomcat, a minha listagem mostra todos os itens corretamente.
Ao remover um item este também “sai” da listagem.
Mas ao incluir um novo item este “novo” não aparece na listagem.

Minha lógica: (Resource > Action )


@Get @Path("/reuniao/sala/periodo/{idSala}")

	public void reuniaoPorSala(Long idSala){
		
		Collection<DataReuniao> dataReuniaoS = reuniaoDAO.buscarDataReuniaoS(new Date(), idSala, 0, 0);
		
		for (DataReuniao dataReuniao : dataReuniaoS) {

			log.info(" Data :: " + Data.getData("dd/MM/yyyy HH:mm:ss", dataReuniao.getData()) );
			
			for(Reuniao reuniao : dataReuniao.getReuniao()){
				
				log.info(" Reunião :: " + reuniao.getTitulo() );

				for(ReuniaoHorario reuniaoHorario: reuniao.getReuniaoHorario()){
					
					log.info(" Horários :: " + reuniaoHorario.getStrDataHoraInicio() );
					
				}
			}
			
			
		}
		
		result.include( "dataReuniaoS", dataReuniaoS ); // reunioes

		result.include( "periodoS", ( new Periodo() ).getPeriodoS()  ); // periodos
		
	}

Tenho uma Lista de Reuniões com parametros transientes



public class DataReuniao implements Serializable{

	private static final long serialVersionUID = 1L;

	@Transient 
	private Collection<Reuniao> reuniao;
	
	@Transient 
	private Date data;
	
	@Transient 
	public Collection<Reuniao> getReuniao() {
		return reuniao;
	}
	
	@Transient 
	public void setReuniao(Collection<Reuniao> reuniao) {
		this.reuniao = reuniao;
	}
	
	@Transient 
	public Date getData() {
		return data;
	}
	
	@Transient 
	public void setData(Date data) {
		this.data = data;
	}
	
}

Que recebem valores de outras entidades, tal como uma Reunião, e é renderizada da view (jsp)

Estou usando o result.include("propriedadeRecuperavel", valor); com visto. Aparentemente objetos

Serializados estão sendo cacheados na lista após uma nova inclusão.

Depurando o código vi que enquanto estou no core da Lógica/Resource tenho imprimo/vejo todos os objetos Serializados, mas quando são recebidos na view não mais.

Seria algum problema com o result.include ?

Abraços,
Jsign.

é um relacionamento no banco de dados?

esse relacionamento está mapeado dos dois lados?

na hora de salvar você está setando os dois lados do relacionamento?

Olá Lucas, obrigado pela ajuda.

Seguem entidades:


import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import br.com.brabus.epico.model.acesso.UsuarioEpico;

@Table(name="REUNIAO")
@Entity
public class Reuniao implements Serializable{

	private static final long serialVersionUID = 1L;

	@Id @GeneratedValue
	private Long id; 
	
	@Column(nullable=false)
	private String cor;

	@Column(nullable=false)
	private boolean secreta;

	@Column(nullable=false)
	private String titulo;
	
	@Column(columnDefinition="LONGTEXT", nullable=false)
	private String descricao;

	@OneToMany(mappedBy="reuniao", fetch=FetchType.LAZY)
	private Collection<ReuniaoHorario> reuniaoHorario;
	
	@Column(nullable=false)
	private Date dataCriacao;

	@Column(nullable=false)
	private Date dataModificacao;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="id_autor")
	private UsuarioEpico autor;
	
	@ManyToMany
	@JoinTable(
		name="REUNIAO__CONVIDADO",
        joinColumns=@JoinColumn(name="id_reuniao"),
        inverseJoinColumns=@JoinColumn(name="id_convidado")
	)
	private Collection<UsuarioEpico> convidado;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="id_divisaoEpico")
	private DivisaoEpico divisaoEpico;
	
	// getters & setters


}

package br.com.brabus.epico.model;
import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

import br.com.brabus.epico.infra.Criptografia;
import br.com.brabus.epico.infra.Data;

@Table(name="REUNIAO_HORARIO")
@Entity
public class ReuniaoHorario implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id @GeneratedValue
	private Long id;

	@Column(nullable=false)
	private Date dataHoraInicio;

	@Column(nullable=false)
	private Date dataHoraFim;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="id_reuniao")
	private Reuniao reuniao;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="id_reuniaoSala")
	private ReuniaoSala reuniaoSala;
	
	public void setReuniaoSala(ReuniaoSala reuniaoSala) {
		this.reuniaoSala = reuniaoSala;
	}
	
	// getters and setters
	
	
}

Segue sql (consulta) do Hibernate:

 select
        this_.*, h1_.*
    from
        REUNIAO this_ 
    inner join
        REUNIAO_HORARIO h1_ 
            on this_.id=h1_.id_reuniao 
    inner join
        REUNIAO_SALA s2_ 
            on h1_.id_reuniaoSala=s2_.id 
    where
        (
            DATE_FORMAT( h1_.dataHoraInicio, '%Y-%m-%d' ) = '2011-10-18' 
            OR  DATE_FORMAT( h1_.dataHoraFim, '%Y-%m-%d' ) = '2011-10-18'
        )  
        and s2_.id=7

O mapeamento está ok e o id da reuniao está sendo salvo na tabela reuniao_horario
Parece que o LAZY não funciona, consigo alcançar a Reuniao mas não seus horários.
Isso comecou a acontecer após atualizar o hibernate e o VRaptor da aplicação.

Abraços
Jsign

Minhas Jars são:

antlr-2.7.6.jar
aopalliance.jar
aspectjrt.jar
barbecue-1.5-beta1.jar
barcode4j-2.0.jar
batik-anim.jar
batik-awt-util.jar
batik-bridge.jar
batik-css.jar
batik-dom.jar
batik-ext.jar
batik-gvt.jar
batik-parser.jar
batik-script.jar
batik-svg-dom.jar
batik-svggen.jar
batik-util.jar
batik-xml.jar
bcel-5.2.jar
bsh-2.0b4.jar
c3p0-0.9.1.2.jar
cglib-nodep-2.1_3.jar
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-digester-1.7.jar
commons-email-1.2.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-javaflow-20060411.jar
commons-logging.jar
commons-net-1.4.1.jar
core-renderer.jar
DarumaFrameworkJNA.jar
dom4j-1.6.1.jar
ehcache-core-2.4.6.jar
ehcache-core-2.4.6-javadoc.jar
ehcache-core-2.4.6-sources.jar
groovy-all-1.7.5.jar
guava-r07.jar
hamcrest-all-1.2RC3.jar
hibernate-3.6.1.jar
hibernate-annotations-3.4.0.jar
hibernate-commons-annotations-3.4.0.jar
hibernate-jpa-2.0-api-1.0.0.Final.jar
hibernate-validator-3.1.ga.jar
hibernate-validator-4.0.2.GA.jar
hsqldb-1.8.0.7.jar
htmlunit-core-js-2.7.pom
iText-2.1.7.jar
javassist-3.14.0.GA.jar
javax.servlet.jar
jaxen-1.1.1.jar
jcommon-1.0.15.jar
jdt-compiler-3.1.1.jar
jmock-2.4.0.jar
jmock-junit4-2.4.0.jar
jna.jar
jstl-api-1.2.jar
jstl-impl-1.2.jar
jta-1.1.jar
jtidy-r938.jar
junit-4.9.jar
jxl.jar
log4j-1.2.16.jar
mail.jar
mirror-1.5.1.jar
mockito-core-1.8.5.jar
mysql-connector-java-5.1.14-bin.jar
objenesis-1.1.jar
ognl-2.7.3.jar
ojdbc14.jar
org.springframework.aop-3.0.5.RELEASE.jar
org.springframework.asm-3.0.5.RELEASE.jar
org.springframework.aspects-3.0.5.RELEASE.jar
org.springframework.beans-3.0.5.RELEASE.jar
org.springframework.context-3.0.5.RELEASE.jar
org.springframework.core-3.0.5.RELEASE.jar
org.springframework.expression-3.0.5.RELEASE.jar
org.springframework.web-3.0.5.RELEASE.jar
paranamer-2.2.jar
quartz-all-2.1.0.jar
scannotation-1.0.2.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
validation-api-1.0.0.GA.jar
vraptor-3.4.0.jar
xalan-2.7.1.jar
xercesImpl-2.7.0.jar
xml-apis.jar
xstream-1.3.1.jar

vc tá salvando reuniao_horario?

como vc tá carregando a reunião depois?

você está controlando abertura e fechamento de Session/EntityManager ou está deixando o VRaptor ou spring fazerem isso?

Olá Lucas, depurando o código o problema vem desde a execução do Criteria que me traz uma lista de reuniões mas quando estas são percorridas não consigo acessar atributos de relacionamento.
Será que tem alguma coisa a ver com a atualização dos jar do hibernate.
Abaixo meu Criteria,

Criteria criteria = session.mysqlSession().createCriteria( Reuniao.class ) 
			.createAlias("reuniaoHorario", "h")
			.add(Restrictions.sqlRestriction(" ( DATE_FORMAT( h1_.dataHoraInicio, '%Y-%m-%d' ) = '" + strData + "' OR  DATE_FORMAT( h1_.dataHoraFim, '%Y-%m-%d' ) = '" + strData + "') "));
		
		if( idSala > 0 ){
			
			criteria
			.createAlias("h.reuniaoSala", "s")
			.add(Restrictions.eq( "s.id", idSala));
		
		}
		

tenta fazer algo mais simples como carregar a reunião pelo id e ver se ela vem com a lista preenchida (depois de chamar o getter da lista)

O VRaptor que está controlando a sessão.
Vou enviar minhas classes de sessão.
Uso dois banco de dados, já tem seis meses que uso dois “diferentes” hibernate.cfg.xml, um para oracle e outro para mysql.
Uso uma fábrica só para entrega de ambas sessões.

Mysql


@Component
@ApplicationScoped
public class MysqlSessionFactory {

	private SessionFactory factory;
	
	private static MysqlSessionFactory instance; 

	protected MysqlSessionFactory() {
		
		this.factory = new Configuration().configure("mysqlHibernate.cfg.xml").buildSessionFactory();
		
		instance = this;
		
	}
	
	static public SessionFactory getInstance() {
		
		if( instance == null ){
			
			instance = new MysqlSessionFactory();
			
		}
		
		return instance.factory;
			
	}

}

Oracle


@Component
@ApplicationScoped
public class OracleSessionFactory {

	private SessionFactory factory;
	
	private static OracleSessionFactory instance; 

	protected OracleSessionFactory() {
		
		this.factory = new Configuration().configure("oracleHibernate.cfg.xml").buildSessionFactory();
		
		instance = this;
		
	}
	
	static public SessionFactory getInstance() {
		
		if( instance == null ){
			
			instance = new OracleSessionFactory();
			
		}
		
		return instance.factory;
			
	}

}

SessionS para relacionamento entre as bases (usado estaticamente em Beans)


@Component
public class SSessionS{

	private static SessionFactory mysqlFactory;
	private static SessionFactory oracleFactory;
	private static Session mysqlSession;
	private static Session oracleSession;

	public static Session mysqlSession() {
		
		if(mysqlSession == null){
			
			mysqlFactory 	= MysqlSessionFactory.getInstance();
			
			mysqlSession	= mysqlFactory.openSession();
			
		}
		
		return mysqlSession;
		
	}

	public static Session oracleSession() {
		
		if(oracleSession == null){
			
			oracleFactory = OracleSessionFactory.getInstance();
			
			oracleSession = oracleFactory.openSession();
		
		}
		
		return oracleSession;
		
	}

}

Session injetada em daos por contrutores


@Component
public class SessionS{

	public Session mysqlSession() {
		
		return SSessionS.mysqlSession();
		
	}
	
	public Session oracleSession() {
		
		return SSessionS.oracleSession();
	
	}

}

Abraços

se vc está usando @Component e @ApplicationScoped, vc não precisa do método estático :wink: receba as classes nos construtores das suas SSessionsS

quem está fechando as sessões? quem está controlando as transações?

Exemplo de uso da Sessao nas DAO’s:


public ReuniaoDAO(SessionS  session, UsuarioScoped usuarioScoped) {
		this.session 				= session;
                ...
	}

Exemplo de uso da SSessionS nas Beans (Entidades):


@Transient
	public Usuario getUsuario() {
	
		return (Usuario) SSessionS.oracleSession().createCriteria(Usuario.class).add(Restrictions.eq("nome", usuarioNome)).uniqueResult();
		
	}

(Acima) pego um usuário do oracle e relaciono com um usuário mysql. (não é usado em Criteria’s (claro nehh)) mas funciona bem até mesmo em views pela convenção “get” exemplo:

${usuarioEpico.usuario.nome} // usuarioEpico = mysql e usuario.nome = oracle

Obs: No relacionamento Reuniao.reuniaoHorario , que é onde estou tendo problema, estão ambas as entidades na base mysql.

Sim mas, como faria para injetar as sessões (oracle e mysql) nas Beans?

Não fecho “explitamente as sessões” estou deixando o c3p0 faze-lo por ociosidade mas estou inseguro quanto a isto sim, não acredito que as sessões estejam sendo bem geridas.

você tem que fechar as sessões sim…

o problema é que vc está deixando uma sessão só aberta pra aplicação inteira, por isso que ele tá cacheando… como eu falei tire todos os métodos estáticos e use a injeção de dependências do VRaptor…

@Component  
@ApplicationScoped  
public class MysqlSessionFactory {  
  
    private SessionFactory factory;  
      
    public MysqlSessionFactory() {  
        this.factory = new Configuration().configure("mysqlHibernate.cfg.xml").buildSessionFactory();        
    }  
      
    public SessionFactory getInstance() {  
        return factory;  
    }  
}  

faça a mesma coisa pra OracleSessionFactory

e no SSessionS:

@Component  
public class SSessionS{  
  
    private SessionFactory mysqlFactory;  
    private SessionFactory oracleFactory;  

    public SSessionS(MysqlSessionFactory mysql, OracleSessionFactory oracle) {
           this.mysqlFactory = mysql.getInstance();
           this.oracleFactory = oracle.getInstance();
    }
    public Session mysqlSession() {  
        return mysqlFactory.openSession();  
    }  
  
    public Session oracleSession() {  
        return oracleFactory.openSession();    
    }  
  
} 

e no SessionS:

@Component  
public class SessionS{  
    public Session mysql;
    public Session oracle;

    public SessionS(SSessionS sss) {
         this.mysql = sss.mysqlSession();
         this.oracle = sss.oracleSession();
    }
    public Session mysqlSession() {  
        return mysql;
    }  
      
    public Session oracleSession() {  
        return oracle;
    }  
    
    @PreDestroy
    public void fechaTudo() {
        mysql.close();
        oracle.close();
    }
}

assim o VRaptor vai gerenciar a vida dessas classes e fazer a injeção de dependencias… e vai chamar o método fechaTudo no final da requisição.

Show de bola, vou implementar agora.

Abraços,
Davi

Lucas volto num antigo problema: Relacionar objetos de duas bases de dados diferentes (objetos oracle enchergando objetos mysql e o inverso), isso eu só consegui chamando estáticamente Criteria’s a partir das minhas beans:

A Entity abaixo é persistida no oracle e encherga um objeto “divisaoEpico” entidade persistida no mysql.


@Table(name="EMPRESAS_DIVISOES", schema="NBS")
@Entity
@IdClass(DivisaoPK.class)
public class Divisao implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id
	@Column(insertable=false,updatable=false)
	private Long cod_empresa_divisao; 
	
	@Id
	@Column(insertable=false,updatable=false)
	private Long cod_empresa_departamento; 

	@Id
	@Column(insertable=false,updatable=false)
	private Long cod_empresa; 
	
	private Long cod_comissao; 
	private Long tipo; 
	private String descricao; 
	private String produtivo; 
	private String veiculos;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumns({
		@JoinColumn(name="cod_empresa", unique = false, nullable = false,  insertable = false, updatable = false),
		@JoinColumn(name="cod_empresa_departamento", unique = false, nullable = false,  insertable = false, updatable = false)
	})	
	private Departamento departamento;
	
	@Transient
	public DivisaoEpico getDivisaoEpico(){
		return (DivisaoEpico) SSessionS.mysqlSession().createCriteria(DivisaoEpico.class)
				.add(Restrictions.eq("cod_empresa_divisao", this.getCod_empresa_divisao()))
				.add(Restrictions.eq("cod_empresa", this.getCod_empresa()))
				.add(Restrictions.eq("cod_empresa_departamento", this.getCod_empresa_departamento()))
				.uniqueResult();
	}

Teria como injetar a sessão nas Entity’s.
Isto me dá o recurso JSP : ${divisao.divisaoEpico.usuario… } entre diferentes bases por convenção “get”

Teria como injetar uma sessão sem ser pelo construtor com VRaptor?

Exemplo:

@In
private SessionS sessionS;

Abraços,
Jsign

Lucas se puder me dar um Help, estou tão perto de uma solução sadia para a minha aplicação.
Só tenho de injetar se ser via construtor um objeto, tem como fazer isto com o VRaptor hoje?

Abraços,
Jsign

faça por enquanto o seguinte, na sua classe SessionS:

class SessionS {
   ...


   public static SessionS current() {
       return  (SessionS) VRaptorRequestHolder.getRequest().getRequest().getAttribute("sessionS");

   }
}

daí vc faz nos modelos SessionS.current().mysqlSession();

Olá Lucas,
Eu coloquei “currentRequest().getRequest()” no lugar de “getRequest().getRequest()” porque não carregou getRequest() a partir do VRaptorRequestHolder.

public static SessionS current() {
 return  (SessionS) VRaptorRequestHolder.currentRequest().getRequest().getAttribute("sessionS");
}

Mas não está encontrando a SessionS do resquest, está chegando nula.



org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.brabus.epico.model.acesso.UsuarioEpico.reuniaoAutor, no session or session was closed
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
	at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
	at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
	at org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:382)
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:258)
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:189)
	at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:287)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fforEach_005f7(reuniao_jsp.java:2386)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fif_005f20(reuniao_jsp.java:2318)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fforEach_005f4(reuniao_jsp.java:1899)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fforEach_005f3(reuniao_jsp.java:1696)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fif_005f15(reuniao_jsp.java:1587)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspService(reuniao_jsp.java:356)
	...

Sabe como posso corrigir?

Abraços,
Jsign

Olá Lucas,
O método estático usando VRaptorRequestHolder funcionou mas o problema de sessão fechada na view.

Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.brabus.epico.model.acesso.UsuarioEpico.reuniaoAutor, no session or session was closed
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:383)
	at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:375)
	at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:368)
	at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:111)
	at org.hibernate.collection.PersistentBag.iterator(PersistentBag.java:272)
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:382)
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.supportedTypeForEachIterator(ForEachSupport.java:258)
	at org.apache.taglibs.standard.tag.common.core.ForEachSupport.prepare(ForEachSupport.java:189)
	at javax.servlet.jsp.jstl.core.LoopTagSupport.doStartTag(LoopTagSupport.java:287)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fforEach_005f7(reuniao_jsp.java:2386)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fif_005f20(reuniao_jsp.java:2318)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fforEach_005f4(reuniao_jsp.java:1899)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fforEach_005f3(reuniao_jsp.java:1696)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspx_meth_c_005fif_005f15(reuniao_jsp.java:1587)
	at org.apache.jsp.WEB_002dINF.jsp.reuniao.reuniao_jsp._jspService(reuniao_jsp.java:356)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
	... 66 more

Olá Lucas, Passando mais informações, talvez ajude a decifrar qual o problema da falta de sessão na view.
As sessão fechada ou não disponível agora, ocorre apenas em objetos com escopo de sessão “@SessionScope”.

UsuarioScope (resgitrado no login)

@Component
@SessionScoped
public class UsuarioScoped {
	
	private UsuarioEpico usuarioEpico;

	.... 
	
}

Usuário Epico (entidade) e Reuniao (entidade) Para ver o relacionamento.



@Entity
@Table(name="INFRA_USUARIO_EPICO")
public class UsuarioEpico implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id @GeneratedValue
	private Long id;
	
	@OneToMany(mappedBy="autor", fetch=FetchType.LAZY)
	private Collection<Reuniao> reuniaoAutor;
	
        // + atributes + getters and setters
	
}



@Table(name="REUNIAO")
@Entity
public class Reuniao implements Serializable{

	private static final long serialVersionUID = 1L;

        @ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="id_autor")
	private UsuarioEpico autor;

}

View que chama usuarioScope.usuarioEpico.reuniaoAutor


<c:forEach items="${usuarioScoped.usuarioEpico.reuniaoAutor}" var="ra">
... 
</c:forEach>

Abraços,
Jsign