Boa tarde, você usa as ferramentas citadas no campo assunto?
Se você usa, será que vc poderia me ajudar a configurar minha máquina para executa-las, eu já baixei os arquivos mais não consigo configura-las… aguardo respostas… Paulo César 8)
Hibernate e Middlegen
22 Respostas
o middlegen funciona somente chamado a partir de um script ANT
e se você disser qual o problema que esta tendo fica mais facil de tentar ajudar 
também queria saber como funciona 
ant middlegen, isto abre o middlegen, mas ele vem com umas tabelas prontas… de onde ele pegou estas tabelas?
como dizer para ele se conectar no banco que eu quiser e trazer as tabelas? 
obrigado
aqui tem um exemplo então
segue uma task ant que utilizei em um projeto aqui, para gerar o mapeamento de uma tonelada de tabelas até é divertido, mas para pouca coisa, prefiro fazer na mão mesmo :-)
<target name="importdatabase" depends="init">
<taskdef
name="middlegen"
classname="middlegen.MiddlegenTask"
classpathref="project.class.path"
/>
<middlegen
appname="${name}"
prefsdir="."
gui="${var.gui}"
databaseurl="${var.database.url}"
initialContextFactory="${java.naming.factory.initial}"
providerURL="${java.naming.provider.url}"
datasourceJNDIName="${name}/database"
driver="${var.database.driver}"
username="${var.database.username}"
password="${var.database.password}"
schema="dbo"
>
<hibernate
destination="${dir.src}"
package="${var.site.package}.hibernate"
/>
</middlegen>
</target>
se o banco de dados não utilizar schemar (por exemplo, se for utilizar um MySQL ou firebird da vida), remover o parametro scheme
neste caso estava utilizando o middlegen só para gerar mapeamentos para hibernate, mas pode ser utilizado também para EJB, JDO, ....
não esquecer que os jars do middlegen devem estar na variavel de path utilizada na tag taskdef
isto ai vai mostrar a telinha do middlegen (na primeira execução é necessário, depois pode-se passar o parametro gui para false para uma execução automatica
depois de customizadas opções na tela do middlegen, e clicado no botão generate dele
esta task vai gerar os arquivos .hbm.xml, ai deve-se utilizar a ferramenta do proprio hibernate para gerar os .java a partir deste mapeamento
segue o arquivo build.properties que utilizo para setar as propriedades utilizadas neste exemplo acima
dir.merge = ./merge
dir.src = ./callcenter/WEB-INF/src
dir.lib_dir = ./callcenter/WEB-INF/lib
dir.lib_build_dir = ./build_lib
dir.html_dir = ./callcenter
dir.bin = ./callcenter/WEB-INF/classes
var.database.driver = com.sybase.jdbc2.jdbc.SybDriver
var.database.url = jdbc:sybase:Tds:host:porta/db
var.database.username = usuario
var.database.password = senha
var.gui = true
var.site.package = com.topazio.callcenter
java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory
java.naming.provider.url = jnp://localhost:1099
é isto ai :-)
só uma coisa, a opção do middlegen de gerar formularios struts é furada, nada funciona :-(
só gera aquela excessão dizendo que o metodo não foi implementdo, não lembro o nome dela agora :-)
blz, funcionou 
o middlegen funciona somente chamado a partir de um script ANTe se você disser qual o problema que esta tendo fica mais facil de tentar ajudar :-)
O hibernate, eu já entendi o conceito é um modulo de pesistencia, o que eu estou querendo é configurar minha maquina para usar o Middlegen, pois eu preciso de uma IDE para gerar meus XML’s, XDoclet’ e etc… As minhas classes javas eu estou gerando no Rational Rose. :oops:
parece que tu ta tentando usar a ferramenta errada então,
o middlegen é uma ferramenta para geração de codigo a partir de engenharia reversa de um banco de dados,
a ideia dele é tu gerar o banco e ele gerar os .java para ti
como faz para inserir um relacionamento no middlegen ?
quando vc roda ele ele já verfica os relacinamentos do banco e trás pronto certo?
mas se existirem relacionamentos que eu queira colocar na hora eu consigo?
obrigado
não consegue não, ele pega só os do banco,
mas nada impede de tu editar os .hbm.xml que ele gerar depois para adicionar um ou dois relacionamentos a mais 
Então urubatan… qual ferramenta vc me recomenda a usar para gerar meus XML’s e meus XDoclet’s?
o XDoclet,
ele que foi feito para gerar codigo e deployment descriptors a partir de comentarios no codigo fonte
o que eu normalmente faço é o seguinte, comento o fonte, e rodo o xdoclet em cima disto para gerar os .hbm.xml, web.xml, views.properties, struts-config.xml, ejb-jar.xml, …
como tu ta usando o Rational Rose, tu pode utilizar scripts dentro dele mesmo, para baseado em informações que tu coloca la dentro ele ja gerar estes comentarios para ti, ai é só rodar o xdoclet em cima disto
Você tem como me mandar um exemplo de algum XDoclet que vc já construiu? :?
<!-- Copyright (c) 2002 by ObjectLearn. All Rights Reserved. -->
<project name="Patterns Portal" default="distrib" basedir=".">
<!-- set global properties for this build -->
<property name="dist" value="./portal/WEB-INF"/>
<property name="bin" value="./portal/WEB-INF/classes"/>
<property name="src" value="./src"/>
<property name="j2src" value="./j2src"/>
<target name="init">
<!-- Create the dist directory structure used by compile
and copy the deployment descriptors into it-->
<path id="project.class.path">
<pathelement location="${bin}"/>
<fileset dir="./portal/WEB-INF/lib">
<include name="**/*.jar"/>
</fileset>
<fileset dir="E:/JavaLibs/xdoclet-bin-1.2b2">
<include name="**/*.jar"/>
</fileset>
<fileset dir="E:/jakarta-tomcat/common/lib">
<include name="**/*.jar"/>
</fileset>
</path>
</target>
<target name="compile" depends="init">
<javac
srcdir="${src}"
destdir="${bin}"
classpathref="project.class.path"
listfiles="yes"
depend="yes"
source="1.4"
debug="on"/>
<javac
srcdir="${j2src}"
destdir="${bin}"
classpathref="project.class.path"
listfiles="yes"
depend="yes"
source="1.4"
debug="on"/>
</target>
<target name="hibernategen" depends="init">
<taskdef
name="hibernatedoclet"
classname="xdoclet.modules.hibernate.HibernateDocletTask">
<classpath
refid="project.class.path"/>
</taskdef>
<hibernatedoclet
destDir="${src}"
verbose="true"
mergedir="${src}"
addedtags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}"
force="true">
<fileset dir="${src}">
<include name="**/*.java"/>
</fileset>
<hibernate version="2.0"/>
</hibernatedoclet>
</target>
<target name="schemaupdate" depends="init">
<taskdef
name="schemaupdate"
classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask"
classpathref="project.class.path"/>
<schemaupdate
properties="${src}/hibernate.properties"
quiet="no" >
<fileset dir="${src}">
<include name="**/*.hbm.xml"/>
</fileset>
</schemaupdate>
</target>
<target name="webgenerate" depends="init">
<taskdef
classpathref="project.class.path"
classname="xdoclet.modules.web.WebDocletTask"
name="webdoclet"/>
<webdoclet
excludedTags="@version,@author,@todo"
destDir="${dist}"
mergeDir="./merge"
verbose="true"
addedTags="@xdoclet-generated at ${TODAY},@copyright The XDoclet Team,@author XDoclet,@version ${version}">
<fileset
dir="${src}"
includes="**/*.java"/>
<deploymentdescriptor
Servletspec="2.3"
displayname="Patterns Portal"
distributable="true"
sessiontimeout="20"/>
<jsptaglib
Jspversion="1.2"
shortname="patterns"
uri="http://www.patternsportal.com.br/taglib"
displayname="Patterns Poral TagLib"
filename="patterns.tld"/>
</webdoclet>
</target>
<target name="distrib" depends="hibernategen,compile,webgenerate"></target>
</project>
/*
* Created on 05/05/2003
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package br.com.usiinformatica.patterns.portal.data.pattern;
import br.com.usiinformatica.patterns.portal.data.Persistente;
/**
* @author rodrigo
*
* @hibernate.class table = "VALOR" dynamic-update = "true" dynamic-insert = "true"
*/
public class Valor implements Persistente{
private Integer id;
private String valor;
/**
* @return
* @hibernate.id generator-class="native" column="valor_id"
*/
public Integer getId() {
return id;
}
/**
* @return
* @hibernate.property not-null="true" length="255" column="ds_valor"
*/
public String getValor() {
return valor;
}
/**
* @param integer
*/
public void setId(Integer integer) {
id = integer;
}
/**
* @param string
*/
public void setValor(String string) {
valor = string;
}
}
/*
* Created on 09/09/2003
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package br.com.usiinformatica.patterns.portal.listeners;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
/**
* @author Rodrigo
* @web.listener
*/
public class UserLoggerListener implements HttpSessionListener {
/* (non-Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
}
/* (non-Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent event) {
}
}
mas o mais indicado é você olhar a documentação e os exemplos que vem com o proprio XDOclet e com o ANT
Galera, estou tentanto fazer o mapeamento de tabelas de um banco oracle com o Middlegen e simplismente ele aborta a operação sem mostrar erros. já tentei com outros bancos (firebird/ mysql) e não tive problemas.
Alguém pode me ajudar?
Bom dia turma, tudo bem!?
Preciso de uma ajudinha.
Utilizei a engenharia reversa do middlegen para gerar minhas classes Java e hbm.xml a partir de minha modelagem em um banco Oracle.
Para implementar os relacionamentos, nesse caso uma especialização, o Middlegen gerou a classe pai com atributos de coleção (SET) com os nomes dos filhos.
Estou tentando efetuar um teste para constatar a gravação no banco. Alguém sabe me dizer como popular essas coleções? Pesquisei na API Java sobre SET más não consegui resolver…
Obrigado a todos! Abraços.
Bruno
aqui tem um exemplo então segue uma task ant que utilizei em um projeto aqui, para gerar o mapeamento de uma tonelada de tabelas até é divertido, mas para pouca coisa, prefiro fazer na mão mesmo :-)<target name="importdatabase" depends="init"> <taskdef name="middlegen" classname="middlegen.MiddlegenTask" classpathref="project.class.path" /> <middlegen appname="${name}" prefsdir="." gui="${var.gui}" databaseurl="${var.database.url}" initialContextFactory="${java.naming.factory.initial}" providerURL="${java.naming.provider.url}" datasourceJNDIName="${name}/database" driver="${var.database.driver}" username="${var.database.username}" password="${var.database.password}" schema="dbo" > <hibernate destination="${dir.src}" package="${var.site.package}.hibernate" /> </middlegen> </target>se o banco de dados não utilizar schemar (por exemplo, se for utilizar um MySQL ou firebird da vida), remover o parametro scheme
neste caso estava utilizando o middlegen só para gerar mapeamentos para hibernate, mas pode ser utilizado também para EJB, JDO, ....
não esquecer que os jars do middlegen devem estar na variavel de path utilizada na tag taskdef
isto ai vai mostrar a telinha do middlegen (na primeira execução é necessário, depois pode-se passar o parametro gui para false para uma execução automatica
depois de customizadas opções na tela do middlegen, e clicado no botão generate dele
esta task vai gerar os arquivos .hbm.xml, ai deve-se utilizar a ferramenta do proprio hibernate para gerar os .java a partir deste mapeamentosegue o arquivo build.properties que utilizo para setar as propriedades utilizadas neste exemplo acima
dir.merge = ./merge dir.src = ./callcenter/WEB-INF/src dir.lib_dir = ./callcenter/WEB-INF/lib dir.lib_build_dir = ./build_lib dir.html_dir = ./callcenter dir.bin = ./callcenter/WEB-INF/classes var.database.driver = com.sybase.jdbc2.jdbc.SybDriver var.database.url = jdbc:sybase:Tds:host:porta/db var.database.username = usuario var.database.password = senha var.gui = true var.site.package = com.topazio.callcenter java.naming.factory.initial = org.jnp.interfaces.NamingContextFactory java.naming.provider.url = jnp://localhost:1099é isto ai :-)
só uma coisa, a opção do middlegen de gerar formularios struts é furada, nada funciona :-(
só gera aquela excessão dizendo que o metodo não foi implementdo, não lembro o nome dela agora :-)
Olá brother, será que você poderia explicar passo a passo como é que funciona esse Middlegen? tipo quais são os jars necessários e quais os arquivos que tenho de configurar? se tenho de criar algum diretorio especifico e tal. Heeeeellllllllllpe me please....
Cara, se você ver a data do tópico vai notar que isso não é mais usado.
Se o que quer é ORM utilize JPA.
Cara, se você ver a data do tópico vai notar que isso não é mais usado.Se o que quer é ORM utilize JPA.
Mas como faço para gerar o mapeamento apartir de um banco de dados, com esse JPA? você tem algum tutorial para me indicar? eu só estou tentando utilizar Middlegen por que vi isso no livro Hibernate em Ação…
Gerar mapeamento a partir do banco de dados ???
hummmmm…
hammmmmmmmmmm…
é…
realmente não sei.
mas eu particularmente não faria isso.
já deu uma olhada para entender o que é JPA ?
Gerar mapeamento a partir do banco de dados ???
hummmmm…
hammmmmmmmmmm…
é…
realmente não sei.
mas eu particularmente não faria isso.já deu uma olhada para entender o que é JPA ?
Bom, eu gero o mapeamento na mão mesmo em annotations, mas estou com um caso aqui em que preciso que ele gere o mapeamento pra mim e apartir desse mapeamento, utilizando o hbm2java para gerar os pojos. Bom se você pegar o capítulo 9 do livro vai entender melhor o que estou querendo, vou dar uma olhada em JPA, você tem algum link ou algum pdf sobre o assunto para me indicar? Obrigado…
Cara eu não tenho(ou pelo menos não lembro de ter) nada aqui comigo.
Mas material pela internet ai tem aos montes.
Tem esse link até.
Da documentação de jpa.
http://java.sun.com/developer/technicalArticles/J2EE/jpa/
Até.