<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2enclosuresfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Notas de Rua</title><link>http://notasderua.blogspot.com/</link><description></description><language>en</language><managingEditor>noreply@blogger.com (Tiago Ramos)</managingEditor><lastBuildDate>Tue, 13 Oct 2009 21:34:44 PDT</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">21</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/">25</openSearch:itemsPerPage><media:category scheme="http://www.itunes.com/dtds/podcast-1.0.dtd">Technology/Gadgets</media:category><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NotasDeRua" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Este blog mudou para:</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/BDeahL_zSWo/este-blog-mudou-para.html</link><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Mon, 14 Jan 2008 06:04:22 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-6272909241775888662</guid><description>Acesse &lt;a href="http://tramos.railsplayground.net/"&gt;http://tramos.railsplayground.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-6272909241775888662?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/BDeahL_zSWo" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-14T12:04:22.991-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2008/01/este-blog-mudou-para.html</feedburner:origLink></item><item><title>Quem quer dinheiro???</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/19v-BVQwBn8/carreira-info-salrios.html</link><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Thu, 20 Dec 2007 04:26:00 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-513723326286848852</guid><description>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PNSUvKuIDBU/R2pPOriBfXI/AAAAAAAAAN4/L6lIooIoSD4/s1600-h/nevermind.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_PNSUvKuIDBU/R2pPOriBfXI/AAAAAAAAAN4/L6lIooIoSD4/s400/nevermind.jpg" alt="" id="BLOGGER_PHOTO_ID_5146012637846404466" border="0" /&gt;&lt;/a&gt;

A &lt;a href="http://info.abril.com.br/"&gt;info&lt;/a&gt; divulgou agora em Dezembro uma pesquisa um tanto interessante, com dados da &lt;a href="http://www.manager.com.br/"&gt;Manager Assessoria em Recursos Humanos&lt;/a&gt;.

Eu acho que você merece um aumento!

&lt;span style="color: rgb(204, 102, 0);font-size:130%;" &gt;&lt;a href="http://info.abril.com.br/carreira/salarios.shl"&gt;Confira aqui&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-513723326286848852?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/19v-BVQwBn8" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-20T10:26:00.147-02:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/_PNSUvKuIDBU/R2pPOriBfXI/AAAAAAAAAN4/L6lIooIoSD4/s72-c/nevermind.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/12/carreira-info-salrios.html</feedburner:origLink></item><item><title>Curso Struts - Aula 03</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/nOok2Omnr1M/curso-struts-aula-03.html</link><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Wed, 12 Dec 2007 10:55:53 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-1948447198348073297</guid><description>&lt;div style="width:425px;text-align:left" id="__ss_201112"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=struts-aula-03-1197485070218769-2"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=struts-aula-03-1197485070218769-2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/ramos.tiago/struts-aula-03" title="View 'Struts - Aula 03' on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;

tiles-defs.xml
&lt;pre class="codigo"&gt;
&amp;lt;?xml version="1.0" encoding="ISO-8859-1" ?&amp;gt;
&amp;lt;!DOCTYPE tiles-definitions PUBLIC  
        "-//Apache Software Foundation//DTD Tiles Configuration 1.3//EN"  
        "http://struts.apache.org/dtds/tiles-config_1_3.dtd"&amp;gt;

&amp;lt;tiles-definitions&amp;gt;
 &amp;lt;definition name="homepage" template="/jsp/layouts/layout.jsp"&amp;gt;
  &amp;lt;put name="title" value="Livraria Web" /&amp;gt;
  &amp;lt;put name="header" value="/jsp/layouts/banner.jsp" /&amp;gt;
  &amp;lt;put name="menu" value="/jsp/layouts/common_menu.jsp" /&amp;gt;
  &amp;lt;put name="body" value="/jsp/layouts/home_body.jsp" /&amp;gt;
  &amp;lt;put name="footer" value="/jsp/layouts/credits.jsp" /&amp;gt;
 &amp;lt;/definition&amp;gt;

 &amp;lt;!-- Livros --&amp;gt;
 &amp;lt;definition name="listarLivros" extends="homepage"&amp;gt;
  &amp;lt;put name="body" value="/jsp/livro/listar.jsp" /&amp;gt;
 &amp;lt;/definition&amp;gt;

 &amp;lt;definition name="formularioLivros" extends="homepage"&amp;gt;
  &amp;lt;put name="body" value="/jsp/livro/criar.jsp" /&amp;gt;
 &amp;lt;/definition&amp;gt;

 &amp;lt;!-- Usuarios --&amp;gt;
 &amp;lt;definition name="listarUsuarios" extends="homepage"&amp;gt;
  &amp;lt;put name="body" value="/jsp/usuario/listar.jsp" /&amp;gt;
 &amp;lt;/definition&amp;gt;

 &amp;lt;definition name="formularioUsuarios" extends="homepage"&amp;gt;
  &amp;lt;put name="body" value="/jsp/usuario/formulario.jsp" /&amp;gt;
 &amp;lt;/definition&amp;gt;

 &amp;lt;!-- Login --&amp;gt;
 &amp;lt;definition name="loginUsuario" extends="homepage"&amp;gt;
  &amp;lt;put name="body" value="/jsp/login/login.jsp" /&amp;gt;
 &amp;lt;/definition&amp;gt;
&amp;lt;/tiles-definitions&amp;gt;
&lt;/pre&gt;

/jsp/layouts/layout.jsp
&lt;pre class="codigo"&gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%&amp;gt;

&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;

&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;meta http-equiv="content-type" content="text/html;charset=UTF-8" /&amp;gt;
  &amp;lt;title&amp;gt;&amp;lt;tiles:getAsString name="title" /&amp;gt;&amp;lt;/title&amp;gt;
  &amp;lt;link rel="stylesheet" type="text/css" href="&amp;lt;%=request.getContextPath() %&amp;gt;/stylesheets/scaffold.css"/&amp;gt;

&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div id="page"&amp;gt;
        &amp;lt;div id="header"&amp;gt;
         &amp;lt;tiles:insert name="header" /&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;hr class="hidden" /&amp;gt;
      &amp;lt;div id="main"&amp;gt;
        &amp;lt;div id="content-wrapper"&amp;gt;
          &amp;lt;div id="content"&amp;gt;
             &amp;lt;tiles:insert name="body" /&amp;gt;
          &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div id="sidebar-wrapper"&amp;gt;
         &amp;lt;tiles:insert name="menu" /&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
        &amp;lt;hr class="hidden" /&amp;gt;
        &amp;lt;div id="footer"&amp;gt;
         &amp;lt;tiles:insert name="footer" /&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;

struts-config.xml
&lt;pre class="codigo"&gt;
&amp;lt;?xml version="1.0" encoding="ISO-8859-1" ?&amp;gt;

&amp;lt;!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd"&amp;gt;

&amp;lt;struts-config&amp;gt;

 &amp;lt;!-- Definicao dos Formulario de Beans --&amp;gt;
 &amp;lt;form-beans&amp;gt;
  &amp;lt;form-bean name="livroForm"
   type="br.com.livrariaweb.controle.LivroForm" /&amp;gt;
  &amp;lt;form-bean name="usuarioForm"
   type="br.com.livrariaweb.controle.UsuarioForm" /&amp;gt;
 &amp;lt;/form-beans&amp;gt;

 &amp;lt;!-- Definicao de Excecoes Globais --&amp;gt;
 &amp;lt;global-exceptions&amp;gt;&amp;lt;/global-exceptions&amp;gt;

 &amp;lt;!-- Definicao de Redirecionamento Global --&amp;gt;
 &amp;lt;global-forwards&amp;gt;
  &amp;lt;forward name="homepage" path="/homepage.do" /&amp;gt;
 &amp;lt;/global-forwards&amp;gt;

 &amp;lt;!-- Mapeamento de Acoes --&amp;gt;
 &amp;lt;action-mappings&amp;gt;

  &amp;lt;action path="/homepage"
   type="br.com.livrariaweb.controle.HomeAction"&amp;gt;
   &amp;lt;forward name="homepage" path="homepage" /&amp;gt;
  &amp;lt;/action&amp;gt;

  &amp;lt;!-- Cadastro de Livros --&amp;gt;
  &amp;lt;action path="/formularioLivros" forward="formularioLivros" /&amp;gt;

  &amp;lt;action path="/salvarLivro"
   type="br.com.livrariaweb.controle.LivroSalvarAction" name="livroForm"
   scope="request" input="formularioLivros"&amp;gt;
   &amp;lt;forward name="listar" path="/listarLivros.do"
    redirect="true" /&amp;gt;
  &amp;lt;/action&amp;gt;

  &amp;lt;action path="/listarLivros"
   type="br.com.livrariaweb.controle.LivroAction"&amp;gt;
   &amp;lt;forward name="listar" path="listarLivros" /&amp;gt;
  &amp;lt;/action&amp;gt;

  &amp;lt;!-- Cadastro de Usuários --&amp;gt;
  &amp;lt;action path="/formularioUsuarios" forward="formularioUsuarios" /&amp;gt;

  &amp;lt;action path="/listarUsuarios"
   type="br.com.livrariaweb.controle.UsuarioAction" name="usuarioForm"
   scope="request" input="formularioUsuarios" parameter="metodo"
   validate="true"&amp;gt;
   &amp;lt;forward name="listar" path="listarUsuarios" /&amp;gt;
   &amp;lt;forward name="formulario" path="formularioUsuarios" /&amp;gt;
  &amp;lt;/action&amp;gt;

  &amp;lt;!-- Login e Logout --&amp;gt;
  &amp;lt;action path="/login" forward="loginUsuario" /&amp;gt;

  &amp;lt;action path="/autenticar"
   type="br.com.livrariaweb.controle.LoginAction" name="usuarioForm"
   scope="request" input="loginUsuario" validate="true"&amp;gt;
   &amp;lt;forward name="homepage" path="/homepage.do" /&amp;gt;
  &amp;lt;/action&amp;gt;

  &amp;lt;action path="/sair"
   type="br.com.livrariaweb.controle.LogoutAction" scope="request"&amp;gt;
   &amp;lt;forward name="homepage" path="homepage" /&amp;gt;
  &amp;lt;/action&amp;gt;

  &amp;lt;!-- Comprar --&amp;gt;
  &amp;lt;action path="/comprar"
   type="br.com.livrariaweb.controle.ComprarAction"&amp;gt;
   &amp;lt;forward name="homepage" path="homepage" /&amp;gt;
  &amp;lt;/action&amp;gt;
 &amp;lt;/action-mappings&amp;gt;

 &amp;lt;!-- Arquivo de Definicao de Mensagens --&amp;gt;
 &amp;lt;message-resources parameter="mensagem" /&amp;gt;

 &amp;lt;plug-in className="org.apache.struts.tiles.TilesPlugin"&amp;gt;
  &amp;lt;set-property property="definitions-config"
   value="/WEB-INF/tiles-defs.xml" /&amp;gt;
 &amp;lt;/plug-in&amp;gt;

&amp;lt;/struts-config&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-1948447198348073297?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/nOok2Omnr1M" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-12T16:55:53.829-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">13</thr:total><enclosure url="http://static.slideshare.net/swf/ssplayer2.swf?doc=struts-aula-03-1197485070218769-2" length="86990" type="application/x-shockwave-flash" /><media:content url="http://static.slideshare.net/swf/ssplayer2.swf?doc=struts-aula-03-1197485070218769-2" fileSize="86990" type="application/x-shockwave-flash" /><feedburner:origLink>http://notasderua.blogspot.com/2007/12/curso-struts-aula-03.html</feedburner:origLink></item><item><title>Curso Struts - Aula 02</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/7h8Q2sWaq0o/curso-struts-aula-02.html</link><category>struts</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Mon, 10 Dec 2007 03:19:34 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-6877158481735009396</guid><description>&lt;div style="width: 425px; text-align: left;" id="__ss_197792"&gt;&lt;object style="margin: 0px;" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=curso-struts-aula-02-1197251723348400-2"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=curso-struts-aula-02-1197251723348400-2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border: 0px none ; margin-bottom: -5px;" alt="SlideShare" /&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/ramos.tiago/curso-struts-aula-02" title="View 'Curso Struts - Aula 02' on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;

&lt;span style="color: rgb(255, 0, 0);"&gt;Para essa nova aula precisamos de uma nova biblioteca: struts-extras-1.3.8.jar&lt;/span&gt;

br.com.livrariaweb.entidades.Usuario
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.entidades;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Usuario {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 @Column(nullable = false)
 private String login;

 @Column(nullable = false)
 private String nome;

 @Column(nullable = false)
 private String senha;

       //gets e sets
&lt;/pre&gt;

br.com.livrariaweb.servico.UsuarioServico
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.servico;

import java.util.List;

import org.hibernate.Session;

import br.com.livrariaweb.entidades.Usuario;
import br.com.livrariaweb.util.HibernateUtil;

public class UsuarioServico {

 public List&lt;usuario&gt; listar() {
  return HibernateUtil.getSession().createCriteria(Usuario.class).list();
 }

 public Usuario carregar(Integer id) {
  return (Usuario) HibernateUtil.getSession().load(Usuario.class, id);
 }

 public void salvar(Usuario usuario) {
  Session s = HibernateUtil.getSession();
  s.beginTransaction();
  if (usuario.getId() == 0)
   s.save(usuario);
  else
   s.update(usuario);
  s.getTransaction().commit();
  s.close();
 }

 public void excluir(Usuario usuario) {
  Session s = HibernateUtil.getSession();
  s.beginTransaction();
  s.delete(usuario);
  s.getTransaction().commit();
  s.close();
 }
}
&lt;/usuario&gt;&lt;/pre&gt;

br.com.livrariaweb.util.HibernateUtil
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

 private static final SessionFactory sessionFactory;

 static {
  try {
   // Criando a SessionFactory apartir no hibernate.cfg.xml
   sessionFactory = new AnnotationConfiguration().configure()
     .buildSessionFactory();
  } catch (Throwable ex) {
   System.err.println("Não foi possivel criar a SessionFactory." + ex);
   throw new ExceptionInInitializerError(ex);
  }
 }

 public static Session getSession() {
  return sessionFactory.openSession();
 }

}
&lt;/pre&gt;

hibernate.cfg.xml
&lt;pre class="codigo"&gt;
&amp;lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
&amp;lt;hibernate-configuration&gt;

 &amp;lt;session-factory&gt;

       &amp;lt;!-- Database connection settings --&gt;
       &amp;lt;property name="connection.driver_class"&gt;com.mysql.jdbc.Driver&amp;lt;/property&gt;
       &amp;lt;property name="connection.url"&gt;jdbc:mysql://localhost/livrariaweb&amp;lt;/property&gt;
       &amp;lt;property name="connection.username"&gt;root&amp;lt;/property&gt;
       &amp;lt;property name="connection.password"&gt;root&amp;lt;/property&gt;
       &amp;lt;property name="connection.pool_size"&gt;1&amp;lt;/property&gt;

       &amp;lt;!-- SQL dialect --&gt;
       &amp;lt;property name="dialect"&gt;org.hibernate.dialect.MySQLDialect&amp;lt;/property&gt;

       &amp;lt;property name="show_sql"&gt;true&amp;lt;/property&gt;

       &amp;lt;property name="hbm2ddl.auto"&gt;update&amp;lt;/property&gt;

  &amp;lt;mapping class="br.com.livrariaweb.entidades.Livro"/&gt;
  &amp;lt;mapping class="br.com.livrariaweb.entidades.Usuario"/&gt;
  
 &amp;lt;/session-factory&gt;

&amp;lt;/hibernate-configuration&amp;gt;
&lt;/pre&gt;

br.com.livrariaweb.controle.UsuarioAction
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.controle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

import br.com.livrariaweb.entidades.Usuario;
import br.com.livrariaweb.servico.UsuarioServico;

public class UsuarioAction extends DispatchAction {

 private UsuarioServico servico = new UsuarioServico();

