@hudjoubert escreveu:
Fala galera, tenho uma aplicação fazendo a conexão com o banco usando JPA. O problema é que o meu persistence.xml por algum motivo não reconhece o dialeto do SQLServer mas reconhece o Postgree, então criei um resolver baseado nesse artigo:
http://blog.exxeta.com/java/2016/03/23/dynamically-resolve-hibernate-database-dialect/
que é um modo de reconhecimento do dialeto que eu to usando e ele seta pra mim, mas quando eu insiro o resolver ele não encontra nenhum e da um erro de exception.
Meu persistence.xml:
<property name="hibernate.dialect" value="com.mimimi.MyDialectResolver" />
Meu DialectResolver:
ipackage br.com.govbr.logos.resolver;
import java.util.HashMap;
import java.util.Map;import org.hibernate.dialect.DB2Dialect;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.H2Dialect;
import org.hibernate.dialect.HSQLDialect;
import org.hibernate.dialect.MySQL5Dialect;
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.SQLServer2008Dialect;
import org.hibernate.dialect.SQLServer2012Dialect;
import org.hibernate.dialect.PostgreSQL9Dialect;
import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo;
import org.hibernate.engine.jdbc.dialect.spi.DialectResolver;public class MyDialectResolver implements DialectResolver {
private static final long serialVersionUID = 1453501504388873542L; private static Map<String, Class<? extends Dialect>> DIALECT_BY_NAME = new HashMap<String, Class<? extends Dialect>>(); @Override public Dialect resolveDialect(DialectResolutionInfo info) { initializeDialects(); String databaseName = info.getDatabaseName(); Dialect dbDialect = lookupDialect(databaseName); return dbDialect; } private Dialect lookupDialect(String databaseName) { Class<? extends Dialect> dialectClass = DIALECT_BY_NAME.get(databaseName); if (dialectClass == null) { return null; } try { return dialectClass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { // log something return null; } } private void initializeDialects() { registerDialect(H2Dialect.class, "H2"); registerDialect(MySQL5Dialect.class, "MySQL"); registerDialect(SQLServer2012Dialect.class, "Microsoft SQL Server 2012"); registerDialect(SQLServer2008Dialect.class, "Microsoft SQL Server"); registerDialect(HSQLDialect.class, "HSQL Database Engine"); registerDialect(DB2Dialect.class, "DB2", "DB2/NT64", "DB2/LINUXX8664"); registerDialect(Oracle10gDialect.class, "Oracle10g"); registerDialect(PostgreSQL9Dialect.class, "PostgreSQL9"); } private static void registerDialect(Class<? extends Dialect> dialect, String... databaseNames) { for (String databaseName : databaseNames) { DIALECT_BY_NAME.put(databaseName, dialect); } }
}
O erro:
ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 59) MSC000001: Failed to start service jboss.persistenceunit."logos-ear.ear/logos-dom-1.0-SNAPSHOT.jar#logosPU": org.jboss.msc.service.StartException in service jboss.persistenceunit."logos-ear.ear/logos-dom-1.0-SNAPSHOT.jar#logosPU": org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:179) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:121) at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:193) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) at org.jboss.threads.JBossThread.run(JBossThread.java:320) Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:264) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:228) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:207) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44) at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:161) ... 7 more Caused by: org.hibernate.HibernateException: Unable to construct requested dialect [br.com.govbr.logos.resolver.MyDialectResolver] at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:84) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:51) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137) at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:254) ... 19 more Caused by: java.lang.ClassCastException: br.com.govbr.logos.resolver.MyDialectResolver cannot be cast to org.hibernate.dialect.Dialect at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:74) ... 24 more
Mensagens: 2
Participantes: 2