掲示板

Service Builder, hibernate.dialect, AS400

thumbnail
8年前 に Mario Aballe Rodriguez によって更新されました。

Service Builder, hibernate.dialect, AS400

Junior Member 投稿: 34 参加年月日: 10/01/20 最新の投稿
Buenas a todos,

Desarrolle un portlet services para conectare a una base de datos externa en la cual mi base de datos por defecto es Mysql y la externa de igual. Pero cuando cambio la configuracion para q se conecte a otra externa como BD2 AS400, cuando esta realizando el deploy me da una exception y me muestra este mensaje:
Caused by: org.hibernate.HibernateException: Unable to determine Dialect to use [name = DB2 UDB for AS / 400, majorVersion = 6]; user must register resolve or Explicitly set 'hibernate.dialect'

esta claro que hay que definirle el dialecto o que realmente no esta detectando de forma automática el dialecto a usar segun la clase :
com.liferay.portal.spring.hibernate.DialectDetector

Mi pregunta es que tengo que hacer para que vea el dialecto en el service builder ??

Saludos y gracias a todos.!
thumbnail
8年前 に Mario Aballe Rodriguez によって更新されました。

RE: Service Builder, hibernate.dialect, AS400

Junior Member 投稿: 34 参加年月日: 10/01/20 最新の投稿
Hola a todos sigo investigado,
Probe con con otra base de datos en este caso fue con Postgres y funciono, tenia la bd del liferay en MySql y podia acceder a otra base de datos ya poblada en Postgres, y nunca tube que definir en el portlet de servicios el dialecto. Por que sucede esto:

Cuando se despliega el portlet-services se ejecuta la clase DialectDetector esta es la encargada de buscar de forma automática el dialecto adecuado segun el driver que se este utilizando. Y es evidente que este no funcione para DB2 AS400, pero viendo el código de la clase DialectDetector si debería.

pues como :
dbName=DB2 UDB for AS/400, dbMajorVersion =6

no debe entrar en la linea resaltada

if ((dbName.equals("ASE")) && (dbMajorVersion == 15)) {
dialect = new SybaseASE157Dialect();
}
else if ((dbName.startsWith("DB2")) && (dbMajorVersion >= 9)) {
dialect = new DB2Dialect();
}

else if ((dbName.startsWith("Microsoft")) && (dbMajorVersion == 9)) {
dialect = new SQLServer2005Dialect();
}
else if ((dbName.startsWith("Microsoft")) && (dbMajorVersion == 10)) {
dialect = new SQLServer2008Dialect();
}
else if ((dbName.startsWith("Oracle")) && (dbMajorVersion >= 10)) {
dialect = new Oracle10gDialect();
}
else
dialect = DialectFactory.buildDialect(
new Properties(), connection);
}

Pero si deberia entrar en:

catch (Exception e)
{
String msg = GetterUtil.getString(e.getMessage());

if (msg.contains("explicitly set for database: DB2")) {
dialect = new DB2400Dialect();

if (_log.isWarnEnabled()) {
_log.warn(
"DB2400Dialect was dynamically chosen as the Hibernate dialect for DB2. This can be overriden in portal.properties");
}

}

Ahora la pregunta es: Que puedo hacer para ver que valor tiene la variable msg , como incluirle el dialecto como una propiedad de hibernate para que no tenga que ejecutar la clase DialectDetector.

Gracias y saludos, espero su cooperación. Gracias nuevamente!!
thumbnail
8年前 に Ignacio Roncero Bazarra によって更新されました。

RE: Service Builder, hibernate.dialect, AS400

New Member 投稿: 21 参加年月日: 10/12/14 最新の投稿
Buenas Mario,

es un poco tarde y no se si te valdrá este comentario. Pero en el portal.properties tienes la siguiente propiedad comentada:
#
# Liferay will automatically detect the Hibernate dialect in
# com.liferay.portal.spring.PortalHibernateConfiguration. Set this property
# to manually override the automatically detected dialect.
#
#hibernate.dialect=

Tampoco se que versión de Liferay estás usando. Pero podrías probar a añadir la siguiente propiedad al portal-ext.properties:

hibernate.dialect=org.hibernate.dialect.DB2400Dialect


La info la he obtenido de LEP-2469

Espero que te sirva. Un saludo.