 public ActionForward listar(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {

  request.setAttribute("usuarios", servico.listar());

  return mapping.findForward("listar");
 }

 public ActionForward salvar(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {

  Usuario u = ((UsuarioForm) form).getUsuario();
  servico.salvar(u);

  request.setAttribute("usuarios", servico.listar());

  return mapping.findForward("listar");
 }

 public ActionForward carregar(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {

  Integer id = Integer.valueOf(request.getParameter("idUsuario"));
  Usuario u = servico.carregar(id);

  ((UsuarioForm) form).setUsuario(u);

  return mapping.findForward("formulario");
 }

 public ActionForward excluir(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {

  Integer id = Integer.valueOf(request.getParameter("idUsuario"));
  Usuario u = servico.carregar(id);
  servico.excluir(u);

  request.setAttribute("usuarios", servico.listar());

  return mapping.findForward("listar");
 }
}
&lt;/pre&gt;

br.com.livrariaweb.controle.UsuarioForm
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.controle;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import br.com.livrariaweb.entidades.Usuario;

public class UsuarioForm extends ActionForm {

 private Usuario usuario = new Usuario();

 public Usuario getUsuario() {
  return usuario;
 }

 public void setUsuario(Usuario usuario) {
  this.usuario = usuario;
 }

 @Override
 public ActionErrors validate(ActionMapping mapping,
   HttpServletRequest request) {

  ActionErrors erros = new ActionErrors();
  if (usuario.getLogin() != null
    &amp;amp;&amp;amp; usuario.getLogin().trim().length() == 0) {
   erros.add("usuario.login", new ActionMessage(
     "form.campoObrigatorio", "Login"));
  }
  if (usuario.getNome() != null &amp;amp;&amp;amp; usuario.getNome().trim().length() == 0) {
   erros.add("usuario.nome", new ActionMessage(
     "form.campoObrigatorio", "Nome"));
  }
  if (usuario.getSenha() != null
    &amp;amp;&amp;amp; usuario.getSenha().length() == 0) {
   erros.add("usuario.senha", new ActionMessage(
     "form.campoObrigatorio", "Senha"));
  }
  return erros;
 }

}
&lt;/pre&gt;

mensagem.properties
&lt;pre class="codigo"&gt;
form.campoObrigatorio={0}: Campo Obrigatório
form.salvar=salvar
&lt;/pre&gt;

struts-config.xml
&lt;pre class="codigo"&gt;
&amp;lt;?xml version="1.0" encoding="ISO-8859-1" ?&amp;gt;

&amp;lt;!DOCTYPE struts-config PUBLIC
         "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
         "http://struts.apache.org/dtds/struts-config_1_3.dtd"&amp;gt;

&amp;lt;struts-config&amp;gt;

 &amp;lt;!-- Definicao dos Formulario de Beans --&amp;gt;
 &amp;lt;form-beans&amp;gt;
  &amp;lt;form-bean name="livroForm"
   type="br.com.livrariaweb.controle.LivroForm" /&amp;gt;
  &amp;lt;form-bean name="usuarioForm"
   type="br.com.livrariaweb.controle.UsuarioForm" /&amp;gt;
 &amp;lt;/form-beans&amp;gt;

 &amp;lt;!-- Definicao de Excecoes Globais --&amp;gt;
 &amp;lt;global-exceptions&amp;gt;&amp;lt;/global-exceptions&amp;gt;

 &amp;lt;!-- Definicao de Redirecionamento Global --&amp;gt;
 &amp;lt;global-forwards&amp;gt;
  &amp;lt;forward name="inicio" path="/Inicio.do" /&amp;gt;
 &amp;lt;/global-forwards&amp;gt;

 &amp;lt;!-- Mapeamento de Acoes --&amp;gt;
 &amp;lt;action-mappings&amp;gt;
  &amp;lt;action path="/Inicio" forward="/jsp/inicio.jsp" /&amp;gt;

  &amp;lt;action path="/Livros"
   type="br.com.livrariaweb.controle.LivroAction"&amp;gt;
   &amp;lt;forward name="listar" path="/jsp/livro/listar.jsp" /&amp;gt;
  &amp;lt;/action&amp;gt;

  &amp;lt;action path="/LivroSalvar"
   type="br.com.livrariaweb.controle.LivroSalvarAction" name="livroForm"
   scope="request" input="/jsp/livro/criar.jsp"&amp;gt;
   &amp;lt;forward name="listar" path="/Livros.do" redirect="true" /&amp;gt;
  &amp;lt;/action&amp;gt;

  &amp;lt;action path="/usuario"
   type="br.com.livrariaweb.controle.UsuarioAction" name="usuarioForm"
   scope="request" input="/jsp/usuario/formulario.jsp"
   parameter="metodo" validate="true"&amp;gt;
   &amp;lt;forward name="listar" path="/jsp/usuario/listar.jsp" /&amp;gt;
   &amp;lt;forward name="formulario" path="/jsp/usuario/formulario.jsp" /&amp;gt;
  &amp;lt;/action&amp;gt;

 &amp;lt;/action-mappings&amp;gt;

 &amp;lt;!-- Arquivo de Definicao de Mensagens --&amp;gt;
 &amp;lt;message-resources parameter="mensagem" /&amp;gt;

&amp;lt;/struts-config&amp;gt;
&lt;/pre&gt;

jsp/usuario/listar.jsp
&lt;pre class="codigo"&gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%&amp;gt;

&amp;lt;html:html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;Usuário&amp;lt;/h1&amp;gt;
&amp;lt;table border="1" cellpadding="1"&amp;gt;
 &amp;lt;tr&amp;gt;
  &amp;lt;th&amp;gt;Login&amp;lt;/th&amp;gt;
  &amp;lt;th&amp;gt;Nome&amp;lt;/th&amp;gt;
  &amp;lt;th&amp;gt;Senha&amp;lt;/th&amp;gt;
 &amp;lt;/tr&amp;gt;
 &amp;lt;logic:iterate id="u" name="usuarios"&amp;gt;
  &amp;lt;tr&amp;gt;
   &amp;lt;td&amp;gt;&amp;lt;bean:write name="u" property="login" /&amp;gt;&amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;&amp;lt;bean:write name="u" property="nome" /&amp;gt;&amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;&amp;lt;bean:write name="u" property="senha" /&amp;gt;&amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;&amp;lt;html:link action="/usuario.do"&amp;gt;
    Editar
    &amp;lt;html:param name="idUsuario"&amp;gt;
     &amp;lt;bean:write name="u" property="id" /&amp;gt;
    &amp;lt;/html:param&amp;gt;
    &amp;lt;html:param name="metodo"&amp;gt;carregar&amp;lt;/html:param&amp;gt;
   &amp;lt;/html:link&amp;gt;&amp;lt;/td&amp;gt;
   &amp;lt;td&amp;gt;&amp;lt;html:link action="/usuario.do"&amp;gt;
    Excluir
    &amp;lt;html:param name="idUsuario"&amp;gt;
     &amp;lt;bean:write name="u" property="id" /&amp;gt;
    &amp;lt;/html:param&amp;gt;
    &amp;lt;html:param name="metodo"&amp;gt;excluir&amp;lt;/html:param&amp;gt;
   &amp;lt;/html:link&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
 &amp;lt;/logic:iterate&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;html:link href="jsp/usuario/formulario.jsp"&amp;gt;Novo Usuário&amp;lt;/html:link&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html:html&amp;gt;
&lt;/pre&gt;

jsp/usuario/formulario.jsp
&lt;pre class="codigo"&gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%&amp;gt;

&amp;lt;html:html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h3 style="color: red;"&amp;gt;
 &amp;lt;html:messages id="erro"&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;bean:write name="erro" /&amp;gt;&amp;lt;/li&amp;gt;
 &amp;lt;/html:messages&amp;gt;
&amp;lt;/h3&amp;gt;
&amp;lt;html:form action="/usuario.do" focus="usuario.login"&amp;gt;
 &amp;lt;logic:present name="usuario"&amp;gt;
  &amp;lt;h1&amp;gt;Editar Usuário&amp;lt;/h1&amp;gt;
 &amp;lt;/logic:present&amp;gt;
 &amp;lt;logic:notPresent name="usuario"&amp;gt;
  &amp;lt;h1&amp;gt;Criar Usuário&amp;lt;/h1&amp;gt;
 &amp;lt;/logic:notPresent&amp;gt;
 &amp;lt;html:hidden property="usuario.id" /&amp;gt;
 &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Login:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;html:text property="usuario.login" /&amp;gt;&amp;lt;/p&amp;gt;
 &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Nome:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;html:text property="usuario.nome" /&amp;gt;&amp;lt;/p&amp;gt;
 &amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Senha:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;
 &amp;lt;html:password property="usuario.senha" /&amp;gt;&amp;lt;/p&amp;gt;

 &amp;lt;html:submit property="metodo"&amp;gt;
  &amp;lt;bean:message key="form.salvar"/&amp;gt;
 &amp;lt;/html:submit&amp;gt;
&amp;lt;/html:form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html:html&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-6877158481735009396?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/7h8Q2sWaq0o" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-10T09:19:34.585-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://static.slideshare.net/swf/ssplayer2.swf?doc=curso-struts-aula-02-1197251723348400-2" length="86990" type="application/x-shockwave-flash" /><media:content url="http://static.slideshare.net/swf/ssplayer2.swf?doc=curso-struts-aula-02-1197251723348400-2" fileSize="86990" type="application/x-shockwave-flash" /><feedburner:origLink>http://notasderua.blogspot.com/2007/12/curso-struts-aula-02.html</feedburner:origLink></item><item><title>Curso Struts - Aula 01</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/Out1CtJnaFo/curso-struts-aula-01.html</link><category>struts</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Fri, 07 Dec 2007 02:32:18 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-1406024832932908714</guid><description>&lt;div style="width: 425px; text-align: left;" id="__ss_193144"&gt;&lt;object style="margin: 0px;" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=struts-aula-01-1196877796342757-5"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=struts-aula-01-1196877796342757-5" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="355" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border: 0px none ; margin-bottom: -5px;" alt="SlideShare" /&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/ramos.tiago/struts-aula-01" title="View 'Struts - Aula 01' on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;

&lt;a href="http://3.bp.blogspot.com/_PNSUvKuIDBU/R1XgUMyHphI/AAAAAAAAANo/3ipRi77roUc/s1600-h/arvore.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5140261187346736658" style="margin: 0px 10px 10px 0px; float: left;" alt="" src="http://3.bp.blogspot.com/_PNSUvKuIDBU/R1XgUMyHphI/AAAAAAAAANo/3ipRi77roUc/s400/arvore.jpg" border="0" /&gt;&lt;/a&gt;

LivroAction.java
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.controle;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.livrariaweb.entidades.Livro;
import br.com.livrariaweb.servico.LivroServico;

public class LivroAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request, HttpServletResponse response)
  throws Exception {

 LivroServico servico = new LivroServico();
 List&lt;livro&gt; l = servico.listar();
 request.setAttribute("livros", l);
 return mapping.findForward("listar");
}
}
&lt;/livro&gt;&lt;/pre&gt;

LivroAction.java
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.controle;

import org.apache.struts.action.ActionForm;

public class LivroForm extends ActionForm{

private static final long serialVersionUID = 1L;

private Integer id;

private String titulo;

private String autor;

private Integer nroEdicao;

private Double valor;

       // gets e sets
}
&lt;/pre&gt;

LivroSalvarAction.java
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.controle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.livrariaweb.entidades.Livro;
import br.com.livrariaweb.servico.LivroServico;

public class LivroSalvarAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request, HttpServletResponse response)
  throws Exception {
 Livro l = new Livro();
 BeanUtils.copyProperties(l, (LivroForm) form);
 LivroServico s = new LivroServico();
 s.salvar(l);
 return mapping.findForward("listar");
}
}
&lt;/pre&gt;

LivroAction.java
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.entidades;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Livro implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

private String titulo;

private String autor;

private Integer nroEdicao;

private Double valor;

       // gets e sets
}
&lt;/pre&gt;

LivroServico.java
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.servico;

import java.util.List;

import org.hibernate.Session;

import br.com.livrariaweb.entidades.Livro;
import br.com.livrariaweb.util.HibernateUtil;

public class LivroServico {

public Livro salvar(Livro livro) {
 Session s = HibernateUtil.getSessionFactory().openSession();
 s.beginTransaction();
 s.save(livro);
 s.getTransaction().commit();
 s.close();
 return livro;
}

@SuppressWarnings("unchecked")
public List&lt;livro&gt; listar() {
 Session s = HibernateUtil.getSessionFactory().openSession();
 s.beginTransaction();
 List&lt;livro&gt; l = s.createCriteria(Livro.class).list();
 s.getTransaction().commit();
 s.close();
 return l;
}
}
&lt;/livro&gt;&lt;/livro&gt;&lt;/pre&gt;

HibernateUtil.java
&lt;pre class="codigo"&gt;
package br.com.livrariaweb.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

private static final SessionFactory sessionFactory;

static {
 try {
  // Criando a SessionFactory apartir no hibernate.cfg.xml
  sessionFactory = new AnnotationConfiguration().configure()
    .buildSessionFactory();
 } catch (Throwable ex) {
  System.err.println("Não foi possivel criar a SessionFactory." + ex);
  throw new ExceptionInInitializerError(ex);
 }
}

public static SessionFactory getSessionFactory() {
 return sessionFactory;
}

}
&lt;/pre&gt;

criar.jsp
&lt;pre class="codigo"&gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%&amp;gt;

&amp;lt;html:html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;html:form action="/LivroSalvar.do" focus="titulo"&amp;gt;
&amp;lt;h1&amp;gt;Criar Livro&amp;lt;/h1&amp;gt;

&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Título&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;html:text property="titulo"&amp;gt;&amp;lt;/html:text&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Autor&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;html:text property="autor"&amp;gt;&amp;lt;/html:text&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Número da Edição&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;html:text property="nroEdicao"&amp;gt;&amp;lt;/html:text&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Valor&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;html:text property="valor"&amp;gt;&amp;lt;/html:text&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;html:submit&amp;gt;Salvar&amp;lt;/html:submit&amp;gt;
&amp;lt;/html:form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html:html&amp;gt;
&lt;/pre&gt;

listar.jsp
&lt;pre class="codigo"&gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%&amp;gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested"%&amp;gt;

&amp;lt;html:html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h1&amp;gt;Livros&amp;lt;/h1&amp;gt;
&amp;lt;table border="1" cellpadding="1"&amp;gt;
&amp;lt;tr&amp;gt;
 &amp;lt;th&amp;gt;Titulo&amp;lt;/th&amp;gt;
 &amp;lt;th&amp;gt;Autor&amp;lt;/th&amp;gt;
 &amp;lt;th&amp;gt;Valor&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;logic:iterate id="l" name="livros"&amp;gt;
 &amp;lt;tr&amp;gt;
  &amp;lt;td&amp;gt;&amp;lt;bean:write name="l" property="titulo" /&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;&amp;lt;bean:write name="l" property="autor" /&amp;gt;&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;&amp;lt;bean:write name="l" property="valor" /&amp;gt;&amp;lt;/td&amp;gt;
 &amp;lt;/tr&amp;gt;
&amp;lt;/logic:iterate&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;html:link href="jsp/livro/criar.jsp" &amp;gt;Criar Livro&amp;lt;/html:link&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html:html&amp;gt;
&lt;/pre&gt;

inicio.jsp
&lt;pre class="codigo"&gt;
&amp;lt;%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="ISO-8859-1"%&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
 &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&amp;gt;
 &amp;lt;title&amp;gt;Aplicacao Struts&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
 Aplicacao Struts no Ar!
 &amp;lt;br&amp;gt;
 &amp;lt;a href="&amp;lt;%=request.getContextPath()%&amp;gt;/Livros.do"&amp;gt;Livros&amp;lt;/a&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;

index.jsp
&lt;pre class="codigo"&gt;
&amp;lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %&amp;gt;
&amp;lt;logic:redirect forward="inicio"/&amp;gt;
&lt;/pre&gt;

struts-config.xml
&lt;pre class="codigo"&gt;
&amp;lt;?xml version="1.0" encoding="ISO-8859-1" ?&amp;gt;

&amp;lt;!DOCTYPE struts-config PUBLIC
         "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
         "http://struts.apache.org/dtds/struts-config_1_3.dtd"&amp;gt;

&amp;lt;struts-config&amp;gt;

&amp;lt;!-- Definicao dos Formulario de Beans --&amp;gt;
&amp;lt;form-beans&amp;gt;
 &amp;lt;form-bean name="livroForm"
  type="br.com.livrariaweb.controle.LivroForm" /&amp;gt;
&amp;lt;/form-beans&amp;gt;

&amp;lt;!-- Definicao de Excecoes Globais --&amp;gt;
&amp;lt;global-exceptions&amp;gt;&amp;lt;/global-exceptions&amp;gt;

&amp;lt;!-- Definicao de Redirecionamento Global --&amp;gt;
&amp;lt;global-forwards&amp;gt;
 &amp;lt;forward name="inicio" path="/Inicio.do" /&amp;gt;
&amp;lt;/global-forwards&amp;gt;

&amp;lt;!-- Mapeamento de Acoes --&amp;gt;
&amp;lt;action-mappings&amp;gt;
 &amp;lt;action path="/Inicio" forward="/jsp/inicio.jsp" /&amp;gt;

 &amp;lt;action path="/Livros"
  type="br.com.livrariaweb.controle.LivroAction"&amp;gt;
  &amp;lt;forward name="listar" path="/jsp/livro/listar.jsp" /&amp;gt;
 &amp;lt;/action&amp;gt;

 &amp;lt;action path="/LivroSalvar"
  type="br.com.livrariaweb.controle.LivroSalvarAction" name="livroForm"
  scope="request" input="/jsp/livro/criar.jsp"&amp;gt;
  &amp;lt;forward name="listar" path="/Livros.do" redirect="true"/&amp;gt;
 &amp;lt;/action&amp;gt;
&amp;lt;/action-mappings&amp;gt;

&amp;lt;!-- Arquivo de Definicao de Mensagens --&amp;gt;
&amp;lt;message-resources parameter="MessageResources" /&amp;gt;

&amp;lt;/struts-config&amp;gt;
&lt;/pre&gt;

web.xml
&lt;pre class="codigo"&gt;
&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;

&amp;lt;!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd"&amp;gt;

&amp;lt;web-app&amp;gt;
&amp;lt;display-name&amp;gt;Aplicacao Struts&amp;lt;/display-name&amp;gt;

&amp;lt;!-- Configuracoes do Strtuts --&amp;gt;
&amp;lt;servlet&amp;gt;
 &amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;
 &amp;lt;servlet-class&amp;gt;org.apache.struts.action.ActionServlet&amp;lt;/servlet-class&amp;gt;
 &amp;lt;init-param&amp;gt;
  &amp;lt;param-name&amp;gt;config&amp;lt;/param-name&amp;gt;
  &amp;lt;param-value&amp;gt;/WEB-INF/struts-config.xml&amp;lt;/param-value&amp;gt;
 &amp;lt;/init-param&amp;gt;
 &amp;lt;load-on-startup&amp;gt;2&amp;lt;/load-on-startup&amp;gt;
&amp;lt;/servlet&amp;gt;

&amp;lt;servlet-mapping&amp;gt;
 &amp;lt;servlet-name&amp;gt;action&amp;lt;/servlet-name&amp;gt;
 &amp;lt;url-pattern&amp;gt;*.do&amp;lt;/url-pattern&amp;gt;
&amp;lt;/servlet-mapping&amp;gt;

&amp;lt;!-- Pagina Inicial --&amp;gt;
&amp;lt;welcome-file-list&amp;gt;
 &amp;lt;welcome-file&amp;gt;index.jsp&amp;lt;/welcome-file&amp;gt;
