<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "Filtro do Hibernate (Dúvida)"]]></title>
		<link>http://forum.mentaframework.org/posts/list/3.page</link>
		<description><![CDATA[Latest messages posted in the topic "Filtro do Hibernate (Dúvida)"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Filtro do Hibernate (Dúvida)</title>
				<description><![CDATA[ Gostaria de saber como esse filtro funciona. Pelo o que eu entendi lendo a API, o filtro abre e fecha a conexão do Hibernate, não precisando fechar a sessão na mão. 

Gostaria de saber se ele fecha a sessão antes que a resposta seja enviada ao cliente e se ele executa um commit no banco antes de fechar.

]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/47.page#229</guid>
				<link>http://forum.mentaframework.org/posts/list/47.page#229</link>
				<pubDate><![CDATA[Thu, 4 Aug 2005 10:26:54]]> GMT</pubDate>
				<author><![CDATA[ Glaucio]]></author>
			</item>
			<item>
				<title>Re:Filtro do Hibernate (Dúvida)</title>
				<description><![CDATA[ Acho que o filtro está fechando a sessão antes de fazer o forward, o que pode estar te complicando a vida.

Mas se deixar para fechar depois do forward, como vc vai fechar essa sessão ??????

Acho que o Rubem pode te dar uma ajudada com isso...
]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/47.page#233</guid>
				<link>http://forum.mentaframework.org/posts/list/47.page#233</link>
				<pubDate><![CDATA[Thu, 4 Aug 2005 19:18:39]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>Re:Filtro do Hibernate (Dúvida)</title>
				<description><![CDATA[ Olá

apesar de eu ter implementado esse filtro <b>não recomendo o seu uso</b>. o correto é usar DAOs+HibernateUtil
http://www.hibernate.org/hib_docs/v3/reference/en/html/quickstart.html#quickstart-playingwithcats

Veja a classe HibernateUtil]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/47.page#235</guid>
				<link>http://forum.mentaframework.org/posts/list/47.page#235</link>
				<pubDate><![CDATA[Fri, 5 Aug 2005 17:23:01]]> GMT</pubDate>
				<author><![CDATA[ RubemAzenha]]></author>
			</item>
			<item>
				<title>Re:Filtro do Hibernate (Dúvida)</title>
				<description><![CDATA[ Dependendo do caso dá para usar sim !!!

Por exemplo, vc pode usar a interface ModelDriven para injetar a session diretamente no seu MODEL.

]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/47.page#236</guid>
				<link>http://forum.mentaframework.org/posts/list/47.page#236</link>
				<pubDate><![CDATA[Fri, 5 Aug 2005 17:31:32]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>Filtro do Hibernate (Dúvida)</title>
				<description><![CDATA[ Dá pra usar, mas neste caso um HibernateUtil seria bem melhor, principalmente por que ele vai manter uma unica session(hibernate) para a mesma thread\session(HTTP), não vai ficar abrindo uma nova session(hibernate) a cada request. é o que eu tenho ouvido falar por aí.]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/47.page#237</guid>
				<link>http://forum.mentaframework.org/posts/list/47.page#237</link>
				<pubDate><![CDATA[Sat, 6 Aug 2005 00:00:41]]> GMT</pubDate>
				<author><![CDATA[ RubemAzenha]]></author>
			</item>
			<item>
				<title>Re:Filtro do Hibernate (Dúvida)</title>
				<description><![CDATA[ Mas o filtro tb só vai abrir uma session por thread, isto é, por request. Dá exatamente no mesmo, não?
]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/47.page#240</guid>
				<link>http://forum.mentaframework.org/posts/list/47.page#240</link>
				<pubDate><![CDATA[Sat, 6 Aug 2005 10:00:38]]> GMT</pubDate>
				<author><![CDATA[ saoj]]></author>
			</item>
			<item>
				<title>Re:Filtro do Hibernate (Dúvida)</title>
				<description><![CDATA[ Olá... estou começando a utilizar agora mentawai com hibernate e já estou utilizando o HibernateFilter, só que tenho enfrentado algumas dificuldades e parece que pode ser no momento mesmo de fechar a sessão, se é antes da execução do Forward ou depois. Vou colocar aqui o meu simples problema para que, quem sabe, possam me ajudar.

Estou utilizando o IDE Netbeans 5, hibernate 3.1 e mentawai 1.2. O browser é o Mozilla Firefox 1.5 e tenho testado a aplicação tanto em Debian (com postgresql e JDK 1.6 beta) quanto em Windows XP (com mysql JDK 1.5).

Estou fazendo um pequeno aplicativo que pede id de cliente (InVenda.jsp) que depois é analisado pela ação InVenda.java que da um forward para o formulário que pede o id do produto e a quantidade (InItemVenda.jsp) que é analisado pela ação InItemVenda.java e dá um forward novamente para InItemVenda.jsp solicitando um outro id e quantidade de produto e mostrando uma lista de itens da venda.

Minha primeira alternativa foi enviar o objeto venda pelo output e lá no jsp acessar o cliente e os itens de venda e pelos itens de venda acessar os produtos. Para tanto, defini minha coleção de itens de venda em venda com lazy="false".

Abaixo a listagem dos hbm.xml e das minhas actions e jsps:

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
Venda.hbm.xml
&lt;hibernate-mapping&gt;
   &lt;class name="model.Venda"&gt;
      &lt;id name="id"&gt;
         &lt;generator class="native"/&gt;
      &lt;/id&gt;
      
      &lt;property name="data"/&gt;
      
      &lt;set name="itensVenda" inverse="true" lazy="false"&gt;
         &lt;key column="venda"/&gt;
         &lt;one-to-many class="model.ItemVenda"/&gt;
      &lt;/set&gt;
           
      &lt;many-to-one name="cliente" class="model.Cliente"/&gt;
   &lt;/class&gt;
&lt;/hibernate-mapping&gt;
</pre>
		</div>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
ItemVenda.hbm.xml
&lt;hibernate-mapping&gt;
    &lt;class name="model.ItemVenda"&gt;
        &lt;id name="id"&gt;
            &lt;generator class="native"/&gt;
        &lt;/id&gt;
      
        &lt;property name="quantidade"/&gt;
        &lt;property name="precoUnitario" type="big_decimal"/&gt;
      
        &lt;many-to-one name="Venda" class="model.Venda"/&gt;
        &lt;many-to-one name="Produto" class="model.Produto"/&gt;
    &lt;/class&gt;
&lt;/hibernate-mapping&gt;
</pre>
		</div>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
&lt;hibernate-mapping&gt;
    &lt;class name="model.Produto"&gt;
        &lt;id name="id"&gt;
            &lt;generator class="native"/&gt;
        &lt;/id&gt;
      
        &lt;property name="nome"/&gt;
        &lt;property name="precoUnitario" type="big_decimal"/&gt;
        
        &lt;many-to-one name="Grupo" class="model.Grupo"/&gt;        
      
    &lt;/class&gt;
&lt;/hibernate-mapping&gt;
</pre>
		</div>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
Cliente.hbm.xml
&lt;hibernate-mapping&gt;
    &lt;class name="model.Cliente"&gt;
        &lt;id name="id"&gt;
            &lt;generator class="native"/&gt;
        &lt;/id&gt;
      
        &lt;property name="nome"/&gt;
      
    &lt;/class&gt;
&lt;/hibernate-mapping&gt;
</pre>
		</div>

Em InVenda.java eu instancio uma nova Venda e coloco-a no contexto de sessão (é assim que se chama? Contexto de sessão?) e recupero-a em InItemVenda.java. Tive problemas em obter a coleção de itens de Venda com venda.getItensVenda(), então eu fiz aquele load da venda para passá-lo de objeto destacado para persistente.

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class InVenda extends BaseAction {
   
   public String execute&#40;&#41; throws Exception {
      String inClienteId = input.getStringValue&#40;"clienteId"&#41;;
      Integer clienteId;
      
      try {
         clienteId = Integer.valueOf&#40;inClienteId&#41;;
      } catch &#40;NumberFormatException e&#41; {

         return ERROR;
      }
      
      Session hbSession = &#40;Session&#41;input.getValue&#40;HibernateFilter.KEY&#41;;
      
      Cliente cliente = &#40;Cliente&#41;hbSession.get&#40;model.Cliente.class, clienteId&#41;;
      
      Transaction transaction = hbSession.beginTransaction&#40;&#41;;
      Venda venda = new Venda&#40;&#41;;
      venda.setCliente&#40;cliente&#41;;
      venda.setData&#40;Calendar.getInstance&#40;&#41;.getTime&#40;&#41;&#41;;
      hbSession.save&#40;venda&#41;;
      transaction.commit&#40;&#41;;
      
      session.setAttribute&#40;"venda", venda&#41;;
      
      return SUCCESS;
   }
   
}
</pre>
		</div>

<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
public class InItemVenda extends BaseAction {
   
   public String execute&#40;&#41; {
      Integer produtoId;
      Integer produtoQuantidade;
      
      try {
         produtoId = Integer.valueOf&#40;input.getStringValue&#40;"produtoId"&#41;&#41;;
         produtoQuantidade = Integer.valueOf&#40;input.getStringValue&#40;"produtoQuantidade"&#41;&#41;;
         
      } catch &#40;NumberFormatException e&#41; {
         return ERROR;
      }
      
      Venda venda = &#40;Venda&#41;session.getAttribute&#40;"venda"&#41;;

      Session hbSession = &#40;Session&#41;input.getValue&#40;HibernateFilter.KEY&#41;;
      Transaction transaction = hbSession.beginTransaction&#40;&#41;;
      
      venda = &#40;Venda&#41;hbSession.load&#40;Venda.class, venda.getId&#40;&#41;&#41;;
      Produto produto = &#40;Produto&#41;hbSession.get&#40;Produto.class, produtoId&#41;;
     
      ItemVenda itemVenda = new ItemVenda&#40;&#41;;
      itemVenda.setVenda&#40;venda&#41;;
      itemVenda.setProduto&#40;produto&#41;;
      itemVenda.setQuantidade&#40;produtoQuantidade&#41;;
      itemVenda.setPrecoUnitario&#40;produto.getPrecoUnitario&#40;&#41;&#41;;
      
      hbSession.save&#40;itemVenda&#41;;
      transaction.commit&#40;&#41;;
      
      output.setValue&#40;"itensVenda", venda.getItensVenda&#40;&#41;&#41;;
      
      return SUCCESS;
   }
   
}
</pre>
		</div>

Consigo realizar uma operação ou duas de InItemVenda.jsp e depois é apresentada a mensagem:
<span class="genmed"><b>Code:</b></span><br>
		<div style="overflow: auto; width: 100%;">
		<pre>
exception

javax.servlet.ServletException: javax.servlet.ServletException: javax.servlet.jsp.el.ELException: An error occurred while getting property "nome" from an instance of class model.Produto$$EnhancerByCGLIB$$880d5b28
	org.mentawai.core.Controller.service&#40;Controller.java:196&#41;
	javax.servlet.http.HttpServlet.service&#40;HttpServlet.java:802&#41;
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter&#40;MonitorFilter.java:362&#41;

root cause

org.mentawai.core.ConsequenceException: javax.servlet.ServletException: javax.servlet.jsp.el.ELException: An error occurred while getting property "nome" from an instance of class model.Produto$$EnhancerByCGLIB$$880d5b28
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException&#40;PageContextImpl.java:844&#41;
	org.apache.jasper.runtime.PageContextImpl.handlePageException&#40;PageContextImpl.java:781&#41;
	org.apache.jsp.InItemVenda_jsp._jspService&#40;InItemVenda_jsp.java:123&#41;
	org.apache.jasper.runtime.HttpJspBase.service&#40;HttpJspBase.java:97&#41;
	javax.servlet.http.HttpServlet.service&#40;HttpServlet.java:802&#41;
	org.apache.jasper.servlet.JspServletWrapper.service&#40;JspServletWrapper.java:322&#41;
	org.apache.jasper.servlet.JspServlet.serviceJspFile&#40;JspServlet.java:291&#41;
	org.apache.jasper.servlet.JspServlet.service&#40;JspServlet.java:241&#41;
	javax.servlet.http.HttpServlet.service&#40;HttpServlet.java:802&#41;
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter&#40;MonitorFilter.java:362&#41;
	org.mentawai.core.Forward.forward&#40;Forward.java:110&#41;
	org.mentawai.core.Forward.execute&#40;Forward.java:94&#41;
	org.mentawai.core.Controller.service&#40;Controller.java:192&#41;
	javax.servlet.http.HttpServlet.service&#40;HttpServlet.java:802&#41;
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter&#40;MonitorFilter.java:362&#41;

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
</pre>
		</div>

Obrigado pela atenção amigos.]]></description>
				<guid isPermaLink="true">http://forum.mentaframework.org/posts/list/47.page#891</guid>
				<link>http://forum.mentaframework.org/posts/list/47.page#891</link>
				<pubDate><![CDATA[Tue, 21 Mar 2006 11:59:04]]> GMT</pubDate>
				<author><![CDATA[ flaviomreis]]></author>
			</item>
	</channel>
</rss>
