Fala Galera, blz?
nao to conseguindo resolver nem entender o pq dessa exception
o erro é o seguinte
30/11/2010 13:20:44 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet action threw exception
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.tecnoarte.drtools.model.usuario.Usuario.privilegios, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
at org.hibernate.collection.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:343)
at org.hibernate.collection.AbstractPersistentCollection.read(AbstractPersistentCollection.java:86)
at org.hibernate.collection.PersistentSet.iterator(PersistentSet.java:163)
at br.com.tecnoarte.drtools.controller.wizardcontroledeacesso.DefinirPermissoesAction.processa(DefinirPermissoesAction.java:44)
at br.com.tecnoarte.drtools.controller.AbstractSecureAction.execute(AbstractSecureAction.java:61)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1078)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:396)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:232)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.onbudget.hibernate.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:46)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
minha classe Usuario:
public class Usuario implements Serializable {
private static int NUM_FALHAS_AUTENTICACAO_PARA_BLOQUEIO = 5;
private Integer id;
private String nome;
private String email, senhaCriptografada, tokenValidacaoEmail;
private Date dataConfirmacaoEmail;
@Temporal(TemporalType.DATE)
private Date dataValidadeSenha;
private int numFalhasAutenticacao;
private Set privilegios = new HashSet();
private Set gruposDePrivilegios = new HashSet();
private String perfil;
private Cliente cliente;
private transient Set todosPrivilegios;
private Boolean emailValido;
//gets e sets
//metodo que quero utilizar dentro da action do Struts
public int getPermissaoDeAcesso(Privilegio privilegio) {
int retorno = -1;
//verifica se os Privilegios contem o privilegio
if (privilegios.contains(privilegio)) {
//percorrer o grupo e comparar com o privilegio passado e devolver o nivel do grupo
for (Object o : privilegios) {
//verifica se o privilegio do grupo engloba o do privilegio passado
if (((Privilegio) o).engloba(privilegio)) {
retorno = ((Privilegio) o).getNivel();
break;
}
}
} else {
for (Object grp : gruposDePrivilegios) {
for (Object privilegioObj : ((GrupoDePrivilegios) grp).getPrivilegios()) {
//verifica se um privilegio engloba o outro
if (((Privilegio) privilegioObj).engloba(privilegio)) {
int nivelDestePrivilegio = ((Privilegio) privilegioObj).getNivel();
if (retorno < nivelDestePrivilegio) {
retorno = nivelDestePrivilegio;
}
}
}
}
}
return retorno;
}
os atributos privilegios e grupoDePrivilegios representam um relacionamento many-to-many com GrupoDePrivilegio e Privilegio em sí
mapeamento Usuario
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class dynamic-insert="true" dynamic-update="true" lazy="false" name="br.com.tecnoarte.drtools.model.usuario.Usuario" optimistic-lock="version" table="TB_USUARIO">
<id column="usuario_id" name="id" type="integer">
<generator class="native"/>
</id>
<many-to-one column="cliente_id" lazy="false" name="cliente" not-null="true"/>
<property column="nome" length="40" name="nome" not-null="true" type="string"/>
<property column="email" length="40" name="email" type="string" unique="true"/>
<property column="senha" length="20" name="senhaCriptografada" type="string"/>
<property column="dt_validacao_email" name="dataConfirmacaoEmail" type="timestamp"/>
<property column="token_validacao_email" length="40" name="tokenValidacaoEmail" type="string"/>
<property column="dt_validade_senha" name="dataValidadeSenha" type="timestamp"/>
<property column="perfil" name="perfil" type="string"/>
<property column="emailValido" name="emailValido" type="boolean"/>
<set name="privilegios" table="TB_USUARIO_PRIVILEGIO_XREF">
<key column="usuario_id"/>
<many-to-many class="br.com.tecnoarte.drtools.model.usuario.Privilegio" column="privilegio_id"/>
</set>
<set name="gruposDePrivilegios" table="TB_USUARIO_GRPPRIVILEGIO_XREF">
<key column="usuario_id" not-null="true"/>
<many-to-many class="br.com.tecnoarte.drtools.model.usuario.GrupoDePrivilegios" column="grp_privilegio_id"/>
</set>
</class>
</hibernate-mapping>
Mapeamento Privilegio
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class lazy="false" mutable="false" name="br.com.tecnoarte.drtools.model.usuario.Privilegio" table="TB_PRIVILEGIO">
<id column="privilegio_id" name="id" type="integer">
<generator class="native"/>
</id>
<property column="funcionalidade" length="20" name="funcionalidade" type="string"/>
<property column="nivel" length="2" name="nivel" type="integer"/>
</class>
</hibernate-mapping>
Mapeamento GrupoDePrivilegio
<hibernate-mapping>
<class lazy="false" name="br.com.tecnoarte.drtools.model.usuario.GrupoDePrivilegios" table="TB_GRUPO_PRIVILEGIOS">
<id column="grp_privilegio_id" name="id" type="integer">
<generator class="native"/>
</id>
<property column="nome" length="20" name="nome" type="string" unique="true"/>
<set lazy="false" name="privilegios" table="TB_GRPPRIVILEGIO_PRIVILEGIO_XREF">
<key column="grp_privilegio_id" not-null="true"/>
<many-to-many class="br.com.tecnoarte.drtools.model.usuario.Privilegio" column="privilegio_id" lazy="false"/>
</set>
</class>
</hibernate-mapping>
na minha action do struts
o usuario esta chegando
Usuario user = (Usuario) request.getSession().getAttribute("usuarioEscolhido");
//lista com todos os privilegios
hibernateSession.flush();
for (Object o : user.getPrivilegios()) {
dForm.setNivelSelected(String.valueOf(user.getPermissaoDeAcesso((Privilegio) o)));
}
return mapping.findForward(SUCESSO);
}
quando ele entra no for… ja da o erro