&amp;lt;/welcome-file-list&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;
&lt;br&gt;
&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;Resposta ao comentário do Renan:&lt;/span&gt;
&lt;br&gt;
Renan, esse é um assunto que iremos tratar na próxima aula. Até agora as nossas classes de ação elas herdam de  "Action" mas temos uma outra classe também do struts que é chamada de "DispatchAction". Essa nova classe permite implementarmos diversos métodos dentro de uma única classe de ação. A assinatura do método vai ser a mesma para o método "execute".
&lt;br&gt;
Por exemplo:
&lt;br&gt;
&lt;pre class="codigo"&gt;
public final class UsuarioAction extends DispatchAction {
public ActionForward novo (ActionMapping mapping, ActionForm form, 
            HttpServletRequest request, HttpServletResponse response) 
            throws Exception { 
        // sua acao... 
    } 
 
public ActionForward salva (ActionMapping mapping, ActionForm form, 
            HttpServletRequest request, HttpServletResponse response) 
           throws Exception { 
        // // sua acao... 
    } 
 
    public ActionForward edita (ActionMapping mapping, ActionForm form, 
            HttpServletRequest request, HttpServletResponse response) 
            throws Exception { 
        // // sua acao... 
    } 
 
} 
&lt;/pre&gt;
&lt;br&gt;
Só tem um detalhe o mapeamento da sua action vai precisar de mais um parametro, o "parameter":
&lt;br&gt;
&lt;pre class="codigo"&gt;
&amp;lt;action path="/Usuario"
type="br.com.loteriaweb.controle.UsuarioAction"
name="usuarioForm"
scope="request"
input="/jsp/usuario/cria.jsp"
parameter="submit"/&amp;gt;
&lt;/pre&gt;
&lt;br&gt;
ele corresponde ao método que você vai acessar. Ou seja. no seu formulario vc precisa ter um campo hidden com nome de submit que informa a ação que será executada. Vc pode utilizar um javascript para controlar essa decisão. Não fico muito feliz quando tenho que utilizar javascript então na aula eu mostro uma dica boa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-1406024832932908714?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/Out1CtJnaFo" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-07T08:32:18.157-02:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/_PNSUvKuIDBU/R1XgUMyHphI/AAAAAAAAANo/3ipRi77roUc/s72-c/arvore.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><enclosure url="http://static.slideshare.net/swf/ssplayer2.swf?doc=struts-aula-01-1196877796342757-5" length="86990" type="application/x-shockwave-flash" /><media:content url="http://static.slideshare.net/swf/ssplayer2.swf?doc=struts-aula-01-1196877796342757-5" fileSize="86990" type="application/x-shockwave-flash" /><feedburner:origLink>http://notasderua.blogspot.com/2007/12/curso-struts-aula-01.html</feedburner:origLink></item><item><title>Struts – Aula01 – Tutorial de Configuração Básica</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/hwj8dAa46yY/struts-aula01-tutorial-de-configurao_01.html</link><category>struts</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Sun, 02 Dec 2007 17:10:05 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-4398205058737830839</guid><description>&lt;span xmlns=""&gt;&lt;h6&gt;&lt;span style="font-size:130%;"&gt;Configurando o ambiente
&lt;/span&gt;&lt;/h6&gt;&lt;p&gt;1. Copie e descompacte o eclipse-jee-europa-fall2-win32.zip no seu diretório de trabalho.
&lt;a href="http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/20071103/eclipse-jee-europa-fall2-win32.zip"&gt;&lt;span style="font-family:Trebuchet MS;font-size:12;"&gt;http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/20071103/eclipse-jee-europa-fall2-win32.zip&lt;/span&gt;&lt;/a&gt;
2. Copie e descompacte o apache-tomcat-5.5.25 em seu diretório de trabalho.
&lt;a href="http://mirrors.uol.com.br/pub/apache/tomcat/tomcat-5/v5.5.25/bin/apache-tomcat-5.5.25.zip"&gt;&lt;span style="font-family:Trebuchet MS;font-size:12;"&gt;http://mirrors.uol.com.br/pub/apache/tomcat/tomcat-5/v5.5.25/bin/apache-tomcat-5.5.25.zip&lt;/span&gt;&lt;/a&gt;
3. Copie e descompacte o struts-1.3.8 em seu diretório de trabalho.
&lt;a href="http://ftp.unicamp.br/pub/apache/struts/binaries/struts-1.3.8-all.zip"&gt;http://ftp.unicamp.br/pub/apache/struts/binaries/struts-1.3.8-all.zip&lt;/a&gt;
&lt;/p&gt;&lt;h6&gt;&lt;span style="font-size:130%;"&gt;Configurando o Projeto&lt;/span&gt;
&lt;/h6&gt;&lt;p&gt;4. Inicie o eclipse e crie um novo projeto.
File &amp;gt;&amp;gt; New &amp;gt;&amp;gt; Other &amp;gt;&amp;gt; Selecione Web &amp;gt;&amp;gt; Selecione &amp;gt;&amp;gt; Dynamic Web Project &amp;gt;&amp;gt; Next.
Defina o nome do projeto e clique em Finish
&lt;/p&gt;&lt;p&gt;5. Copie os arquivos abaixo para a pasta web\WEB-INF\lib do seu projeto
struts-1.3.8\lib\antlr-2.7.2.jar
struts-1.3.8\lib\commons-beanutils-1.7.0.jar
struts-1.3.8\lib\commons-chain-1.1.jar
struts-1.3.8\lib\commons-digester-1.8.jar
struts-1.3.8\lib\commons-logging-1.0.4.jar
struts-1.3.8\lib\commons-validator-1.3.1.jar
struts-1.3.8\lib\oro-2.0.8.jar
struts-1.3.8\lib\struts-core-1.3.8.jar
struts-1.3.8\lib\struts-taglib-1.3.8.jar
struts-1.3.8\lib\struts-tiles-1.3.8.jar
&lt;/p&gt;&lt;p&gt;6. Crie o arquivo struts-config.xml em web\WEB-INF e insira o seguinte conteúdo:
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml &lt;/span&gt;&lt;span style="color:navy;"&gt;version="1.0"&lt;/span&gt; &lt;span style="color:navy;"&gt;encoding="ISO-8859-1"&lt;/span&gt; &lt;span style="color:blue;"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;!DOCTYPE&lt;/span&gt; &lt;span style="color:red;"&gt;struts-config&lt;/span&gt; &lt;span style="color:navy;"&gt;PUBLIC
&lt;/span&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;-//Apache Software Foundation//DTD Struts Configuration 1.3//EN&lt;/span&gt;&lt;span style="color:black;"&gt;"
"&lt;/span&gt;&lt;span style="color:blue;"&gt;http://struts.apache.org/dtds/struts-config_1_3.dtd&lt;/span&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;struts-config&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;!-- Definicao dos Formulario de Beans --&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;form-beans&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;form-beans&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;
&lt;span style="color:green;"&gt;&amp;lt;!-- Definicao de Excecoes Globais --&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;global-exceptions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;global-exceptions&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;
&lt;span style="color:green;"&gt;&amp;lt;!-- Definicao de Redirecionamento Global --&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;global-forwards&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;forward&lt;/span&gt; &lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:black;"&gt;="&lt;/span&gt;&lt;span style="color:blue;"&gt;inicio&lt;/span&gt;&lt;span style="color:black;"&gt;" &lt;/span&gt;&lt;span style="color:red;"&gt;path&lt;/span&gt;&lt;span style="color:black;"&gt;="&lt;/span&gt;&lt;span style="color:blue;"&gt;/Inicio.do&lt;/span&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;global-forwards&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;
&lt;span style="color:green;"&gt;&amp;lt;!-- Mapeamento de Acoes --&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;action-mappings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;action &lt;/span&gt;&lt;span style="color:red;"&gt;path&lt;/span&gt;&lt;span style="color:black;"&gt;="&lt;/span&gt;&lt;span style="color:blue;"&gt;/Inicio&lt;/span&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt; &lt;span style="color:red;"&gt;forward&lt;/span&gt;&lt;span style="color:black;"&gt;="&lt;/span&gt;&lt;span style="color:blue;"&gt;/jsp/inicio.jsp&lt;/span&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;action-mappings&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;!-- Arquivo de Definicao de Mensagens --&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;message-resources&lt;/span&gt; &lt;span style="color:red;"&gt;parameter&lt;/span&gt;&lt;span style="color:black;"&gt;="&lt;/span&gt;&lt;span style="color:blue;"&gt;MessageResources&lt;/span&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;struts-config&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;7. Altere o arquivo web\WEB-INF\web.xml para que fique com as configurações do struts:
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a31515;"&gt;xml&lt;/span&gt; &lt;span style="color:navy;"&gt;version="1.0"&lt;/span&gt; &lt;span style="color:navy;"&gt;encoding="ISO-8859-1"&lt;/span&gt;&lt;span style="color:blue;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;!DOCTYPE&lt;/span&gt; &lt;span style="color:red;"&gt;web-app&lt;/span&gt; &lt;span style="color:navy;"&gt;PUBLIC&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&lt;/span&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;http://java.sun.com/dtd/web-app_2_3.dtd&lt;/span&gt;&lt;span style="color:black;"&gt;"&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;web-app&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;display-name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;Aplicacao Struts&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;display-name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:green;"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:green;"&gt;&amp;lt;!-- Configuracoes do Strtuts --&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;

&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet-name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;action&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet-name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet-class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;org.apache.struts.action.ActionServlet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet-class&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;init-param&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;param-name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;config&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;param-name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;param-value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;/WEB-INF/struts-config.xml&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;param-value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;init-param&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;

&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;load-on-startup&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;2&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;load-on-startup&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet-mapping&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;

&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet-name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;action&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet-name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;url-pattern&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;*.do&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;url-pattern&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;servlet-mapping&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;

&lt;/span&gt;&lt;span style="color:green;"&gt;&amp;lt;!-- Pagina Inicial --&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;welcome-file-list&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;welcome-file&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;index.jsp&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;welcome-file&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;welcome-file-list&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;web-app&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;8. Crie o arquivo web\index.jsp com o seguinte conteúdo:
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:#bf5f3f;"&gt;&amp;lt;%@ &lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;taglib &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;uri&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"http://struts.apache.org/tags-logic" &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;prefix&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"logic" &lt;/span&gt;&lt;span style="color:#bf5f3f;"&gt;%&amp;gt;&lt;/span&gt;
&lt;span style="color:teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;logic:redirect &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;forward&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"inicio"&lt;/span&gt;&lt;span style="color:teal;"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;9. Crie o arquivo web\jsp\index.jsp com o seguinte conteúdo:
&lt;span style="font-family:Courier New;"&gt;&lt;span style="color:#bf5f3f;"&gt;&amp;lt;%@ &lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;page &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;language&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"java" &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;contentType&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"text/html; charset=ISO-8859-1" &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;pageEncoding&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"ISO-8859-1"&lt;/span&gt;&lt;span style="color:#bf5f3f;"&gt;%&amp;gt;
&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;DOCTYPE &lt;/span&gt;&lt;span style="color:navy;"&gt;html &lt;/span&gt;&lt;span style="color:gray;"&gt;PUBLIC &lt;/span&gt;&lt;span style="color:navy;"&gt;"-//W3C//DTD HTML 4.01 Transitional//EN" &lt;/span&gt;&lt;span style="color:#3f7f5f;"&gt;"http://www.w3.org/TR/html4/loose.dtd"&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;html&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;head&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;meta &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;http-equiv&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"Content-Type" &lt;/span&gt;&lt;span style="color:#7f007f;"&gt;content&lt;/span&gt;&lt;span style="color:black;"&gt;=&lt;/span&gt;&lt;span style="color:#2a00ff;"&gt;"text/html; charset=UTF-8"&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;title&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:black;"&gt;Aplicacao Struts&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;title&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;head&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;body&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&lt;/span&gt;&lt;span style="color:black;"&gt;Aplicacao Struts no Ar!
&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;body&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:#3f7f7f;"&gt;html&lt;/span&gt;&lt;span style="color:teal;"&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h4&gt;&lt;span style="font-size:130%;"&gt;Executando
&lt;/span&gt;&lt;/h4&gt;&lt;p&gt;10. Selecione o projeto, no menu superior clique em Run &amp;gt;&amp;gt; Run As &amp;gt;&amp;gt; Run on Server
Configure o TomCat indicando o local onde foi descompactado e execute a aplicação.
Acesse o browser em HTTP://localhost:8080/seuprojeto/
&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-4398205058737830839?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/hwj8dAa46yY" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-02T23:10:05.060-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><enclosure url="http://ftp.unicamp.br/pub/apache/struts/binaries/struts-1.3.8-all.zip" length="46170556" type="application/zip" /><media:content url="http://ftp.unicamp.br/pub/apache/struts/binaries/struts-1.3.8-all.zip" fileSize="46170556" type="application/zip" /><feedburner:origLink>http://notasderua.blogspot.com/2007/12/struts-aula01-tutorial-de-configurao_01.html</feedburner:origLink></item><item><title>Hibernate - Exemplo com Herança</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/dHRtndTMuMw/hibernate-exemplo-com-herana.html</link><category>Hibernate</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Sun, 02 Dec 2007 17:11:36 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-8196269617942675893</guid><description>&gt; Faça uma classe de serviço que persista, recupere e atualize dados de pessoas para um escritório de advocacia. O escritório é composto por clientes, advogados e funcionários diversos.
&gt; Toda pessoa possue nome, cpf, telefone e endereço
&gt; Clientes possuem registros de atendimentos
&gt; Funcionários possuem número da carteira de trabalho, e registros de horário
&gt; Advogados possuem número da OAB e horários de atendimento

hibernate.cfg.xml
&lt;br&gt;
&lt;pre class="codigo"&gt;
&amp;lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&amp;gt;
&amp;lt;hibernate-configuration&amp;gt;

 &amp;lt;session-factory&amp;gt;

        &amp;lt;!-- Database connection settings --&amp;gt;
        &amp;lt;property name="connection.driver_class"&amp;gt;com.mysql.jdbc.Driver&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.url"&amp;gt;jdbc:mysql://localhost/hibernateAdvocacia&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.username"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.password"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.pool_size"&amp;gt;1&amp;lt;/property&amp;gt;

        &amp;lt;!-- SQL dialect --&amp;gt;
        &amp;lt;property name="dialect"&amp;gt;org.hibernate.dialect.MySQLDialect&amp;lt;/property&amp;gt;

        &amp;lt;property name="show_sql"&amp;gt;true&amp;lt;/property&amp;gt;
        &amp;lt;property name="format_sql"&amp;gt;true&amp;lt;/property&amp;gt;

        &amp;lt;property name="hbm2ddl.auto"&amp;gt;update&amp;lt;/property&amp;gt;

  &amp;lt;mapping class="entidade.Advogado"/&amp;gt;
  &amp;lt;mapping class="entidade.Atendimento"/&amp;gt;
  &amp;lt;mapping class="entidade.Cliente"/&amp;gt;
  &amp;lt;mapping class="entidade.Funcionario"/&amp;gt;
  &amp;lt;mapping class="entidade.Horario"/&amp;gt;
  &amp;lt;mapping class="entidade.HorarioAdvogado"/&amp;gt;
  &amp;lt;mapping class="entidade.Pessoa"/&amp;gt;

 &amp;lt;/session-factory&amp;gt;

&amp;lt;/hibernate-configuration&amp;gt;
&lt;/pre&gt;
&lt;br&gt;
entidade.Pessoa.java
&lt;br&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa implements Serializable{
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Integer id;
 
 private String nome;
 
 private String cpf;
 
 private String rg;
 
 private String telefone;
 
 private String endereco;

       // gets e sets

}
&lt;/pre&gt;
&lt;br&gt;
entidade.Advogado.java
&lt;br&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@PrimaryKeyJoinColumn(name = "advogado_id", referencedColumnName = "id")
public class Advogado extends Pessoa implements Serializable {

 private Integer nroOab;

 @OneToMany(mappedBy = "advogado",fetch=FetchType.EAGER)
 @Cascade(CascadeType.ALL)
 private List&lt;HorarioAdvogado&gt; horarios;
        
        // gets e sets

}
&lt;/pre&gt;
&lt;br&gt;
entidade.HorarioAdvogado.java
&lt;font color="red"&gt;
Observe que em @JoinColumn(name="advogado_id") não foi referenciado o campo "id" de pessoa e sim o campo "advogado_id", por isso está suprimido o atributo "referencedColumnName". Isso vale para as outras classes que tem relacionamento @ManyToOne()
&lt;/font&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class HorarioAdvogado {

 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Integer id;
 
 @Temporal(TemporalType.TIMESTAMP)
 private Date horario;
 
 @ManyToOne()
 @JoinColumn(name="advogado_id")
 private Advogado advogado;

        //gets e sets
}
&lt;/pre&gt;
&lt;br&gt;
entidade.Funcionario.java
&lt;br&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.math.BigDecimal;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;

@Entity
@PrimaryKeyJoinColumn(name = "funcionario_id", referencedColumnName = "id")
public class Funcionario extends Pessoa {

 private String carteiraTrabalho;

 private BigDecimal salario;
 
 @OneToMany(mappedBy="funcionario")
 private List&lt;Horario&gt; horarios;

        // gets e sets
}
&lt;/pre&gt;
&lt;br&gt;
entidade.Horario.java
&lt;br&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Horario {

 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Integer id;
 
 @Temporal(TemporalType.TIMESTAMP)
 private Date hora;
 
 @ManyToOne()
 @JoinColumn(name="funcionario_id")
 private Funcionario funcionario;
     
        //gets e sets
}
&lt;/pre&gt;
&lt;br&gt;
entidade.Cliente.java
&lt;br&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;

@Entity
@PrimaryKeyJoinColumn(name = "cliente_id", referencedColumnName = "id")
public class Cliente extends Pessoa {

 @OneToMany(mappedBy = "cliente")
 private List&lt;Atendimento&gt; atendimentos;
    
