Boa tarde,
Estou querendo criar um plugin para o vraptor integrando o flyway.
Atualmente eu estou usando JPA, e ao invés de usar o vraptor-jpa, eu copiei as suas classes para o meu projeto para eu poder modificar o o EntityManagerFactoryCreator.
A modificação foi sutil:
//Criei esta classe que busca .properties através de uma enum CONFIG
@Inject
private ApplicationService service;
@ApplicationScoped
@Produces
public EntityManagerFactory getEntityManagerFactory() {
String persistenceUnit = environment.get("br.com.caelum.vraptor.jpa.persistenceunit", "default");
// Database configuration
Properties configs = service.getConfig(Config.DATABASE);
String user = configs.getProperty("user");
String pass = configs.getProperty("pass");
String url = configs.getProperty("url");
// Migrate database
Flyway flyway = new Flyway();
flyway.setDataSource(url, user, pass);
flyway.setLocations("script");
flyway.migrate();
// Create Entity Manager Factory
Map<String, String> props = createFactoryProperties(configs, user, pass, url);
return Persistence.createEntityManagerFactory(persistenceUnit, props);
}
Bom, o código não ficou muito bom não…Mas enfim, minha ideia para o plugin seria: o desenvolvedor configura a dependencia (gradle, maven ou cola o jar na mao, que seja) e o plugin já integra com o flyway (e tambem com os Enviroments do VRaptor). Mas para isso funcionar, o plugin tem que se virar e descobrir a URL/User/Password que o usuário vai usar.
Um jeito seria pegar o persistence.xml (se ele existir), e procurar o “properties”. No caso do Hibernate procurar pelo hibernate.cfg.xml.
Mas pode não ser tão simples, já que mesmo assim os dados de conexão podem estar em outro lugar.
Enfim, o que vcs acham ? Sugestões… Dicas ? Viabilidade deste plugin ? etc e tal
vlw