Engenharia reversa sem nenhum XML

0 respostas
C

Blz galera, seguinte, estava apanhando com os plugins e tals para fazer engenharia reversa com o hibernate tools, então implementei tudo em java, sem nenhum XML (que beleza ) :mrgreen:
Então a classe que eu fiz gera os arquivos:
hbm.xml
hibernate.cfg.xml
.java

Você vai precisar dos sequintes jar:
ant.jar
asm.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
jtds-1.2.2.jar
hibernate3.jar
jtidy-r8-20060801.jar
freemarker.jar
hibernate-tools.jar
ejb3-persistence.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
jta.jar

segue o código, n tem erro, é só configurar com o banco de dados(senha, login, etc…), configurar o package para o caminho desejado.

segue o código

package com.reverse;

import java.io.File;
import java.io.FilenameFilter;

import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;
import org.hibernate.cfg.JDBCMetaDataConfiguration;
import org.hibernate.cfg.reveng.DefaultReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.OverrideRepository;
import org.hibernate.cfg.reveng.SchemaSelection;
import org.hibernate.cfg.reveng.TableFilter;
import org.hibernate.tool.hbm2x.ArtifactCollector;
import org.hibernate.tool.hbm2x.Exporter;
import org.hibernate.tool.hbm2x.HibernateConfigurationExporter;
import org.hibernate.tool.hbm2x.HibernateMappingExporter;
import org.hibernate.tool.hbm2x.POJOExporter;

/**
 * 
 * @author Mauricio
 *
 */
public class EngenhariaReversa {

	private static final String DIRETORIO_DELETE = "src\\main\\java\\com\\sample\\VO";//diretorio para delete hbm.xml
	private static final String METAINF = "src\\main\\java\\";//diretorio do hibernate.hbm.xml
	private static final String DIRETORIO = "src\\main\\java";//diretorio dos hbm.xml
	private static final String PACKAGE = "com.sample.VO";//adiciona nas classes POJO o package

	//método que configura o jdbc que retorna um JDBCMetaDataConfiguration
	private static JDBCMetaDataConfiguration configuration(){
		
		//Configurando o JDBC
		JDBCMetaDataConfiguration configuration = new JDBCMetaDataConfiguration();

		try{
			configuration.setProperty(Environment.DIALECT, "org.hibernate.dialect.SQLServerDialect");
			configuration.setProperty(Environment.DRIVER, "net.sourceforge.jtds.jdbc.Driver");
			configuration.setProperty(Environment.URL, "jdbc:jtds:sqlserver://10.42.11.255/SilarOperations");
			configuration.setProperty(Environment.USER, "teste");
			configuration.setProperty(Environment.PASS, "teste");
		}catch (Exception e) {
			e.printStackTrace();
		}

		return configuration;
	}
	//método que gera o código java (POJO)
	public static void gerarJava(){

		try{
			ArtifactCollector artifactCollector = new ArtifactCollector();
			File dest = new File(DIRETORIO);
			Configuration cfg = new Configuration();
			cfg.addDirectory(dest);
			cfg.buildMappings();
			Exporter exporter = new POJOExporter(cfg, dest);

			exporter.getProperties().setProperty("ejb3", "true");
			exporter.getProperties().setProperty("jdk5", "true");
			exporter.setArtifactCollector(artifactCollector);
			exporter.start();

			//delete todos os arquivos com extensão hbm.xml
			File directory = new File(DIRETORIO_DELETE);
			FilenameFilter filter = new FilenameFilterImpl("hbm.xml");
			File[] filteredFiles = directory.listFiles( filter );

			for (int i = 0; i < filteredFiles.length; i++) {
				filteredFiles[i].delete(); 
			} 

			gerarCfgXml(artifactCollector, cfg);//gerando o arquivo hibernate.cfg.xml
			
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	//Método que gera o arquivo hibernate.cfg.xml
	private static void gerarCfgXml(ArtifactCollector artifactCollector, Configuration cfg){

		try{
			// configurando as properties
			cfg.getProperties().setProperty(Environment.DIALECT, "org.hibernate.dialect.SQLServerDialect");
			cfg.getProperties().setProperty(Environment.DRIVER, "net.sourceforge.jtds.jdbc.Driver");
			cfg.getProperties().setProperty(Environment.URL, "jdbc:jtds:sqlserver://10.42.11.255/SilarOperations");
			cfg.getProperties().setProperty(Environment.USER, "teste");
			cfg.getProperties().setProperty(Environment.PASS, "teste");
			
			File dest2 = new File(METAINF);
			HibernateConfigurationExporter hb = new HibernateConfigurationExporter(cfg, dest2);
			
			hb.setArtifactCollector(artifactCollector);
			hb.getProperties().setProperty("ejb3", "true");
			hb.getProperties().setProperty("jdk5", "true");
	
			hb.start();
			
		}catch (Exception e) {
			e.printStackTrace();
		}

	}
	//método que gera os arquivos hbm.xml
	public static void gerarHbmXml() {

		try{
			JDBCMetaDataConfiguration configuration = configuration();
			OverrideRepository or = new OverrideRepository();
			SchemaSelection schema = new SchemaSelection("SilarOperations", ".*");

			TableFilter filter =  new  TableFilter();

			filter.setMatchSchema("dbo");
			filter.setMatchCatalog("SilarOperations");
			filter.setMatchName(".*");
			filter.setExclude(false);
			filter.setPackage(PACKAGE);

			or.addTableFilter(filter);
			or.addSchemaSelection(schema);
			configuration.setReverseEngineeringStrategy(or.getReverseEngineeringStrategy(new DefaultReverseEngineeringStrategy()));			
			configuration.readFromJDBC();
			configuration.buildMappings();

			File dest = new File(DIRETORIO);

			ArtifactCollector artifactCollector = new ArtifactCollector();			
			HibernateMappingExporter hbmExporter = new HibernateMappingExporter(configuration, dest);			
			hbmExporter.setArtifactCollector(artifactCollector);
			hbmExporter.start();

		}catch (Exception e) {
			e.printStackTrace();
		}

	}
}

essa outra classe é somente se deseja deletar todos os arquivos hbm.xml gerados

package com.reverse;

import java.io.File;
import java.io.FilenameFilter;

public class FilenameFilterImpl implements FilenameFilter{

	private String extensaoArquivo;  

	public FilenameFilterImpl(String extensao){  
		this.extensaoArquivo = "." + extensao;  
	}  

	public boolean accept(File dir, String name) {

		if( name.endsWith(this.extensaoArquivo) ) return true;  

		return false;
	}

}

Fácil não?

FLW

Criado 16 de abril de 2008
Respostas 0
Participantes 1