        //gets e sets
}
&lt;/pre&gt;
&lt;br&gt;
entidade.Atendimento.java
&lt;/br&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Atendimento {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 @Temporal(TemporalType.TIMESTAMP)
 private Date dia;

 private String descricao;

 @ManyToOne()
 @JoinColumn(name = "cliente_id")
 private Cliente cliente;

        //gets e sets
}
&lt;/pre&gt;
&lt;br&gt;
servico.PessoaServico.java
&lt;br&gt;
&lt;pre class="codigo"&gt;
package servico;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;

import util.HibernateUtil;
import entidade.Advogado;
import entidade.HorarioAdvogado;

public class PessoaServico {

 public static void main(String[] args) {
  PessoaServico p = new PessoaServico();
  // p.criarAdvogado();
  p.listarAdvogados();
 }

 private void listarAdvogados() {
  Session s = HibernateUtil.getSessionFactory().openSession();
  s.beginTransaction();

  Criteria c = s.createCriteria(Advogado.class);
  List&lt;Advogado&gt; advogados = c.list();
  
  for (Advogado a : advogados) {
   System.out.println(a.getNome());
   System.out.println(a.getNroOab());
   System.out.println(a.getHorarios().get(0));
  }

  s.getTransaction().commit();
  s.close();
 }

 private void criarAdvogado() {
  Advogado a = new Advogado();
  a.setCpf("123456");
  a.setEndereco("endereco");
  a.setNome("Advogado 3");
  a.setNroOab(789);
  a.setRg("783545");
  a.setTelefone("789456");

  HorarioAdvogado h = new HorarioAdvogado();
  h.setAdvogado(a);
  h.setHorario(new Date());

  a.setHorarios(new ArrayList&lt;HorarioAdvogado&gt;());
  a.getHorarios().add(h);

  Session s = HibernateUtil.getSessionFactory().openSession();

  s.beginTransaction();
  s.save(a);
  s.getTransaction().commit();
  s.close();
 }

}
&lt;/pre&gt;
&lt;br&gt;
util.HibernateUtil.java
&lt;pre class="codigo"&gt;
package util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

 private static final SessionFactory sessionFactory;

 static {
  try {
   // Criando a SessionFactory apartir no hibernate.cfg.xml
   sessionFactory = new AnnotationConfiguration().configure()
     .buildSessionFactory();
  } catch (Throwable ex) {
   System.err.println("Não foi possivel criar a SessionFactory." + ex);
   throw new ExceptionInInitializerError(ex);
  }
 }

 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }

}
&lt;/pre&gt;
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-8196269617942675893?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/dHRtndTMuMw" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-02T23:11:36.155-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/11/hibernate-exemplo-com-herana.html</feedburner:origLink></item><item><title>Curso Hibernate - Aula 04</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/M_3AyXg8M-8/curso-hibernate-aula-04.html</link><category>Hibernate</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Sun, 02 Dec 2007 17:11:36 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-2972337337310792731</guid><description>&lt;div style="width:425px;text-align:left" id="__ss_179375"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-04-1196041672111377-5"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-04-1196041672111377-5" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/ramos.tiago/hibernate-aula-04" title="View 'Hibernate - Aula 04' on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;

ROOT
&amp;nbsp;&amp;nbsp;lib
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;antlr-2.7.6.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cglib-nodep-2.1_3.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commons-beanutils.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commons-collections.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commons-dbcp.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;commons-logging.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dom4j-1.6.1.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ejb3-persistence.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hibernate3.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hibernate-annotations.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hibernate-commons-annotations.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jta.jar
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mysql-connector-java-5.0.7-bin.jar
&amp;nbsp;&amp;nbsp;src
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hibernate.cfg.xml
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;entidades
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;classe
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Pessoa.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PessoaFisica.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PessoaJuridica.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;simples
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Flor.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Rosa.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tulipa.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subclasse
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Caminhao.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Carro.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Veiculo.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;servico
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FlorServico.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PessoaServico.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VeiculoServico.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;util
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HibernateUtil.java

hibernate.cfg.xml
&lt;br/&gt;
&lt;pre class="codigo"&gt;
&amp;lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&amp;gt;
&amp;lt;hibernate-configuration&amp;gt;

 &amp;lt;session-factory&amp;gt;

        &amp;lt;!-- Database connection settings --&amp;gt;
        &amp;lt;property name="connection.driver_class"&amp;gt;com.mysql.jdbc.Driver&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.url"&amp;gt;jdbc:mysql://localhost/hibernateHeranca&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.username"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.password"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.pool_size"&amp;gt;1&amp;lt;/property&amp;gt;

        &amp;lt;!-- SQL dialect --&amp;gt;
        &amp;lt;property name="dialect"&amp;gt;org.hibernate.dialect.MySQLDialect&amp;lt;/property&amp;gt;

        &amp;lt;property name="show_sql"&amp;gt;true&amp;lt;/property&amp;gt;

        &amp;lt;property name="hbm2ddl.auto"&amp;gt;create&amp;lt;/property&amp;gt;

  &amp;lt;!-- Tabela por Classe --&amp;gt;
  &amp;lt;mapping class="entidades.classe.PessoaFisica"/&amp;gt;
  &amp;lt;mapping class="entidades.classe.PessoaJuridica"/&amp;gt;

  &amp;lt;!-- Tabela Simples / Tabela por Hierarquia --&amp;gt;
  &amp;lt;mapping class="entidades.simples.Tulipa"/&amp;gt;
  &amp;lt;mapping class="entidades.simples.Rosa"/&amp;gt;
  &amp;lt;mapping class="entidades.simples.Flor"/&amp;gt;

  &amp;lt;!-- Tabela por Subclasse --&amp;gt;
  &amp;lt;mapping class="entidades.subclasse.Veiculo"/&amp;gt;
  &amp;lt;mapping class="entidades.subclasse.Carro"/&amp;gt;
  &amp;lt;mapping class="entidades.subclasse.Caminhao"/&amp;gt;

 &amp;lt;/session-factory&amp;gt;

&amp;lt;/hibernate-configuration&amp;gt;
&lt;/pre&gt;
&lt;br/&gt;
Pessoa.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.classe;
import java.util.Date;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

@MappedSuperclass
public class Pessoa {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Integer id;

 private String nome;

 private Date dataNascimento;

       gets e sets ...
}
&lt;/pre&gt;
&lt;br/&gt;
PessoaFisica.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.classe;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class PessoaFisica extends Pessoa{

 private String cpf;

 public String getCpf() {
  return cpf;
 }

 public void setCpf(String cpf) {
  this.cpf = cpf;
 }
 
}
&lt;/pre&gt;
&lt;br/&gt;
PessoaJuridica.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.classe;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class PessoaJuridica extends Pessoa {

 private String cnpj;

 private String nomeFantasia;

        gets e sets...
}
&lt;/pre&gt;
&lt;br/&gt;
Flor.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.simples;

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "tipo_flor", 
  discriminatorType = DiscriminatorType.STRING)
public class Flor {

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Integer id;

 private String cor;
 
        gets e sets...
}
&lt;/pre&gt;
&lt;br/&gt;
Rosa.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.simples;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue(value="ROSA")
public class Rosa extends Flor{

 private String tamanhoEspinho;

 public String getTamanhoEspinho() {
  return tamanhoEspinho;
 }

 public void setTamanhoEspinho(String tamanhoEspinho) {
  this.tamanhoEspinho = tamanhoEspinho;
 }
 
}
&lt;/pre&gt;
&lt;br/&gt;
Tulipa.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.simples;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue(value = "TULIPA")
public class Tulipa extends Flor{

}
&lt;/pre&gt;
&lt;br/&gt;
Caminhao.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.subclasse;

import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;

@Entity
@PrimaryKeyJoinColumn(name = "id", referencedColumnName="id")
public class Caminhao extends Veiculo {

 private String tipoCarga;

 private String altura;

        gets e sets...
}
&lt;/pre&gt;
&lt;br/&gt;
Carro.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.subclasse;

import javax.persistence.Entity;
import javax.persistence.PrimaryKeyJoinColumn;

@Entity
@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
public class Carro extends Veiculo {

 private String tamanhoPortamalas;

 private String qtdadePortas;

        gets e sets...
}
&lt;/pre&gt;
&lt;br/&gt;
Veiculo.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidades.subclasse;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Veiculo {

 @Id
 @GeneratedValue(strategy = GenerationType.IDENTITY)
 private Integer id;

 private String chassi;

 private String placa;

 private String modelo;
        
        gets e sets...
}
&lt;/pre&gt;
&lt;br/&gt;
FlorServico.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package servico;

import org.hibernate.Session;

import util.HibernateUtil;
import entidades.simples.Rosa;
import entidades.simples.Tulipa;

public class FlorServico {

 public static void main(String[] args) {
  FlorServico p = new FlorServico();
  p.criarRosa();
  p.criarTulipa();
 }

 private void criarTulipa() {
  Tulipa f = new Tulipa();
  f.setCor("Branca");
  Session session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  session.save(f);
  session.getTransaction().commit();

 }

 private void criarRosa() {
  Rosa f = new Rosa();
  f.setTamanhoEspinho("Grandes");
  f.setCor("Vermelha");
  Session session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  session.save(f);
  session.getTransaction().commit();
 }
 
}
&lt;/pre&gt;
&lt;br/&gt;
PessoaServico.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package servico;

import java.util.Date;

import org.hibernate.Session;

import util.HibernateUtil;
import entidades.classe.PessoaFisica;
import entidades.classe.PessoaJuridica;

public class PessoaServico {

 public static void main(String[] args) {
  PessoaServico p = new PessoaServico();
  p.criarPessoaFisica();
  p.criarPessoaJuridica();
 }

 private void criarPessoaJuridica() {
  PessoaJuridica p = new PessoaJuridica();
  p.setCnpj("123465");
  p.setDataNascimento(new Date());
  p.setNome("PJ 01");
  p.setNomeFantasia("PJ Nome Fantasia 01");

  Session session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  session.save(p);
  session.getTransaction().commit();

 }

 private void criarPessoaFisica() {
  PessoaFisica p = new PessoaFisica();
  p.setCpf("123465");
  p.setDataNascimento(new Date());
  p.setNome("PF 01");

  Session session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  session.save(p);
  session.getTransaction().commit();
 }

}
&lt;/pre&gt;
&lt;br/&gt;
VeiculoServico.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package servico;

import org.hibernate.Session;

import util.HibernateUtil;
import entidades.subclasse.Caminhao;
import entidades.subclasse.Carro;

public class VeiculoServico {

 public static void main(String[] args) {
  VeiculoServico p = new VeiculoServico();
  p.criarCarro();
  p.criarCaminhao();
 }

 private void criarCaminhao() {
  Carro v = new Carro();
  v.setChassi("WQERW131354WER");
  v.setModelo("AUDI");
  v.setPlaca("DHS8938");
  v.setQtdadePortas("5");
  v.setTamanhoPortamalas("30L");
  Session session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  session.save(v);
  session.getTransaction().commit();

 }

 private void criarCarro() {
  Caminhao v = new Caminhao();
  v.setChassi("AASD987897ASD987");
  v.setModelo("SCANIA");
  v.setPlaca("HTR7848");
  v.setAltura("5m");
  v.setTipoCarga("Animal");
  Session session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  session.save(v);
  session.getTransaction().commit();
 }

}
&lt;/pre&gt;
&lt;br/&gt;
HibernateUtil.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

 private static final SessionFactory sessionFactory;

 static {
  try {
   // Criando a SessionFactory apartir no hibernate.cfg.xml
   sessionFactory = new AnnotationConfiguration().configure()
     .buildSessionFactory();
  } catch (Throwable ex) {
   System.err.println("Não foi possivel criar a SessionFactory." + ex);
   throw new ExceptionInInitializerError(ex);
  }
 }

 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }

}
&lt;/pre&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-2972337337310792731?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/M_3AyXg8M-8" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-02T23:11:36.156-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-04-1196041672111377-5" length="86990" type="application/x-shockwave-flash" /><media:content url="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-04-1196041672111377-5" fileSize="86990" type="application/x-shockwave-flash" /><feedburner:origLink>http://notasderua.blogspot.com/2007/11/curso-hibernate-aula-04.html</feedburner:origLink></item><item><title>Curso Hibernate - Desafio para um fim de semana feliz</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/sLR-iTYXgmg/curso-hibernate-desafio-para-um-fim-de.html</link><category>Hibernate</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Sun, 02 Dec 2007 17:11:36 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-4269681090322713616</guid><description>&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:130%;color:#cc0000;"&gt;Problema:&lt;/span&gt; &lt;/span&gt;
&lt;span style="font-family:arial;"&gt;

&lt;span style="font-size:85%;"&gt;Existem vários evento e pessoas. Cada pessoa pode participar de vários eventos e a mesma pode ter vários emails.

1. Realize o mapeamentos.
2. Crie uma classe de servico para cadastrar pessoas com seus emails
3. Crie uma classe de servico para evento onde você pode cadastrar eventos e também as pessoas que serao participantes.

Segue abaixo o esquema para entender melhor:&lt;/span&gt;

&lt;a href="http://4.bp.blogspot.com/_PNSUvKuIDBU/R0cSUzunE3I/AAAAAAAAANI/zRPsfJJ8dq4/s1600-h/mer.GIF"&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_PNSUvKuIDBU/R0cSgTunE4I/AAAAAAAAANQ/15i7dKB5wA0/s1600-h/mer.GIF"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_PNSUvKuIDBU/R0cU8DunE6I/AAAAAAAAANg/X7OXrFZ6vSk/s1600-h/MER.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5136096922064851874" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_PNSUvKuIDBU/R0cU8DunE6I/AAAAAAAAANg/X7OXrFZ6vSk/s400/MER.gif" border="0" /&gt;&lt;/a&gt;

&lt;span style="font-size:85%;color:#cc0000;"&gt;Obs: Coloco o resultado na segunda pela manhã.&lt;/span&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-4269681090322713616?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/sLR-iTYXgmg" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-02T23:11:36.157-02:00</app:edited><media:thumbnail url="http://1.bp.blogspot.com/_PNSUvKuIDBU/R0cU8DunE6I/AAAAAAAAANg/X7OXrFZ6vSk/s72-c/MER.gif" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/11/curso-hibernate-desafio-para-um-fim-de.html</feedburner:origLink></item><item><title>Curso Hibernate - Aula 03</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/hS9r8gy1m6o/hibernate-aula-03.html</link><category>Hibernate</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Sun, 02 Dec 2007 17:11:36 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-4946621192715662663</guid><description>&lt;div style="width:425px;text-align:left" id="__ss_174164"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-03-1195611561383183-3"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-03-1195611561383183-3" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/ramos.tiago/hibernate-aula-03" title="View 'Hibernate - Aula 03' on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Faça o download&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;

&lt;font color="red"&gt;Ainda hoje coloco um desafio para ser feito até na Segunda-Feira (26/11/07)&lt;/font&gt;

Bibliotecas utilizadas:
antlr-2.7.6
cglib-nodep-2.1_3.jar
commons-beanutils.jar
commons-collections.jar
commons-dbcp.jar
commons-logging.jar
dom4j-1.6.1.jar
ejb3-persistence.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
jta.jar
mysql-connector-java-5.0.7-bin.jar

Fontes do hibernateQuerie:
ROOT
- lib
&amp;nbsp;&amp;nbsp;- libs
- src
&amp;nbsp;&amp;nbsp;- hibernate.cfg.xml
&amp;nbsp;&amp;nbsp;- entidade
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- Aluno.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- Curso.java
&amp;nbsp;&amp;nbsp;- servico
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- AlunoServico.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- CursoServico.java
&amp;nbsp;&amp;nbsp;- util
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- HibernateUtil.java

hibernate.cfg.xml&lt;br/&gt;
&lt;pre class="codigo"&gt;
&amp;lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&amp;gt;
&amp;lt;hibernate-configuration&amp;gt;

 &amp;lt;session-factory&amp;gt;

        &amp;lt;!-- Database connection settings --&amp;gt;
        &amp;lt;property name="connection.driver_class"&amp;gt;com.mysql.jdbc.Driver&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.url"&amp;gt;jdbc:mysql://localhost/hibernateQuerie&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.username"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.password"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.pool_size"&amp;gt;1&amp;lt;/property&amp;gt;

        &amp;lt;!-- SQL dialect --&amp;gt;
        &amp;lt;property name="dialect"&amp;gt;org.hibernate.dialect.MySQLDialect&amp;lt;/property&amp;gt;

        &amp;lt;property name="show_sql"&amp;gt;true&amp;lt;/property&amp;gt;
  &amp;lt;property name="format_sql"&amp;gt;true&amp;lt;/property&amp;gt;

        &amp;lt;property name="hbm2ddl.auto"&amp;gt;update&amp;lt;/property&amp;gt;

  &amp;lt;mapping class="entidade.Aluno"/&amp;gt;
  &amp;lt;mapping class="entidade.Biblioteca"/&amp;gt;
  &amp;lt;mapping class="entidade.Curso"/&amp;gt;
  &amp;lt;mapping class="entidade.Endereco"/&amp;gt;
  &amp;lt;mapping class="entidade.Livro"/&amp;gt;
  &amp;lt;mapping class="entidade.Telefone"/&amp;gt;

 &amp;lt;/session-factory&amp;gt;

&amp;lt;/hibernate-configuration&amp;gt;
&lt;/pre&gt;
&lt;br/&gt;
Aluno.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
public class Aluno {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 private String nome;

 private Integer idade;

 @Temporal(TemporalType.DATE)
 private Date nascimento;

 @ManyToOne(fetch=FetchType.LAZY)
 @JoinColumn(name = "curso_id", referencedColumnName = "id")
 private Curso curso;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getNome() {
  return nome;
 }

 public void setNome(String nome) {
  this.nome = nome;
 }

 public Curso getCurso() {
  return curso;
 }

 public void setCurso(Curso curso) {
  this.curso = curso;
 }

 public Integer getIdade() {
  return idade;
 }

 public void setIdade(Integer idade) {
  this.idade = idade;
 }

 public Date getNascimento() {
  return nascimento;
 }

