Pra quem anda desenvolvendo aplica��es com Struts, e nao sabe como integrar com outras ferramentas, existe na sourceforge uma lista de exemplos de aplicacoes com ferramentas integradas. uma delas, o proprio hibernate... :)
http://sourceforge.net/project/showfiles.php?group_id=49385 download recomendado! :) abra�os... miojo ----- Original Message ----- From: "Philippe de M. Sevestre" <[EMAIL PROTECTED]> To: "Victor Moreira de Gurjao" <[EMAIL PROTECTED]> Cc: <[EMAIL PROTECTED]> Sent: Wednesday, June 25, 2003 2:31 PM Subject: Re: [enterprise-list] Hibernate > Victor, > > O padr�o que estou seguindo aqui � o seguinte: > > > Criei uma classe abstrata ActionBase que extende a classe > Action normal do struts. Nesta classe o "perform" obt�m a > SessionFactory armazenada em uma vari�vel do tipo "ThreadLocal", > criando-a caso necess�rio. Em seguida, chamo um overload do > m�todo "perform" que recebe como argumento adicional a sess�o > obtida na factory. Depois de retornar, executo a seq��ncia > de flush/commit e retorno o forward que tiver voltado da > "perform" especializado. > > Este processo est� protegido em um bloco try/catch/finally, > de forma que, em caso de exce��o, seja feito o tratamento > adequado de erro, ou seja, rollback e _descarte da sess�o_ (lembre-se disto > !!!) > > Para configura��o, vc. pode usar um m�todo que armazene em uma vari�vel > est�tica da classe base um flag indicando se o Hibernate est� inicializado > ou > n�o. Se n�o estiver, basta chamar o Hibernate.configure(). Algo assim: > > public class ActionBase extents Action { > ... > private static boolean hiberateConfigurado = false; > private static Object configLock = new Object(); > > ... > > public ActionForward perform( ... ) { > > > // Inicia o hibernate caso necess�rio > if ( !hibernateConfigurado ) { > > > synchronized( configLock ) { > // Obs: teste para evitar poss�vel corrida > if ( !hibernateConfigurado ) { > Hibernate.configure(); > > // Pega a factory no JNDI > InitialContext ctx = new InitialContext(); > sessionFactory = (SessionFactory) > ctx.lookup("HibernateSessionFactory"); > > // Salva a factory no servlet context > > getServlet().getServletContext().setAttribute("factory",sessionFactory); > > // Agora estou configurado > hibernateConfigurado = true; > > } > } > > } > > ... obtem a sess�o usando uma vari�vel ThreadLocal > > ... chama o m�todo "perform" da classe derivada, passando a sess�o de > persist�ncia... > > ... flush/commit ou rollback/close. > } > > > Quanto ao filtro, n�o estou achando agora, mas estava l�, sim... De qq modo > sugiro uma boa olhada em http://hibernate.bluemars.net/36.html > > > > > > > ----- Original Message ----- > From: "Victor Moreira de Gurjao" <[EMAIL PROTECTED]> > To: "'Philippe de M. Sevestre'" <[EMAIL PROTECTED]> > Sent: quarta-feira, 25 de junho de 2003 11:48 > Subject: RES: [enterprise-list] Hibernate > > > > Ol� Philippe, > > > > Primeiramente obrigado por sua resposta. Acho, inclusive, que voc� pode me > > ajudar a chegar exatamente onde desejo... Minha d�vida maior diz respeito > a > > arquitetura. > > > > Estou usando Struts + hibernate. Minhas classes Action acessam uma camada > de > > aplica��o, que acessa uma camada de neg�cio, que acessa uma camada de > > persist�ncia (um pacote com as classes a serem persistidas tal qual vc > > sugeriu). > > > > Meu exemplo consiste em um simples cadastro de usu�rios com uma tela de > > cadastro e edi��o e uma tela de listagem que faculta excluir ou editar os > > itens listados. > > Assim, os passos para o cadastro s�o (de uma forma grosseira): > > > > JSP -> ActionServlet -> ActionForm -> Action -> CamadaAplica��o -> > > CamadaNegocio -> CamadaPersist�ncia > > > > N�o sei onde colocar o Datastore (ou executar o m�todo configure() do > > hibernate), seria uma fun��o chamada logo na "carga" da aplica��o e > deixando > > o SessionFactory no JNDI? Tenho d�vida sobre onde devo colocar a minha > > sess�o (observe que tenho de cadastrar, ver o valor listado, editar, > excluir > > - talvez - e s� ent�o persistir no banco). Suponho eu que devo > compartilhar > > a mesma sess�o para as fun��es de listagem, cadastro, edi��o e exclus�o... > > Ou n�o??? > > > > Voc� sugeriu que eu deixasse a ger�ncia do ciclo de vida das sess�es no > > n�vel do "controller". Onde exatamente isso ficaria? > > > > N�o achei o exemplo que voc� citou no site. N�o vi a utiliza��o de > filtros, > > ser� que voc� pode mandar o link? Tenho caracter�stica autodidata e uma > > certa dificuldade em pedir esse tipo de informa��o, pois me sinto meio > man� > > ao faz�-lo... Foi mal estar importunando. > > > > Mais uma vez obrigado e desculpe por usar seu tempo. Tenho um prazo > > relativamente curto para conseguir usar o hibernate de uma forma > decente... > > J� consigo fazer o b�sico. Partir para o avan�ado vai depender um pouco do > > seu help. Valeu! > > > > Atenciosamente, > > > > V�ctor Gurj�o > > > > -----Mensagem original----- > > De: Philippe de M. Sevestre [mailto:[EMAIL PROTECTED] > > Enviada em: ter�a-feira, 24 de junho de 2003 10:04 > > Para: [EMAIL PROTECTED] > > Assunto: Re: [enterprise-list] Hibernate > > > > > > Ol� Victor, > > > > > > Para configurar o Hibernate eu uso o m�todo est�tico configure() da classe > > Hibernate. Acho mais simples e meu c�digo de inicializa��o fica desta > forma > > gen�rico, j� que n�o h� depend�ncia das classes a serem persistidas. > > > > Algo assim: > > > > // COnfigura o hibernate a partir do arquivo hibernate.cfg.xml > > // No retorno a session factory estar� registrada no JNDI. > > Hibernate.configure(); > > > > // Obt�m factory no JNDI > > Context ctx = new InitialContext(); > > > > > > SessionFactory sessionFactory = (SessionFactory) > > ctx.lookup("HibernateSessionFactory"); > > > > > > Quanto �s classes a serem registradas no Datastore, vc. ter� registrar > todas > > aquelas a serem persistidas. P.ex. se a classe A possui uma propriedade da > > classe B, ent�o B ter� que estar registrada se o "hbm" de A declarar como > > que a propriedade da classe B � persistente. > > > > ex: > > > > public class A { > > > > // Persistente > > private Long _id; > > public Long getId() { return _id; } > > public void setId( Long id ) { _id = id; } > > > > // Persistente > > private B _b; > > public B getB() { return _b; } > > public void setB( B b ) { _b = b ; } > > > > // N�o persistente > > private C _c; > > > > public C getC() { return _c; } > > public void setC( C c ) { _c = c;} > > > > } > > > > > > A.hbm.xml : > > > > > > <class name="A" table="A"> > > <id column="id" name="id" type="java.lang.Long" unsaved-value="null"> > > <generator class="native"/> > > </id> > > > > <many-to-one name="b" column="b" class="B" /> > > </class> > > > > > > No caso acima, a classe B teria que ser registrada tb. no hibernate, mas > n�o > > a classe C. > > > > > > Quanto � divis�o de camadas, a parte de configura��o do datastore, usando > o > > m�todo acima, fica isolada do resto do sistema. Os classes a serem > > persistidas eu deixo em um mesmo "package" e assim fica f�cil ter uma > vis�o > > completa do modelo l�gico. > > > > Para gerenciar o ciclo de vida das sess�es de persist�ncia, o ideal � > deixar > > isto no n�vel do "controller" da sua aplica��o (estou assumindo aqui que a > > mesma esteja estruturada conforme o pattern MVC). No site do hibernate h� > um > > exemplo de como isto pode ser implementado usando filtros. > > > > > > Espero ter ajudado... > > > > Philippe. > > > > > > ----- Original Message ----- > > From: "Victor Moreira de Gurjao" <[EMAIL PROTECTED]> > > To: <[EMAIL PROTECTED]> > > Sent: segunda-feira, 23 de junho de 2003 16:37 > > Subject: [enterprise-list] Hibernate > > > > > > Ol� a todos, > > > > Estou iniciando o uso do Hibernate e tenho uma d�vida sobre a > distribui��o, > > em camadas, dos objetos que controlar�o a persist�ncia dos dados. Pe�o > > desculpas pelo e-mail longo, mas gostaria de deixar claro qual � a > d�vida... > > > > Tenho de criar um Datastore que armazenar� informa��es mapeadas das > classes. > > Devo criar ainda um SessionFactory que "fabricar�" sess�es para acesso aos > > dados. Depois eu uso os m�todos dos objetos-sess�o para inserir, alterar e > > excluir informa��es... Fa�o mais ou menos assim: > > > > Datastore ds = Hibernate.createDatastore(); > > ds.storeClass(MinhaClasse1.class); > > sessionFactory = ds.buildSessionFactory(); > > > > Session session = sessionFactory.openSession(); > > > > session.save(objeto_da_minha_classe_1); > > session.flush(); > > session.connection().commit(); > > session.close(); > > > > D�vidas: > > > > Supondo que quero persistir v�rias classes, devo armazenar as classes > > correlatas no mesmo Datastore? Devo armazenar todas as classes no mesmo > > Datastore (n�o apenas as correlatas)? Devo criar meu Datastore em uma > > camada, meu SessionFactory em outra e os comandos de atualiza��o da em uma > > terceira camada? Algu�m tem algum exemplo, com divis�o dos objetos do > > Hibernate em camadas, que possa ceder para estudo? Algu�m sabe um link que > > indique uma boa divis�o das camadas para esse caso? Em que situa��es devo > > compartilhar do mesmo SessionFactory e do mesmo Datastore? > > > > V�ctor Moreira de Gurj�o > > > > Ps.: Sei que est� meio confuso, mas n�o consegui me expressar melhor. > > Agrade�o respostas a qualquer das perguntas. Obrigado! > > > > > > > > --------------------------------------------------------------------- > > Para cancelar a subscri��o, envie mensagem para: > > [EMAIL PROTECTED] > > Para comandos adicionais, envie mensagem para: > > [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- > Para cancelar a subscri��o, envie mensagem para: [EMAIL PROTECTED] > Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED] --------------------------------------------------------------------- Para cancelar a subscri��o, envie mensagem para: [EMAIL PROTECTED] Para comandos adicionais, envie mensagem para: [EMAIL PROTECTED]