 public void setNascimento(Date nascimento) {
  this.nascimento = nascimento;
 }

 @Override
 public String toString() {
  return "Aluno["+id+"]: "+ nome;
 }

}
&lt;/pre&gt;
&lt;br/&gt;
Curso.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;
import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
public class Curso {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 private String descricao;

 private Integer duracao;

 @OneToMany(mappedBy = "curso")
 @Cascade(CascadeType.ALL)
 private Collection&lt;Aluno&gt; alunos;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getDescricao() {
  return descricao;
 }

 public void setDescricao(String descricao) {
  this.descricao = descricao;
 }

 public Collection&lt;Aluno&gt; getAlunos() {
  return alunos;
 }

 public void setAlunos(Collection&lt;Aluno&gt; alunos) {
  this.alunos = alunos;
 }

 public Integer getDuracao() {
  return duracao;
 }

 public void setDuracao(Integer duracao) {
  this.duracao = duracao;
 }
 
 public String toString(){
  return "Curso["+id+"]: "+descricao;
 }

}
&lt;/pre&gt;
&lt;br/&gt;
Biblioteca.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.util.Collection;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name="biblioteca")
public class Biblioteca {
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO) 
 private Integer id;
 
 @Column(name="nome", length=50)
 private String nome;
 
 @Column(name="cnpj", length=14)
 private String cnpj;
 
 @OneToOne(mappedBy="biblioteca")
 @Cascade(CascadeType.ALL)
 private Endereco endereco;
 
 @OneToMany(mappedBy="biblioteca")
 @Cascade(CascadeType.ALL)
 private Collection&lt;Livro&gt; livros;

 @OneToMany(mappedBy="")
 @Cascade(CascadeType.ALL)
 private Collection&lt;Telefone&gt; telefone;
 
 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getNome() {
  return nome;
 }

 public void setNome(String nome) {
  this.nome = nome;
 }

 public String getCnpj() {
  return cnpj;
 }

 public void setCnpj(String cnpj) {
  this.cnpj = cnpj;
 }

 public Endereco getEndereco() {
  return endereco;
 }

 public void setEndereco(Endereco endereco) {
  this.endereco = endereco;
 }

 public Collection&lt;Livro&gt; getLivros() {
  return livros;
 }

 public void setLivros(Collection&lt;Livro&gt; livros) {
  this.livros = livros;
 }

 public Collection&lt;Telefone&gt; getTelefone() {
  return telefone;
 }

 public void setTelefone(Collection&lt;Telefone&gt; telefone) {
  this.telefone = telefone;
 }
}
&lt;/pre&gt;
&lt;br/&gt;
Endereco.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name="endereco")
public class Endereco {
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Integer idEndereco;
 
 @Column(name="rua")
 private String rua;
 
 @Column(name="nro")
 private String nro;
 
 @OneToOne()
 @JoinColumn(name="biblioteca_id", referencedColumnName="id")
 private Biblioteca biblioteca;

 public Integer getIdEndereco() {
  return idEndereco;
 }

 public void setIdEndereco(Integer idEndereco) {
  this.idEndereco = idEndereco;
 }

 public String getRua() {
  return rua;
 }

 public void setRua(String rua) {
  this.rua = rua;
 }

 public String getNro() {
  return nro;
 }

 public void setNro(String nro) {
  this.nro = nro;
 }

 public Biblioteca getBiblioteca() {
  return biblioteca;
 }

 public void setBiblioteca(Biblioteca biblioteca) {
  this.biblioteca = biblioteca;
 } 
}
&lt;/pre&gt;
&lt;br/&gt;
Telefone.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="telefone")
public class Telefone {
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 @Column(name="id_telefone")
 private Integer idTelefone;
 
 @Column(name="ddd", length = 3)
 private Integer ddd;
 
 @Column(name="nroTelefone", length = 8)
 private Integer nroTelefone;
 
 @ManyToOne()
 @JoinColumn(name="biblioteca_id", referencedColumnName="id")
 private Biblioteca biblioteca;

 public Integer getIdTelefone() {
  return idTelefone;
 }

 public void setIdTelefone(Integer idTelefone) {
  this.idTelefone = idTelefone;
 }

 public Integer getDdd() {
  return ddd;
 }

 public void setDdd(Integer ddd) {
  this.ddd = ddd;
 }

 public Integer getNroTelefone() {
  return nroTelefone;
 }

 public void setNroTelefone(Integer nroTelefone) {
  this.nroTelefone = nroTelefone;
 }

 public Biblioteca getBiblioteca() {
  return biblioteca;
 }

 public void setBiblioteca(Biblioteca biblioteca) {
  this.biblioteca = biblioteca;
 } 
}
&lt;/pre&gt;
&lt;br/&gt;
Livro.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="livro")
public class Livro {
 
 @Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 private Integer id;
 
 @Column(name="titulo")
 private String titulo;
 
 @Column(name="autor") 
 private String autor;
 
 @Column(name="isbn")
 private Integer isbn;
 
 @ManyToOne()
 @JoinColumn(name="biblioteca_id", referencedColumnName="id")
 private Biblioteca biblioteca;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getTitulo() {
  return titulo;
 }

 public void setTitulo(String titulo) {
  this.titulo = titulo;
 }

 public String getAutor() {
  return autor;
 }

 public void setAutor(String autor) {
  this.autor = autor;
 }

 public Integer getIsbn() {
  return isbn;
 }

 public void setIsbn(Integer isbn) {
  this.isbn = isbn;
 }

 public Biblioteca getBiblioteca() {
  return biblioteca;
 }

 public void setBiblioteca(Biblioteca biblioteca) {
  this.biblioteca = biblioteca;
 }
}
&lt;/pre&gt;
&lt;br/&gt;
AlunoServico.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package servico;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import util.HibernateUtil;
import entidade.Aluno;
import entidade.Curso;

public class AlunoServico {

 private Session session;

 public static void main(String[] args) {
  AlunoServico servico = new AlunoServico();
  servico.criar();
  servico.consultas();
 }

 private void consultas() {
  iniciandoSessao();
  Criteria c = session.createCriteria(Curso.class);

  for (Curso elem : (List&lt;Curso&gt;) c.list()) {
   System.out.println(elem);
  }

  c = session.createCriteria(Aluno.class);
  c.add(Restrictions.like("nome", "Tia%"));
  c.add(Restrictions.between("idade", 10, 34));
  for (Aluno elem : (List&lt;Aluno&gt;) c.list()) {
   System.out.println(elem);
  }

  c = session.createCriteria(Aluno.class);
  c.add(Restrictions.like("nome", "Fla%"));
  c.add(
    Restrictions.or(
      Restrictions.eq("idade", 31), 
      Restrictions.isNull("idade")
    )
   );
  for (Aluno elem : (List&lt;Aluno&gt;) c.list()) {
   System.out.println(elem);
  }

  c = session.createCriteria(Aluno.class);
  c.add(
    Restrictions.in("nome", new String[] { "Tiago Ramos", "Flavia" })
   );
  c.add(
    Restrictions.disjunction()
     .add(Restrictions.isNull("idade"))
     .add(Restrictions.eq("idade", 30))
     .add(Restrictions.eq("idade", 31))
    .add(Restrictions.eq("idade", 34))
   );
  for (Aluno elem : (List&lt;Aluno&gt;) c.list()) {
   System.out.println(elem);
  }

  c = session.createCriteria(Aluno.class);
  c.add(Restrictions.like("nome", "F%"));
  c.addOrder(Order.asc("nome"));
  c.addOrder(Order.desc("idade"));
  c.setMaxResults(50);
  for (Aluno elem : (List&lt;Aluno&gt;) c.list()) {
   System.out.println(elem);
  }

 }

 private void criar() {

  Aluno a1 = new Aluno();
  a1.setIdade(34);
  a1.setNascimento(new Date());
  a1.setNome("Tiago Ramos");

  Aluno a2 = new Aluno();
  a2.setIdade(31);
  a2.setNascimento(new Date());
  a2.setNome("Flavia Nunes");

  List&lt;Aluno&gt; alunos = new ArrayList&lt;Aluno&gt;();
  alunos.add(a1);
  alunos.add(a2);

  Curso c = new Curso();
  c.setDescricao("Curso 01");
  c.setDuracao(3);
  c.setAlunos(alunos);

  a1.setCurso(c);
  a2.setCurso(c);

  iniciandoSessao();
  session.save(c);
  session.getTransaction().commit();

 }

 private void iniciandoSessao() {
  session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
 }
}
&lt;/pre&gt;
&lt;br/&gt;
CursoServico.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package servico;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Session;

import util.HibernateUtil;
import entidade.Aluno;
import entidade.Curso;

public class CursoServico {

 private Session session;

 public static void main(String[] args) {

  CursoServico servico = new CursoServico();
  servico.criar();
  servico.consultas();
 }

 private void consultas() {
  iniciandoSessao();
  List&lt;Aluno&gt; alunos = session.createQuery("from Aluno where idade &gt;  ?")
    .setInteger(0, 15)
    .list();

  for (Aluno elem : alunos) {
   System.out.println(elem);
  }
  
  alunos = session.createQuery("from Aluno where nome =  ? order by nome")
  .setString(0, "Flavia Nunes")
    .list();

  for (Aluno elem : alunos) {
   System.out.println(elem);
  }
  
  Aluno aluno = (Aluno) session.createQuery("from Aluno as a where a = ?")
    .setEntity(0, alunos.get(0))
    .uniqueResult();
  System.out.println(aluno);
 }

 private void criar() {

  Aluno a1 = new Aluno();
  a1.setIdade(34);
  a1.setNascimento(new Date());
  a1.setNome("Tiago Ramos");

  Aluno a2 = new Aluno();
  a2.setIdade(31);
  a2.setNascimento(new Date());
  a2.setNome("Flavia Nunes");

  List&lt;Aluno&gt; alunos = new ArrayList&lt;Aluno&gt;();
  alunos.add(a1);
  alunos.add(a2);

  Curso c = new Curso();
  c.setDescricao("Curso 01");
  c.setDuracao(3);
  c.setAlunos(alunos);

  a1.setCurso(c);
  a2.setCurso(c);

  iniciandoSessao();
  session.save(c);
  session.getTransaction().commit();

 }

 private void iniciandoSessao() {
  session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
 }
}
&lt;/pre&gt;
&lt;br/&gt;
BibliotecaServico.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package servico;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import util.HibernateUtil;
import entidade.Biblioteca;
import entidade.Endereco;
import entidade.Livro;
import entidade.Telefone;

public class BibliotecaServico {
 
 public static void main(String[] args) {
  
  BibliotecaServico servico = new BibliotecaServico();  
  servico.criar();
  servico.cadastrarLivros();  
  servico.listar();
 }

 private void listar() {
  Session s = HibernateUtil.getSessionFactory().openSession();
  s.beginTransaction();
  
  Criteria c = s.createCriteria(Livro.class);
  c.addOrder(Order.asc("titulo"));
  
  for(Livro elem : (List&lt;Livro&gt;) c.list()){
   System.out.println(elem.getTitulo());
  }
  
  s.getTransaction().commit();
 }

 private void cadastrarLivros() {
  Session s = HibernateUtil.getSessionFactory().openSession();
  s.beginTransaction();
  
  // Consulta da biblioteca
  Criteria c = s.createCriteria(Biblioteca.class);
  c.add(Restrictions.eq("nome", "Biblioteca do Renan"));
  
  // Recupera a biblioteca
  Biblioteca b = (Biblioteca) c.uniqueResult();
  
  Livro livro1 =  new Livro();
  livro1.setAutor("Autor 1");
  livro1.setIsbn(123456);
  livro1.setTitulo("titulo 1");
  livro1.setBiblioteca(b);
  
  Livro livro2 =  new Livro();
  livro2.setAutor("Autor 2");
  livro2.setIsbn(123456);
  livro2.setTitulo("titulo 2");
  livro2.setBiblioteca(b);
  
  // Adicionando livros na coleção
  ArrayList&lt;Livro&gt; livros = new ArrayList&lt;Livro&gt;();
  livros.add(livro1);
  livros.add(livro2);
  
  b.setLivros(livros);
  
  s.save(b);
  s.getTransaction().commit();
  
 }

 private void criar() {
  
  Session s = HibernateUtil.getSessionFactory().openSession();
  s.beginTransaction();
  
  Endereco e = new Endereco();
  e.setNro("123");
  e.setRua("Minha Rua");
  
  Telefone t = new Telefone();
  t.setDdd(061);
  t.setNroTelefone(35979898);
  
  Biblioteca b = new Biblioteca();
  b.setCnpj("123456");
  b.setNome("Biblioteca Renan");
  
  b.setEndereco(e);
  
  b.setTelefone(new ArrayList&lt;Telefone&gt;());
  b.getTelefone().add(t);
  
  e.setBiblioteca(b);
  
  s.save(b);  
  s.getTransaction().commit();
 }
}
&lt;/pre&gt;
&lt;br/&gt;
HibernateUtil.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

 private static final SessionFactory sessionFactory;

 static {
  try {
   // Criando a SessionFactory apartir no hibernate.cfg.xml
   sessionFactory = new AnnotationConfiguration().configure()
     .buildSessionFactory();
  } catch (Throwable ex) {
   System.err.println("Não foi possivel criar a SessionFactory." + ex);
   throw new ExceptionInInitializerError(ex);
  }
 }

 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }

}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-4946621192715662663?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/hS9r8gy1m6o" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-02T23:11:36.157-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><enclosure url="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-03-1195611561383183-3" length="86990" type="application/x-shockwave-flash" /><media:content url="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-03-1195611561383183-3" fileSize="86990" type="application/x-shockwave-flash" /><feedburner:origLink>http://notasderua.blogspot.com/2007/11/hibernate-aula-03.html</feedburner:origLink></item><item><title>Curso Hibernate - Aula 02</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/7g6bjAeM_RM/curso-hibernate-aula-02.html</link><category>Hibernate</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Sun, 02 Dec 2007 17:11:36 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-8347631686807747516</guid><description>&lt;div style="width:425px;text-align:left" id="__ss_174124"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-02-1195610760727665-3"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-02-1195610760727665-3" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/ramos.tiago/hibernate-aula-02" title="View 'Hibernate - Aula 02' on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Faça o download&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;

Bibliotecas utilizadas:
cglib-nodep-2.1_3.jar
commons-beanutils.jar
commons-collections.jar
commons-dbcp.jar
commons-logging.jar
dom4j-1.6.1.jar
ejb3-persistence.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
jta.jar
mysql-connector-java-5.0.7-bin.jar

Fontes Ciclo de Vida:

ROOT
&amp;nbsp;- lib
&amp;nbsp;&amp;nbsp;- libs
&amp;nbsp;- src
&amp;nbsp;&amp;nbsp;- Usuario.java
&amp;nbsp;&amp;nbsp;- UsuarioServico.java
&amp;nbsp;&amp;nbsp;- HibernateUtil.java
&amp;nbsp;&amp;nbsp;- hibernate.cfg.xml

HibernateUtil.java
&lt;br /&gt;
&lt;pre class="codigo"&gt;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {

 private static final SessionFactory sessionFactory;

 static {
  try {
   // Criando a SessionFactory apartir no hibernate.cfg.xml
   sessionFactory = new AnnotationConfiguration().configure()
     .buildSessionFactory();
  } catch (Throwable ex) {
   System.err.println("Não foi possivel criar a SessionFactory." + ex);
   throw new ExceptionInInitializerError(ex);
  }
 }

 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }

}
&lt;/pre&gt;
&lt;br/&gt;
Usuario.java
&lt;br /&gt;
&lt;pre class="codigo"&gt;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Usuario {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 private String login;

 private String senha;

 private String nome;

 private String email;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getLogin() {
  return login;
 }

 public void setLogin(String login) {
  this.login = login;
 }

 public String getSenha() {
  return senha;
 }

 public void setSenha(String senha) {
  this.senha = senha;
 }

 public String getNome() {
  return nome;
 }

 public void setNome(String nome) {
  this.nome = nome;
 }

 public String getEmail() {
  return email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 @Override
 public String toString() {
  return "Usuario["+this.getId()+"]: Nome "+this.getNome();
 }
}
&lt;/pre&gt;
&lt;br /&gt;
UsuarioSevico.java
&lt;br /&gt;
&lt;pre class="codigo"&gt;
import org.hibernate.Session;

public class UsuarioServico {

 private Session session;

 public static void main(String[] args) {

  UsuarioServico servico = new UsuarioServico();

  System.out.println("----------------------------");
  System.out.println("Criar um objeto Persistente");
  System.out.println("----------------------------");
  servico.criar();
  System.out.println("----------------------------");
  System.out.println("Obter objeto Persistente");
  System.out.println("----------------------------");
  servico.obter();
  System.out.println("----------------------------");
  System.out.println("Atualizar objeto persistente");
  System.out.println("----------------------------");
  servico.atualizar();
  System.out.println("----------------------------");
  System.out.println("Tornar transisnte um objeto persistente");
  System.out.println("----------------------------");
  servico.tornarTransiente();
 }

 private void criar() {
  // Objeto transiente
  Usuario u = new Usuario();
  u.setEmail("email");
  u.setLogin("login");
  u.setNome("nome");
  u.setSenha("senha");

  iniciandoSessao();

  // Objeto sendo persistido
  session.save(u);
  // Objeto persistido

  session.getTransaction().commit();
  // Objeto transiente
 }

 private void obter() {
  iniciandoSessao();

  // Objeto transiente
  Usuario u = (Usuario) session.load(Usuario.class, 1);
  // Objeto persistente
  System.out.println("Usuario " + u.toString());

  session.getTransaction().commit();
  // Objeto transiente
 }

 private void atualizar() {
  iniciandoSessao();

  // Objeto transiente
  Usuario u = (Usuario) session.get(Usuario.class, 2);
  // Objeto persistente
  System.out.println("Usuario " + u.toString());
  u.setNome("novo nome");

  session.getTransaction().commit();
  // Objeto transiente
 }

 private void tornarTransiente() {
  iniciandoSessao();

  // Objeto transiente
  Usuario u = (Usuario) session.get(Usuario.class, 3);
  // Objeto persistente
  if (u != null) {
   System.out.println("Usuario " + u.toString());
   session.delete(u);
  }

  session.getTransaction().commit();
  // Objeto transiente
 }

 private void iniciandoSessao() {
  session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
 }

}
&lt;/pre&gt;
&lt;br /&gt;
hibernate.cfg.xml
&lt;br /&gt;
&lt;pre class="codigo"&gt;
&amp;lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&amp;gt;
&amp;lt;hibernate-configuration&amp;gt;

 &amp;lt;session-factory&amp;gt;

        &amp;lt;!-- Database connection settings --&amp;gt;
        &amp;lt;property name="connection.driver_class"&amp;gt;com.mysql.jdbc.Driver&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.url"&amp;gt;jdbc:mysql://localhost/hibernateCicloDeVida&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.username"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.password"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.pool_size"&amp;gt;1&amp;lt;/property&amp;gt;

        &amp;lt;!-- SQL dialect --&amp;gt;
        &amp;lt;property name="dialect"&amp;gt;org.hibernate.dialect.MySQLDialect&amp;lt;/property&amp;gt;

        &amp;lt;property name="show_sql"&amp;gt;true&amp;lt;/property&amp;gt;

        &amp;lt;property name="hbm2ddl.auto"&amp;gt;update&amp;lt;/property&amp;gt;

  &amp;lt;mapping class="Usuario"/&amp;gt;

 &amp;lt;/session-factory&amp;gt;

&amp;lt;/hibernate-configuration&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Fontes Associações:

ROOT
&amp;nbsp;- lib
&amp;nbsp;&amp;nbsp;- libs
&amp;nbsp;- src
&amp;nbsp;&amp;nbsp;- hibernate.cfg.xml
&amp;nbsp;&amp;nbsp;- entidade
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- Endereco.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- Usuario.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- Veiculo.java
&amp;nbsp;&amp;nbsp;- servico
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- UsuarioServico.java
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- VeiculoServico.java
&amp;nbsp;&amp;nbsp;- util
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- HibernateUtil.java

hibernate.cfg.xml
&lt;pre class="codigo"&gt;
&amp;lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&amp;gt;
&amp;lt;hibernate-configuration&amp;gt;

 &amp;lt;session-factory&amp;gt;

        &amp;lt;!-- Database connection settings --&amp;gt;
        &amp;lt;property name="connection.driver_class"&amp;gt;com.mysql.jdbc.Driver&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.url"&amp;gt;jdbc:mysql://localhost/hibernateCicloDeVida&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.username"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.password"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.pool_size"&amp;gt;1&amp;lt;/property&amp;gt;

        &amp;lt;!-- SQL dialect --&amp;gt;
        &amp;lt;property name="dialect"&amp;gt;org.hibernate.dialect.MySQLDialect&amp;lt;/property&amp;gt;

        &amp;lt;property name="show_sql"&amp;gt;true&amp;lt;/property&amp;gt;

        &amp;lt;property name="hbm2ddl.auto"&amp;gt;update&amp;lt;/property&amp;gt;

  &amp;lt;mapping class="entidade.Usuario"/&amp;gt;
  &amp;lt;mapping class="entidade.Endereco"/&amp;gt;
  &amp;lt;mapping class="entidade.Veiculo"/&amp;gt;

 &amp;lt;/session-factory&amp;gt;

&amp;lt;/hibernate-configuration&amp;gt;
&lt;/pre&gt;
&lt;br/&gt;
Entidades:
Usuario.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.util.List;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
public class Usuario {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 private String login;

 private String senha;

 private String nome;

 private String email;

 @OneToMany(mappedBy = "usuario")
 @Cascade(CascadeType.ALL)
 private Set&lt;Endereco&gt; enderecos;

 @ManyToMany(fetch = FetchType.LAZY)
 @JoinTable(name = "aluguel", joinColumns = { @JoinColumn(name = "usuario_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "veiculo_id", referencedColumnName = "id") })
 private List&lt;Veiculo&gt; veiculos;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getLogin() {
  return login;
 }

 public void setLogin(String login) {
  this.login = login;
 }

 public String getSenha() {
  return senha;
 }

 public void setSenha(String senha) {
  this.senha = senha;
 }

 public String getNome() {
  return nome;
 }

 public void setNome(String nome) {
  this.nome = nome;
 }

 public String getEmail() {
  return email;
 }

 public void setEmail(String email) {
  this.email = email;
 }

 @Override
 public String toString() {
  return "Usuario[" + this.getId() + "]: Nome " + this.getNome();
 }

 public Set&lt;Endereco&gt; getEnderecos() {
  return enderecos;
 }

 public void setEnderecos(Set&lt;Endereco&gt; enderecos) {
  this.enderecos = enderecos;
 }

 public List&lt;Veiculo&gt; getVeiculos() {
  return veiculos;
 }

 public void setVeiculos(List&lt;Veiculo&gt; veiculos) {
  this.veiculos = veiculos;
 }

}
&lt;/pre&gt;
&lt;br/&gt;
Endereco.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Endereco {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 private String rua;

 private Integer numero;

 private String bairro;

 private String cidade;

 private String uf;

 private String cep;

 @ManyToOne()
 @JoinColumn(name = "usuario_id", referencedColumnName = "id", insertable = true, updatable = true)
 private Usuario usuario;

 public Usuario getUsuario() {
  return usuario;
 }

 public void setUsuario(Usuario usuario) {
  this.usuario = usuario;
 }

 public String getRua() {
  return rua;
 }

 public void setRua(String rua) {
  this.rua = rua;
 }

 public Integer getNumero() {
  return numero;
 }

 public void setNumero(Integer numero) {
  this.numero = numero;
 }

 public String getBairro() {
  return bairro;
 }

 public void setBairro(String bairro) {
  this.bairro = bairro;
 }

 public String getCidade() {
  return cidade;
 }

 public void setCidade(String cidade) {
  this.cidade = cidade;
 }

 public String getUf() {
  return uf;
 }

 public void setUf(String uf) {
  this.uf = uf;
 }

 public String getCep() {
  return cep;
 }

 public void setCep(String cep) {
  this.cep = cep;
 }

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

}
&lt;/pre&gt;
&lt;br/&gt;
Veiculo.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package entidade;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;

@Entity
public class Veiculo {

 @Id
 @GeneratedValue(strategy = GenerationType.AUTO)
 private Integer id;

 @Column()
 private String modelo;

 @Column()
 private String cor;

 @Column()
 private Integer ano;

 @ManyToMany(fetch = FetchType.LAZY)
 @JoinTable(name = "aluguel", joinColumns = { @JoinColumn(name = "veiculo_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "usuario_id", referencedColumnName = "id") })
 private List&lt;Usuario&gt; usuarios;

 public List&lt;Usuario&gt; getUsuarios() {
  return usuarios;
 }

 public void setUsuarios(List&lt;Usuario&gt; usuarios) {
  this.usuarios = usuarios;
 }

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getModelo() {
  return modelo;
 }

 public void setModelo(String modelo) {
  this.modelo = modelo;
 }

 public String getCor() {
  return cor;
 }

 public void setCor(String cor) {
  this.cor = cor;
 }

 public Integer getAno() {
  return ano;
 }

 public void setAno(Integer ano) {
  this.ano = ano;
 }

}
&lt;/pre&gt;
&lt;br/&gt;
Servico:
UsuarioServico.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package servico;
import java.util.HashSet;

import org.hibernate.Session;

import util.HibernateUtil;
import entidade.Endereco;
import entidade.Usuario;

public class UsuarioServico {

 private Session session;

 public static void main(String[] args) {

  UsuarioServico servico = new UsuarioServico();

  System.out.println("-------------------------------");
  System.out.println("Criar um usuario e seu endereco");
  System.out.println("-------------------------------");
  servico.criar();
 }

 private void criar() {
  
  Usuario u1 = new Usuario();
  u1.setEmail("email");
  u1.setLogin("login");
  u1.setNome("nome");
  u1.setSenha("senha");
  u1.setEnderecos(new HashSet&lt;Endereco&gt;());
  
  Endereco e1 = new Endereco();
  e1.setBairro("bairro");
  e1.setCep("cep");
  e1.setCidade("cidade");
  e1.setNumero(123);
  e1.setRua("rua");
  e1.setUf("uf");
  e1.setUsuario(u1);

  u1.getEnderecos().add(e1);
  
  Usuario u2 = new Usuario();
  u2.setEmail("email");
  u2.setLogin("login");
  u2.setNome("nome");
  u2.setSenha("senha");
  u2.setEnderecos(new HashSet&lt;Endereco&gt;());
  
  Endereco e2 = new Endereco();
  e2.setBairro("bairro");
  e2.setCep("cep");
  e2.setCidade("cidade");
  e2.setNumero(123);
  e2.setRua("rua");
  e2.setUf("uf");
  e2.setUsuario(u2);

  u2.getEnderecos().add(e2);
  
  
  iniciandoSessao();

  session.save(u1);
  session.save(u2);
  session.getTransaction().commit();
 }

 private void iniciandoSessao() {
  session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
 }

}
&lt;/pre&gt;
&lt;br/&gt;
VeiculoServico.java
&lt;br/&gt;
&lt;pre class="codigo"&gt;
package servico;

import org.hibernate.Session;

import util.HibernateUtil;
import entidade.Veiculo;

public class VeiculoServico {

 private Session session;

 public static void main(String[] args) {

  VeiculoServico servico = new VeiculoServico();

  System.out.println("-------------------------------");
  System.out.println("Criar um veiculo");
  System.out.println("-------------------------------");
  servico.criar();
 }

 private void criar() {

  Veiculo v1 = new Veiculo();
  v1.setAno(2005);
  v1.setCor("cor 1");
  v1.setModelo("modelo 1");

  Veiculo v2 = new Veiculo();
  v2.setAno(2007);
  v2.setCor("cor 2");
  v2.setModelo("modelo 2");

  iniciandoSessao();

  session.save(v1);
  session.save(v2);
  session.getTransaction().commit();
 }

 private void iniciandoSessao() {
  session = HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
 }

}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-8347631686807747516?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/7g6bjAeM_RM" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-02T23:11:36.158-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><enclosure url="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-02-1195610760727665-3" length="86990" type="application/x-shockwave-flash" /><media:content url="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-02-1195610760727665-3" fileSize="86990" type="application/x-shockwave-flash" /><feedburner:origLink>http://notasderua.blogspot.com/2007/11/curso-hibernate-aula-02.html</feedburner:origLink></item><item><title>Curso Hibernate - Aula 01</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/JSMSp8ih3V4/curso-hibernate.html</link><category>Hibernate</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Sun, 02 Dec 2007 17:11:36 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-991768017585115835</guid><description>&lt;div id="__ss_174155" style="WIDTH: 425px; TEXT-ALIGN: left"&gt;&lt;object style="MARGIN: 0px" height="355" width="425"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-01-119561114575175-2"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-01-119561114575175-2" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="FONT-SIZE: 11px; PADDING-TOP: 2px; FONT-FAMILY: tahoma,arial; HEIGHT: 26px"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN-BOTTOM: -5px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" alt="SlideShare" src="http://static.slideshare.net/swf/logo_embd.png" /&gt;&lt;/a&gt; &lt;a title="View 'Hibernate    Aula 01' on SlideShare" href="http://www.slideshare.net/ramos.tiago/hibernate-aula-01-174155"&gt;View&lt;/a&gt; &lt;a href="http://www.slideshare.net/upload"&gt;Faça o download&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;Bibliotecas:
cglib-nodep-2.1_3.jar
commons-beanutils.jar
commons-collections.jar
commons-dbcp.jar
commons-logging.jar
dom4j-1.6.1.jar
ejb3-persistence.jar
hibernate3.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
jta.jar
mysql-connector-java-5.0.7-bin.jar

Fontes:
Veiculo.java
&lt;pre class="codigo"&gt;package primeiroexemplo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

//Informa que a classe é um objeto persistente
@Entity
// Informa o nome da tabela
@Table(name="veiculos")
public class Veiculo {

 // Informa a chave primaria
 @Id
 // Informa o mecanismo de chave primária
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Integer id;

 // Informa que temos uma coluna
 @Column()
 private String modelo;

 @Column()
 private String cor;

 @Column()
 private Integer ano;

 public Integer getId() {
  return id;
 }

 public void setId(Integer id) {
  this.id = id;
 }

 public String getModelo() {
  return modelo;
 }

 public void setModelo(String modelo) {
  this.modelo = modelo;
 }

 public String getCor() {
  return cor;
 }

 public void setCor(String cor) {
  this.cor = cor;
 }

 public Integer getAno() {
  return ano;
 }

 public void setAno(Integer ano) {
  this.ano = ano;
 }

}
&lt;/pre&gt;Executando.java
&lt;pre class="codigo"&gt;package primeiroexemplo;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;


public class Executando {

 public static void main(String str[]){

  // Configuration é o objeto que recebe as configuracoes
  Configuration c = new AnnotationConfiguration();

  // Criamos uma fabrica de sessoes
  SessionFactory f = c.configure().buildSessionFactory();

  // Iniciamos uma sessao
  Session s = f.openSession();

  // Iniciamos uma transação
  Transaction t = s.beginTransaction();

  // Criamos um objeto que ainda nao foi persistido
  Veiculo v = new Veiculo();
  v.setAno(2000);
  v.setCor("Amarela");
  v.setModelo("Fuscao");

  // Persite o objeto
  s.save(v);

  // Encerra a transacao
  t.commit();

  // Fecha a sessao
  s.close();
 }
}
&lt;/pre&gt;&lt;br&gt;

hibernate.cfg.xml
&lt;pre class="codigo"&gt;

&amp;lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&amp;gt;
&amp;lt;hibernate-configuration&amp;gt;

 &amp;lt;session-factory&amp;gt;

        &amp;lt;!-- Database connection settings --&amp;gt;
        &amp;lt;property name="connection.driver_class"&amp;gt;com.mysql.jdbc.Driver&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.url"&amp;gt;jdbc:mysql://localhost/hibernate_primeiro_exemplo&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.username"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.password"&amp;gt;root&amp;lt;/property&amp;gt;
        &amp;lt;property name="connection.pool_size"&amp;gt;1&amp;lt;/property&amp;gt;

        &amp;lt;!-- SQL dialect --&amp;gt;
        &amp;lt;property name="dialect"&amp;gt;org.hibernate.dialect.MySQLDialect&amp;lt;/property&amp;gt;

        &amp;lt;property name="show_sql"&amp;gt;true&amp;lt;/property&amp;gt;

        &amp;lt;property name="hbm2ddl.auto"&amp;gt;update&amp;lt;/property&amp;gt;

  &amp;lt;mapping class="primeiroexemplo.Veiculo"/&amp;gt;

 &amp;lt;/session-factory&amp;gt;

&amp;lt;/hibernate-configuration&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-991768017585115835?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/JSMSp8ih3V4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-02T23:11:36.158-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure url="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-01-119561114575175-2" length="86990" type="application/x-shockwave-flash" /><media:content url="http://static.slideshare.net/swf/ssplayer2.swf?doc=hibernate-aula-01-119561114575175-2" fileSize="86990" type="application/x-shockwave-flash" /><feedburner:origLink>http://notasderua.blogspot.com/2007/11/curso-hibernate.html</feedburner:origLink></item><item><title>Integrando Subversion no seu arquivo de build</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/5-p9u0-WWo4/integrando-subversion-no-seu-arquivo-de.html</link><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Wed, 17 Oct 2007 17:04:55 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-362514202103199839</guid><description>SVNAnt é uma ferramenta do Ant que permite você interagir com o Subversion dentro de seu script.

1. Fazer download
http://subclipse.tigris.org/files/documents/906/32898/svnant-1.0.0.zip

2. Copiar as os jars que estão em ''svnant-1.0.0\lib'' para a pasta &lt;b&gt;apache-ant-1.7.0\lib&lt;/b&gt;
&lt;b&gt;svnant.jar&lt;/b&gt;
&lt;b&gt;svnClientAdapter.jar&lt;/b&gt;
&lt;b&gt;svnjavahl.jar&lt;/b&gt;

3. Construa o arquivo &lt;b&gt;build.properties&lt;/b&gt; com as opções do seu repositorio
&lt;code&gt;
# --------------------------------------------------------------
# build.properties
# Este arquivo esta sendo referenciado pelo arquivo build.xml.
# --------------------------------------------------------------
svnant.this.url=http://subversion.meurepositorio.com.br/svn/svnant/trunk
svnant.repository.user=ramos.tiago
svnant.repository.passwd=ramos.tiago
&lt;/code&gt;


4. Construa o arquivo &lt;b&gt;build.xml&lt;/b&gt;
&lt;code&gt;
&amp;lt;project name="svnant" basedir="." default="checkout"&amp;gt;

 &amp;lt;property file="build.properties"&amp;gt;

 &amp;lt;path id="project.classpath"&amp;gt;
   &amp;lt;pathelement location="${svnjavahl.jar}"&amp;gt;
   &amp;lt;pathelement location="${svnant.jar}"&amp;gt;
   &amp;lt;pathelement location="${svnClientAdapter.jar}"&amp;gt;
 &amp;lt;/pathelement&amp;gt; 

 &amp;lt;!-- load the svn task --&amp;gt;
 &amp;lt;taskdef resource="svntask.properties" classpathref="project.classpath"&amp;gt;

 &amp;lt;target name="checkout"&amp;gt;
   &amp;lt;svn username="${svnant.repository.user}" password="${svnant.repository.passwd}"&amp;gt;
     &amp;lt;checkout url="${svnant.this.url}" revision="${revision}" destPath="."&amp;gt;
   &amp;lt;/svn&amp;gt;
 &amp;lt;/target&amp;gt;

&lt;/code&gt;

5. Para executar o arquivo é necessário executar o comando:
&lt;code&gt;
ant -f build.xml -Drevision=NUMERODAREVISAO
&lt;/code&gt;

&lt;b&gt;Para verificar as tarefas disponíveis consulte:&lt;/b&gt;
http://subclipse.tigris.org/svn/subclipse/trunk/svnant/doc/svn.html
u/s: guest/""

&lt;b&gt;Referencia:&lt;/b&gt;
http://subclipse.tigris.org/svnant.html
http://subversion.open.collab.net/articles/IntegratingSubversionIntoYourAntBuild.html&lt;/taskdef&gt;&lt;/pathelement&gt;&lt;/pathelement&gt;&lt;/path&gt;&lt;/property&gt;&lt;/project&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-362514202103199839?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/5-p9u0-WWo4" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-17T22:04:55.950-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/10/integrando-subversion-no-seu-arquivo-de.html</feedburner:origLink></item><item><title>RejectConf aqui em Brasília</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/mLhqA_u-k5U/hoje-eu-estive-lendo-o-blog-do-akita-e.html</link><category>Ruby on Rails</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Tue, 16 Oct 2007 11:04:45 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-2866923541890725542</guid><description>Hoje eu estive lendo o blog do &lt;a href=" www.akitaonrails.com"&gt;Akita&lt;/a&gt; e gostei da idéia de movimentarmos a galera que está estudando, produzindo e até tirando onda com o &lt;a href="http://www.rubyonrails.com.br/"&gt;rails&lt;/a&gt;.

A boa idéia seria de realizar um &lt;a href="http://drnicwilliams.com/2007/05/10/rejectconf-at-railsconf/"&gt;RejectConf&lt;/a&gt; aqui em Brasília. A gente divulga, marca um dia e a gente mesmo compartilha, projetos, estudos, dúvidas, algum gem que você viu acha que é de sucesso, algum plugin.

De início a gente precisa de uma sala com projetor e alguns notebooks. Não seria nada tão formal. Podemos ter grupos de compartilhamento de 20 a 30 min, dirigidos por alguém que queira mostrar algo que estudou ou que está projetando e porque não o que lançou.

Podem postar sugestões e assinalem a enquete para depois termos uma noção de quantas pessoas tem interesse.


&lt;iframe src="http://polls.blogflux.com/poll.php?poll=17680&amp;width=200&amp;fontsize=11&amp;height=180&amp;fontface=Verdana&amp;padding=10&amp;textcolor=%23000000&amp;bgcolor=%23FFFFFF&amp;doublespace=0&amp;borderwidth=1&amp;linkmap=1&amp;bordercolor=%23cccccc" width="222" height="202" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;a href="http://polls.blogflux.com/poll-17680.html"&gt;Take the poll&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://polls.blogflux.com/"&gt;Free Poll by Blog Flux&lt;/a&gt;&lt;/iframe&gt;&amp;nbsp;&lt;iframe src="http://polls.blogflux.com/poll.php?poll=17691&amp;width=200&amp;fontsize=11&amp;height=180&amp;fontface=Verdana&amp;padding=10&amp;textcolor=%23000000&amp;bgcolor=%23FFFFFF&amp;doublespace=0&amp;borderwidth=1&amp;linkmap=1&amp;bordercolor=%23cccccc" width="222" height="202" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;a href="http://polls.blogflux.com/poll-17691.html"&gt;Take the poll&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://polls.blogflux.com/"&gt;Free Poll by Blog Flux&lt;/a&gt;&lt;/iframe&gt;
&lt;br/&gt;
&lt;font color="red"&gt;&lt;b&gt;Atualização&lt;/b&gt;&lt;/font&gt;
Já temos um grupo criado para melhorar a comunicação "brasilia-on-rails@googlegroups.com", vou divulgar algumas decisões para todos aqui e no grupo.
Dia 27/10/2007 traremos as primeiras notícias de data e local.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-2866923541890725542?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/mLhqA_u-k5U" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-16T16:04:45.066-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/10/hoje-eu-estive-lendo-o-blog-do-akita-e.html</feedburner:origLink></item><item><title>Injetando Interceptador do Hibernate no Spring</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/-bxDkpZRC3c/injetando-interceptador-do-hibernate-no.html</link><category>Spring</category><category>Hibernate</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Wed, 17 Oct 2007 17:05:17 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-6919486393327178108</guid><description>O Hibernate tem Interceptadores e Eventos que facilitam a implementação de mecanismos de log. Para integrar com o Spring precisamos realizar os seguintes passos:

Primeiro vamos criar o Interceptador:
&lt;code&gt;
public class HibernateInterceptor extends EmptyInterceptor  {

// Posso ter algum usuario e suas preferencias
private Usuario usuario;

// Posso ter a sessao para realizar alguma operacao
private SessionFactory sessionFactory;

public void setUsuario(Usuario usuario) {
 this.usuario = usuario;
}

public void setSessionFactory(SessionFactory sessionFactory) {
 this.sessionFactory = sessionFactory;
}
public void onDelete(Object entity,
     Serializable id,
     Object[] state,
     String[] propertyNames,
     Type[] types) {
 registrarLog();
}

public boolean onSave(Object entity,
     Serializable id,
     Object[] state,
     String[] propertyNames,
     Type[] types) {
 registrarLog();
 return false;
}

private void registrarLog() {
 System.out.println("Registrando LOG.");
}

}
&lt;/code&gt;
E em seguida configuramos o interceptador no application-context.xml
&lt;code&gt;
  &amp;lt;!-- Bean para armazenar os dados do usuario logado --&amp;gt;
  &amp;lt;bean id="usuario" class="Usuario" scope="session" method="init"&amp;gt;
      &amp;lt;aop:scoped-proxy&amp;gt;
  &amp;lt;/aop:scoped-proxy&amp;gt;

  &amp;lt;!-- Interceptor do Hibernate --&amp;gt;
  &amp;lt;bean id="hibernateInterceptor" class="HibernateInterceptor"&amp;gt;
      &amp;lt;property name="sessionFactory" ref="sessionFactory"&amp;gt;
      &amp;lt;property name="usuario" ref="usuario"&amp;gt;
  &amp;lt;/property&amp;gt;

  &amp;lt;!-- Configuracao do  TransactionManager--&amp;gt;
  &amp;lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&amp;gt;
      &amp;lt;property name="sessionFactory" ref="sessionFactory"&amp;gt;
      &amp;lt;property name="entityInterceptor" ref="hibernateInterceptor"&amp;gt;
  &amp;lt;/property&amp;gt;
&lt;/code&gt;

Note que o interceptador criado não será declarado no hibernate.cfg.xml, somente injetado no TransactionManager pela propriedade &lt;a href="http://www.springframework.org/docs/api/org/springframework/orm/hibernate3/HibernateTransactionManager.html#setEntityInterceptor%28org.hibernate.Interceptor%29"&gt;"entityInterceptor"&lt;/a&gt;.&lt;/property&gt;&lt;/bean&gt;&lt;/property&gt;&lt;/bean&gt;&lt;/bean&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-6919486393327178108?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/-bxDkpZRC3c" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-17T22:05:17.982-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/10/injetando-interceptador-do-hibernate-no.html</feedburner:origLink></item><item><title>O Diabo está nos detalhes</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/75lwjku0Ly0/o-diabo-est-nos-detalhes.html</link><category>Metodologias Ágeis</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Sun, 02 Dec 2007 17:11:21 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-1646390836820029822</guid><description>O trecho do livro &lt;a href="http://gettingreal.37signals.com/GR_por.php#ch04"&gt;Caindo na Real&lt;/a&gt; é chocante para alguns (tipo eu)... Vale a pena refletir...


&lt;span style="font-weight: bold;"&gt;Só é um Problema Quando é um Problema&lt;/span&gt;

Não desperdice tempo com problemas que você ainda não tem

Você precisa realmente se preocupar em escalar para 100.000 usuários hoje se vai levar dois anos para chegar lá?

Você tem mesmo que contratar oito programadores se hoje você só precisa de três?

Você precisa realmente de 12 servidores top-de-linha agora se dá para rodar em dois por um ano?

&lt;span style="font-weight: bold;"&gt;Apenas se vire&lt;/span&gt;

As pessoas costumam gastar tempo demais logo de cara tentando resolver problemas que elas ainda nem têm. Não faça isso. Poxa, nós lançamos o Basecamp sem a habilidade de cobrar os clientes! Como o produto é cobrado mensalmente, sabíamos que teríamos um intervalo de 30 dias para dar um jeito. Usamos aquele tempo para resolver problemas mais urgentes e então, após o lançamento, enfrentamos a cobrança. Deu certo (e nos forçou a adotar uma solução simples, sem firulas desnecessárias).

Não esquente com uma coisa até que você tenha de fato que fazê-lo. Não desenvolva demais. Aumente hardware e software de sistema conforme necessário. Se ficar lento por uma ou duas semanas não será o fim do mundo. Apenas seja honesto: explique para os seus clientes que você está passando por dores de crescimento. Eles podem não ficar empolgados mas apreciarão a franqueza.

&lt;span style="font-weight: bold;"&gt;Resumo da Ópera:&lt;/span&gt; Tome decisões só no momento necessário, pois aí você terá acesso à informação real de que precisa. Entrementes você estará em condições de prestar atenção às coisas que requerem cuidado imediato.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-1646390836820029822?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/75lwjku0Ly0" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-12-02T23:11:21.979-02:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/09/o-diabo-est-nos-detalhes.html</feedburner:origLink></item><item><title>Login e Controle de Acesso em Ruby on Rails</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/_ZKcN_OQ-jY/login-e-controle-de-acesso-em-ruby-on.html</link><category>Ruby on Rails</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Wed, 26 Sep 2007 23:41:52 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-4216592644932574495</guid><description>Tempos atrás estava procurando algo que facilitasse minha vida com autenticação e controle de acesso em RoR. Passei algum tempo quebrando um galho com a engine do &lt;a href="http://goldberg.240gl.org/"&gt;Goldberg&lt;/a&gt;. Boa, mas muito gigante para aplicações simples.

Cheguei nesse tutorial rápido e espero que ajude, não inventei nada, só reescrevi a roda:

1. Crie uma nova aplicação "rails novosite"

2. "cd novosite"

3. Instale o plugin "gem install login_generator" e em seguida gere os arquivos de autenticação com "ruby script/generate login LoginSystem" onde LoginSystem será o nome do seu controller de autenticação.

4. Crie um migrate para criar a estrutura do controle de acesso "ruby script/generate migration create_acl_schema".

5. Coloque o conteudo abaixo no migrate criado
&lt;pre&gt;
class CreateAclSchema &lt; ActiveRecord::Migration
  def self.up
    create_table :users do |t|
      t.column :login, :string, :limit=&gt;40, :null=&gt;false
      t.column :name, :string, :limit=&gt;40
      t.column :password, :string, :limit=&gt;40, :null=&gt;false
      t.column :updated_at, :datetime
      t.column :created_at, :datetime
      t.column :access, :datetime
      t.column :nick, :string
    end
    create_table :roles do |t|
      t.column :name, :string, :limit=&gt;40, :null=&gt;false
      t.column :info, :string, :limit=&gt;80
    end
    create_table :permissions do |t|
      t.column :name, :string, :limit=&gt;40, :null=&gt;false
      t.column :info, :string, :limit=&gt;80
    end
    create_table :roles_users do |t|
      t.column :user_id, :integer, :null=&gt;false
      t.column :role_id, :integer, :null=&gt;false
    end
    create_table :permissions_roles do |t|
      t.column :role_id, :integer, :null=&gt;false
      t.column :permission_id, :integer, :null=&gt;false
    end
  end
def self.down
    drop_table :users
    drop_table :roles
    drop_table :permissions
    drop_table :roles_users
    drop_table :permissions_roles
  end
end
&lt;/pre&gt;

6. Crie outro migrate para a entidade que iremos testar "ruby script/generate migration carro"

7. Coloque o conteudo abaixo no migrate criado
&lt;pre&gt;
class CreateCarros &lt; ActiveRecord::Migration
  def self.up
    create_table :carros do |t|
      t.column :user_id, :integer
      t.column :name, :string
      t.column :age, :integer
      t.column :updated_at, :datetime
      t.column :created_at, :datetime
    end
  end

  def self.down
    drop_table :carros
  end
end
&lt;/pre&gt;

8. Configure o config\database.yml e crie a base recomendada

9. execute "rake migrate" para criar tabelas na base de dados e depois "ruby script\generate scaffold Carro" para criar um CRUD de teste para a entidade Carro.

10. Crie os seguintes arquivos:

app/models/permission.rb 
&lt;pre&gt;
class Permission &lt; ActiveRecord::Base
  has_and_belongs_to_many :roles
end
&lt;/pre&gt;

app/models/role.rb
&lt;pre&gt;
class Role &lt; ActiveRecord::Base
  has_and_belongs_to_many :permissions
  has_and_belongs_to_many :users
end
&lt;/pre&gt;

lib/acl_system.rb
&lt;pre&gt;
module ACLSystem
  include LoginSystem

  protected

  def authorize?(user)
    required_perm = "%s/%s" % [ params['controller'], params['action'] ]

    if user.authorized? required_perm
      return true
    end

    return false
  end
end
&lt;/pre&gt;

11. Em app/models/user.rb modifique adicionando os seguintes métos e relacionamento:
&lt;pre&gt;
class User &lt; ActiveRecord::Base
has_and_belongs_to_many :roles

  # Return true/false if User is authorized for resource.
def authorized?(resource)
    match=false
    permission_strings.each do |p|
      r = Regexp.new(p)
      match = match || ((r =~ resource) != nil)
    end
    return match
end


  # Load permission strings 
  def permission_strings
    a = []
    self.roles.each{|r| r.permissions.each{|p| a&lt;&lt; p.name }}
    a
  end
&lt;/pre&gt;

E em app/controllers/application.rb para:
&lt;pre&gt;
require_dependency "acl_system" 
class ApplicationController &lt; ActionController::Base
include ACLSystem 
model :user
&lt;/pre&gt;

E em app/controllers/carros_controllers.rb para:
&lt;pre&gt;
class CarrosController &lt; ActiveRecord::Base
before_filter :login_required
&lt;/pre&gt;

Obs: "before_filter :login_required" exige que o usuário esteja logado e tenha permissao de acesso.

12. Inicie o servidor e acesse "localhost:3000/login_system/signup" crie dois usuários de teste

13. Utilize o script para criar as permissões, regras e associar ao usuário:

&lt;pre&gt;
INSERT INTO roles (id, name, info) VALUES (1, 'admin', 'Admistrador'); 
INSERT INTO roles (id, name, info) VALUES (2, 'normal', 'Usuario Comum'); 
INSERT INTO roles_users (user_id, role_id) VALUES (1, 1); 
INSERT INTO roles_users (user_id, role_id) VALUES (2, 2); 
INSERT INTO permissions(name,info) VALUES('.*/.*', 'Acesso Total'); 
INSERT INTO permissions(name,info) VALUES('carros/index', 'Acesso reduzido'); 
INSERT INTO permissions(name,info) VALUES('carros/list', 'Acesso reduzido'); 
INSERT INTO permissions_roles (permission_id, role_id) VALUES (1, 1); 
INSERT INTO permissions_roles (permission_id, role_id) VALUES (2, 2); 
INSERT INTO permissions_roles (permission_id, role_id) VALUES (3, 2); 
&lt;/pre&gt;

14. Pronto... agora é só testar Acesse "http://localhost:3000/carros/" com o segundo usuário criado e verifique que existe acesso. Mas não é possível criar um novo carro. Para o primeiro usuário criado o acesso é total.

Referências: 
&lt;a href="http://wiki.rubyonrails.org/rails/pages/HowToQuicklyDoAuthenticationWithLoginGenerator"&gt;LoginGeneratorACLSystem&lt;/a&gt;
&lt;a href="http://wiki.rubyonrails.org/rails/pages/AccessControlListExample"&gt;LoginGenerator &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-4216592644932574495?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/_ZKcN_OQ-jY" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-09-27T03:41:52.208-03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/09/login-e-controle-de-acesso-em-ruby-on.html</feedburner:origLink></item><item><title>Prazo, Orçamento e Escopo</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/QhTBe7UbEuk/prazo-oramento-e-escopo.html</link><category>Metodologias Ágeis</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Wed, 26 Sep 2007 23:49:47 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-1312911598250324251</guid><description>&lt;div style="TEXT-ALIGN: justify" face="arial"&gt;Ontem escutei algo sobre “Prazo, Orçamento e Escopo”. Foi falado que devemos sempre monitorar esses três pilares, e que eles giravam/refletiam em torno da qualidade, ou seja, se você descontrola um dos pilares você compromete a qualidade.&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt; &lt;/div&gt;&lt;p class="MsoNormal" style="TEXT-ALIGN: justify" face="arial"&gt;Hoje iniciei a leitura de um &lt;a href="http://gettingreal.37signals.com/GR_por.php#ch02"&gt;livro&lt;/a&gt; que falava sobre o assunto. Achei a abordagem muito interessante. Então fica ai o trecho:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: justify" face="arial"&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="TEXT-ALIGN: justify" face="arial"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PNSUvKuIDBU/RvFVcMCv7SI/AAAAAAAAAMQ/TT3_D3m7uNk/s1600-h/alvo.bmp"&gt;&lt;img id="BLOGGER_PHOTO_ID_5111960994799676706" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://3.bp.blogspot.com/_PNSUvKuIDBU/RvFVcMCv7SI/AAAAAAAAAMQ/TT3_D3m7uNk/s320/alvo.bmp" border="0" /&gt;&lt;/a&gt;&lt;b&gt;Fixe o Prazo e o Orçamento, Flexibilize o Escopo&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: justify" face="arial"&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="TEXT-ALIGN: justify" face="arial"&gt;&lt;b&gt;Lance dentro do prazo e do orçamento&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: justify" face="arial"&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="TEXT-ALIGN: justify" face="arial"&gt;Aqui vai uma maneira fácil de lançar dentro do prazo e do orçamento: mantenha-os fixos. Nunca jogue mais tempo ou dinheiro em um problema, apenas diminue o escopo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: justify" face="arial"&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="TEXT-ALIGN: justify" face="arial"&gt;Existe um mito que diz o seguinte: podemos lançar no prazo, no orçamento e no escopo. Isso quase nunca acontece e quando acontece a qualidade normalmente sofre.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="TEXT-ALIGN: justify" face="arial"&gt;Se não puder encaixar tudo dentro do prazo e orçamento planejados então não aumente o tempo e o custo. Em vez disso, puxe o escopo para trás. Sempre existe tempo para adicionar coisas mais tarde – o mais tarde é eterno, o agora está voando.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="TEXT-ALIGN: justify" face="arial"&gt;Lançar alguma coisa grande que está um pouco menor em escopo do que o planejado é melhor do que lançar alguma coisa medíocre e cheio de buracos porque precisou atingir uma janela mágica de prazo, orçamento e escopo. Deixe a mágica para Houdini. Você tem um negócio de verdade para administrar e um produto real para entregar.&lt;/p&gt;&lt;div style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;Aqui vão os benefícios de fixar o prazo e orçamento e manter o escopo flexível:

&lt;span style="FONT-WEIGHT: bold"&gt;Priorização:&lt;/span&gt; Precisaremos descobrir o que é realmente importante. O que vai chegar ao lançamento inicial? Isso força uma restrição que o pressionará a tomar decisões difíceis em vez de ficar hesitando.

&lt;span style="FONT-WEIGHT: bold"&gt;Realidade:&lt;/span&gt; Configurar expectativas é a chave. Se tentar fixar o prazo, orçamento e escopo, não será capaz de entregar com um alto grau de qualidade. Claro, provavelmente poderá entregar alguma coisa, mas “alguma coisa” é o que realmente quer entregar?

&lt;span style="FONT-WEIGHT: bold"&gt;Flexibilidade:&lt;/span&gt; A habilidade de mudar é a chave. Ter tudo fixado torna as mudanças difíceis. Injetar flexibilidade de escopo apresentará opções baseadas em sua experiência real de construir o produto. Flexibilidade é seu amigo.&lt;o:p&gt;&lt;/o:p&gt; &lt;/div&gt;&lt;p class="MsoNormal" style="TEXT-ALIGN: justify" face="arial"&gt;Nossa recomendação: abaixo o Escopo. É melhor fazer meio-produto do que um produto meia-boca (mais sobre isso depois).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Um, dois, três ...&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Como um projeto chega a estar um ano atrasado? Um dia de cada vez.—&lt;cite&gt;Fred Brooks, &lt;a href="http://en.wikipedia.org/wiki/The_Mythical_Man-Month"&gt;engenheiro de software e cientista da computação&lt;/a&gt;&lt;/cite&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-1312911598250324251?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/QhTBe7UbEuk" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-09-27T03:49:47.088-03:00</app:edited><media:thumbnail url="http://3.bp.blogspot.com/_PNSUvKuIDBU/RvFVcMCv7SI/AAAAAAAAAMQ/TT3_D3m7uNk/s72-c/alvo.bmp" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/09/prazo-oramento-e-escopo.html</feedburner:origLink></item><item><title>Processos Ágeis de Desenvolvimento</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/AU8Bdd2LWL8/processos-geis-de-desenvolvimento.html</link><category>Metodologias Ágeis</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Tue, 18 Sep 2007 12:30:55 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-5867195297757523100</guid><description>&lt;p  style="color: rgb(0, 0, 0); text-align: justify;font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;A contínua busca por melhoria tem levado a equipe onde trabalho a encontrar novos rumos e retirar dos anos já vividos, experiências que nos façam refletir e agir/reagir. Em setembro, participei de uma palestra junto com alguns gerentes da empresa (Ricardo Fonseca e o Leonardo) que falava sobre &lt;b&gt;"Gestão Ágil de Projetos com Scrum"&lt;/b&gt; e isso deu um ponto de partida a um diálogo sobre essa crescente tendência na área de desenvolvimento de software. Atualmente estamos com a mão na massa introduzindo alguns passos/técnicas que são pregados por algumas metodologias.&lt;/span&gt;&lt;/p&gt;&lt;div style="color: rgb(0, 0, 0); font-family: arial; text-align: justify;"&gt;  &lt;/div&gt;&lt;p  style="color: rgb(0, 0, 0); text-align: justify;font-family:arial;" class="MsoNormal"&gt;&lt;span style="font-size:100%;"&gt;Hoje tivemos o primeiro diálogo aberto para contaminar toda a equipe de desenvolvimento com a visão de técnicas de desenvolvimento ágil. O Bruno Pedroso, da Sea Tecnologia esteve ministrando uma palestra sobre &lt;b style=""&gt;“Metodologias Ágeis e Extreme Programming”&lt;/b&gt; que envolveu pessoas de diversos papéis (Analistas de Negócios, Programadores, DBA´s e Gerentes de Projeto) na Search Informática.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div  style="text-align: justify;font-family:arial;"&gt;  &lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;Essas são as fotos do encontro e ficam aqui alguns pontos para se manter em mente:&lt;/span&gt;
&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;b style=""&gt;&lt;span style=""&gt;Valores:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt; Comunicação, Coragem, Feedback, Respeito, Simplicidade.&lt;/span&gt;
&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;b style=""&gt;&lt;span style=""&gt;Práticas Primárias:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt; Ambiente Informativo, Ciclo Semanal, Desenvolvimento Orientado a Testes, Design Incremental, Equipe Integral, Folga, Histórias, Integração Contínua, Programação em Par, Sentar-se Junto, Trabalho Energizado.

&lt;span style="font-weight: bold;"&gt;Endereço do Fórum AgilDF&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:100%;" &gt;&lt;span style="font-weight: bold;"&gt;:&lt;/span&gt; http://groups.google.com/group/AgilDF?hl=pt-BR

&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAcNIIFr-I/AAAAAAAAALQ/Ln8-lg4dByE/s1600-h/DSC00359.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAcNIIFr-I/AAAAAAAAALQ/Ln8-lg4dByE/s320/DSC00359.JPG" alt="" id="BLOGGER_PHOTO_ID_5111616588910800866" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PNSUvKuIDBU/RvAcNoIFr_I/AAAAAAAAALY/e54Hv_zCAPI/s1600-h/DSC00360.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_PNSUvKuIDBU/RvAcNoIFr_I/AAAAAAAAALY/e54Hv_zCAPI/s320/DSC00360.JPG" alt="" id="BLOGGER_PHOTO_ID_5111616597500735474" border="0" /&gt;&lt;/a&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: arial; text-align: justify;"&gt;  &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a style="font-family: arial;" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAcOIIFsAI/AAAAAAAAALg/XPJ96iJiGCk/s1600-h/DSC00362.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAcOIIFsAI/AAAAAAAAALg/XPJ96iJiGCk/s320/DSC00362.JPG" alt="" id="BLOGGER_PHOTO_ID_5111616606090670082" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p  style="text-align: justify;font-family:arial;" class="MsoNormal"&gt;&lt;span style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-5867195297757523100?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/AU8Bdd2LWL8" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-09-18T16:30:55.707-03:00</app:edited><media:thumbnail url="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAcNIIFr-I/AAAAAAAAALQ/Ln8-lg4dByE/s72-c/DSC00359.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/09/processos-geis-de-desenvolvimento.html</feedburner:origLink></item><item><title>WebMobile TechWeek 2007</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/ZwEk-YLUIlw/webmobile-techweek-2007_03.html</link><category>Evento</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Wed, 26 Sep 2007 23:46:53 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-3730168676758271205</guid><description>&lt;div style="TEXT-ALIGN: justify"&gt;&lt;span style="font-family:arial;color:black;"&gt;Estive em São Paulo nos dias 31/08 e 01/09 junto com o Luciano Costa, participando do WebMobile TechWeek, um evento organizado pela DevMedia. Os assuntos em que estive presente giravam em torno de JEE e JME. Posto aqui duas coisas que achei de grande interesse:&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;/div&gt;&lt;p class="MsoPlainText" style="TEXT-ALIGN: justify;font-family:arial;" &gt;&lt;span style="color:black;"&gt;Primeiro, o mercado para JME está gritando por gente que entre para trabalhar, e pode apostar faturar bastante. O Luciano escreveu alguns números sobre o mercado no blog dele, e quem quiser dá uma olhada é só conferir no &lt;/span&gt;&lt;a href="http://lucianovc.blogspot.com/"&gt;http://lucianovc.blogspot.com/&lt;/a&gt;. Deu para perceber que ainda há muito problema na compatibilidade entre Sistemas Operacionais que dizem que implementam jsr’s, mas nem sempre estão na sua totalidade. Os emuladores também ainda são outra problemática, ou seja, é comum um desenvolvedor implementar no emulador e não funcionar do dispositivo, ou até mesmo o contrário, e o pior de tudo, funcionar em um dispositivo e no outro nem dá sinal de vida. Ai a tal da compatibilidade passa bem longe. &lt;/p&gt;&lt;div style="TEXT-ALIGN: justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" style="FONT-FAMILY: arial" href="http://2.bp.blogspot.com/_PNSUvKuIDBU/RvAi9oIFsCI/AAAAAAAAALw/1TZCdv5o1yY/s1600-h/DSC00200.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5111624019204223010" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://2.bp.blogspot.com/_PNSUvKuIDBU/RvAi9oIFsCI/AAAAAAAAALw/1TZCdv5o1yY/s320/DSC00200.jpg" border="0" /&gt;&lt;/a&gt;&lt;span style="font-family:arial;"&gt;Conforme foi anunciado pelo representante da Nokia no Brasil a febre lá fora é &lt;/span&gt;&lt;span style="FONT-WEIGHT: bold;font-family:arial;" &gt;Localidade!&lt;/span&gt; &lt;span style="FONT-WEIGHT: bold;font-family:arial;" &gt;GPS vai ser o arroz do momento&lt;/span&gt;&lt;span style="font-family:arial;"&gt;, ou seja, ninguém vai querer ficar sem ele no seu prato. Alguns exemplos foram mostrados para termos idéia da dimensão da porta de mercado que está se abrindo para que investir nisso. Participei de alguns "mini-cursos" para tentar aprender alguma coisa sobre o funcionamento da tecnologia e já dá até para aventurar algumas linhas de código agora.&lt;/span&gt;
&lt;o:p style="FONT-FAMILY: arial"&gt;&lt;/o:p&gt;
&lt;span style="font-family:arial;"&gt;Passando para a área de EE, se eu fosse definir a guerra dos frameworks em uma frase seria a seguinte: &lt;/span&gt;&lt;span style="FONT-WEIGHT: bold;font-family:arial;" &gt;“Struts 1 chegou o fim do seu reinado, Struts 2 ainda tem muito o que melhorar, e Jsf está tomando conta cada vez mais do mercado”&lt;/span&gt;&lt;span style="font-family:arial;"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;p class="MsoPlainText" style="TEXT-ALIGN: justify;font-family:arial;" &gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;Fiquei contente com o que vi sendo citado de tecnologia de ponta, e em vê que na Search Informática (onde trabalho atualmente) estamos indo no caminho certo. Trabalhei em um projeto que foi envolvido em muitos conflitos com a questão da adoção de uma tecnologia nova e pouco conhecida ainda. Mas quando a gente vê uma platéia entusiasmada com uma coisa que a gente já trabalha no dia a dia é fantástica a sensação de aprovação. Em resumo, &lt;span style="FONT-WEIGHT: bold"&gt;Jsf junto com “JBoss RichFaces”, “JBoss Ajax4jsf”&lt;/span&gt; foi o que mais empolgou o pessoal, pela facilidade e praticidade nos componentes. Outra coisa em que temos investido também, é na utilização de Hibernate 3.2 com as anotações do javax.persistence também já bastante adotada pelos desenvolvedores que estavam presentes.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_PNSUvKuIDBU/RvAi9oIFsDI/AAAAAAAAAL4/py3t4vYkLqs/s1600-h/DSC00201.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5111624019204223026" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://2.bp.blogspot.com/_PNSUvKuIDBU/RvAi9oIFsDI/AAAAAAAAAL4/py3t4vYkLqs/s320/DSC00201.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="TEXT-ALIGN: justify" face="arial"&gt;E claro, não posso deixar em branco o &lt;span style="FONT-WEIGHT: bold"&gt;RubyOnRails&lt;/span&gt; (HEHEHEHE acredite num evento de Java ele não deixou a desejar, com os 10 minutos de apresentação fez sucesso!)&lt;/p&gt;&lt;div style="TEXT-ALIGN: justify" face="arial"&gt;&lt;/div&gt;&lt;p class="MsoNormal" style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;Passei um tempo mínimo dentro de uma sala escutando um pouco sobre o JavaFx (guerra ao flash), parece que até agora temos muito marketing da Sun e pouca realidade no desempenho. Ou seja, estão investindo muito na definição da linguagem ainda para depois investir no desempenho da tecnologia.&lt;/p&gt;&lt;p class="MsoPlainText" style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAi9IIFsBI/AAAAAAAAALo/IhfNFngDtSs/s1600-h/DSC00196.JPG"&gt;&lt;/a&gt; &lt;/p&gt;&lt;div style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;Para não deixar passar, &lt;span style="FONT-WEIGHT: bold"&gt;não vi ninguém utilizando Eclipse&lt;/span&gt; para as demonstrações, não faço idéia o porquê disso, mas que usa NetBeans deve entender um pouco. A pesar de o NetBeans ter dado algum trabalho para alguns palestrantes (aquelas famosas travadas de 3 minutos) todos mantiveram a calma e superaram. Já que falei de IDE muita gente falou que vale apena pagar pela “IntelliJ IDEA”. Pelo que vi parece ser produtiva... NetBeans dominou e nem se ouve falar em eclipse para desenvolvimento em ME e para EE desde Servlet ao EJB3 foi mostrado os recursos no NetBeans. Detalhe, dessa vez não foi evento patrocinado pela Sun!
&lt;/div&gt;&lt;p class="MsoPlainText" style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_PNSUvKuIDBU/RvAi94IFsEI/AAAAAAAAAMA/7RVLZDk4xC8/s1600-h/DSC00206.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5111624023499190338" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://3.bp.blogspot.com/_PNSUvKuIDBU/RvAi94IFsEI/AAAAAAAAAMA/7RVLZDk4xC8/s320/DSC00206.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;&lt;/div&gt;&lt;p class="MsoPlainText" style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAi9IIFsBI/AAAAAAAAALo/IhfNFngDtSs/s1600-h/DSC00196.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5111624010614288402" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAi9IIFsBI/AAAAAAAAALo/IhfNFngDtSs/s320/DSC00196.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoPlainText" style="FONT-FAMILY: arial; TEXT-ALIGN: justify"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAi-IIFsFI/AAAAAAAAAMI/1p5gsiEwUK8/s1600-h/DSC00212.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5111624027794157650" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; CURSOR: pointer" alt="" src="http://4.bp.blogspot.com/_PNSUvKuIDBU/RvAi-IIFsFI/AAAAAAAAAMI/1p5gsiEwUK8/s320/DSC00212.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-3730168676758271205?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/ZwEk-YLUIlw" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-09-27T03:46:53.907-03:00</app:edited><media:thumbnail url="http://2.bp.blogspot.com/_PNSUvKuIDBU/RvAi9oIFsCI/AAAAAAAAALw/1TZCdv5o1yY/s72-c/DSC00200.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/09/webmobile-techweek-2007_03.html</feedburner:origLink></item><item><title>Gestão Ágil de Projetos com Scrum</title><link>http://feedproxy.google.com/~r/NotasDeRua/~3/rOdWje1zzBA/gesto-gil-de-projetos-com-scrum.html</link><category>Metodologias Ágeis</category><author>noreply@blogger.com (Tiago Ramos)</author><pubDate>Wed, 26 Sep 2007 23:42:35 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-4225161710271902372.post-8029103458539018265</guid><description>&lt;p  class="MsoNormal" style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Scrum é um processo ágil que está centrado na entrega de maior valor de negocio no menor tempo, ou seja, a cada período curto (duas a quatro semanas) espera-se ter software funcionando e pronto para ser entregue. Para isso são definidas prioridades para a evolução do software e a equipe se organiza para determinar qual é a melhor forma de entregar a funcionalidades de maior prioridade. Aos poucos o software é aprovado pelo cliente e conseqüentemente várias iterações são feitas até o final do processo.&lt;/span&gt;&lt;/p&gt;  &lt;p  class="MsoNormal" style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;A idéia é fugir de um planejamento exacerbado e trabalhar de forma “Just-in-Time”, onde só se planeja na hora em que se realiza, e se documenta somente o necessário. Isso evitaria milhares de documentos que dão muito trabalho e quase sempre não são utilizados em nada, sem contar com funções que custam caro e em sua maioria nunca são utilizadas.&lt;/span&gt;&lt;/p&gt;  &lt;p  class="MsoNormal" style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;É um assunto que merece nossa atenção para melh&lt;a href="javascript:void(0)" onclick="return false;" tabindex="10"&gt;&lt;span&gt;&lt;/span&gt;&lt;/a&gt;orar essa tão demorada forma de trabalho, onde passamos por um ciclo monstro e um tempo enorme para entregar simples módulos aos clientes.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:arial;"&gt;  Tem bastante informação em http://teamware.com.br/ e vai rolar curso aqui em Bsb sobre o assunto.&lt;/span&gt;
&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4225161710271902372-8029103458539018265?l=notasderua.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NotasDeRua/~4/rOdWje1zzBA" height="1" width="1"/&gt;</description><app:edited xmlns:app="http://www.w3.org/2007/app">2007-09-27T03:42:35.376-03:00</app:edited><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://notasderua.blogspot.com/2007/09/gesto-gil-de-projetos-com-scrum.html</feedburner:origLink></item><media:rating>nonadult</media:rating></channel></rss>
