15069 - Wrong class name or classpath for Datasource Object (CSM Center não inicializa)
Problema: Após atualização do sistema Senior para 5.8.6/5.8.7 a CSM Center não se comunica mais com o Banco de Dados, outras aplicações funcionam normalmente. Identificamos esta situação pois ao tentar logar na CSM Center Console sempre é apresentada a mensagem de que a CSM Center não está inicializada.
No server.log são apresentadas as seguintes mensagens:
(...)
[#|2015-06-25T15:05:46.274-0300|WARNING|glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.enterprise.connectors|_ThreadID=98;_ThreadName=Thread-2;|RAR5117 : Failed to obtain/create connection from connection pool [ com.senior.seguranca.csmcenter.ConnectionPool ]. Reason : com.sun.appserv.connectors.internal.api.PoolingException: Class name is wrong or classpath is not set for : net.sourceforge.jtds.jdbcx.JtdsDataSource|#]
[#|2015-06-25T15:05:46.274-0300|WARNING|glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.gjc.spi|_ThreadID=98;_ThreadName=Thread-2;|RAR5114 : Error allocating connection : [Error in allocating a connection. Cause: Class name is wrong or classpath is not set for : net.sourceforge.jtds.jdbcx.JtdsDataSource]|#]
[#|2015-06-25T15:05:46.274-0300|WARNING|glassfish3.1.2|com.senior.seguranca.csmcenter.context.CsmCenterContextImplementation|_ThreadID=98;_ThreadName=Thread-2;|[CSMCenter] Não foi possível iniciar a CSM Center. Recurso conexão com a base de dados não encontrado ou não disponível. Causa: Error in allocating a connection. Cause: Class name is wrong or classpath is not set for : net.sourceforge.jtds.jdbcx.JtdsDataSource|#]
[#|2015-06-25T15:05:56.321-0300|SEVERE|glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.gjc.util|_ThreadID=98;_ThreadName=Thread-2;|RAR5099 : Wrong class name or classpath for Datasource Object
java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbcx.JtdsDataSource
|#]
(...)
Quando ocorre / onde se aplica: Em ambientes que possuem banco de dados SQL Server e que o arquivo JTDS foi removido da pasta LIB. Essa situação ocorre pois a classe definida no Glassfish (porta 4949), menu Resources > JDBC > JDBC Connection Pools > com.senior.seguranca.csmcenter.ConnectionPool > guia General > campo Datasource Classname está igual à net.sourceforge.jtds.jdbcx.JtdsDataSource, onde para a CSM Center sem o arquivo JTDS a classe deve ser com.microsoft.sqlserver.jdbc.SQLServerDataSource.
Solução: Primeiramente, verificar a pasta libs do domínio da CSM Center (Exemplo: C:/glassfish3/glassfish/domains/csmcenter/lib), onde deve conter apenas um arquivo sqljdbc*.jar. O arquivo JDBC correto para as versões 5.8.6/5.8.7/6.2.29/6.2.30 é o 'sqljdbc4.jar'. Posterior a essa verificação, acessar a CSM Center Config > menu Banco de Dados e clicar no botão Configurar (Observação: não é necessário nenhuma alteração caso as informações de banco de dados não tenham sido modificadas). Esse procedimento irá forçar a atualização do campo Datasource Classname (Glassfish > menu Resources > JDBC > JDBC Connection Pools > com.senior.seguranca.csmcenter.ConnectionPool > guia General) para o correspondente ao arquivo 'sqljdbc4.jar' presente na pasta lib. Após, reinicie o serviço da CSM Center.
No server.log são apresentadas as seguintes mensagens:
(...)
[#|2015-06-25T15:05:46.274-0300|WARNING|glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.enterprise.connectors|_ThreadID=98;_ThreadName=Thread-2;|RAR5117 : Failed to obtain/create connection from connection pool [ com.senior.seguranca.csmcenter.ConnectionPool ]. Reason : com.sun.appserv.connectors.internal.api.PoolingException: Class name is wrong or classpath is not set for : net.sourceforge.jtds.jdbcx.JtdsDataSource|#]
[#|2015-06-25T15:05:46.274-0300|WARNING|glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.gjc.spi|_ThreadID=98;_ThreadName=Thread-2;|RAR5114 : Error allocating connection : [Error in allocating a connection. Cause: Class name is wrong or classpath is not set for : net.sourceforge.jtds.jdbcx.JtdsDataSource]|#]
[#|2015-06-25T15:05:46.274-0300|WARNING|glassfish3.1.2|com.senior.seguranca.csmcenter.context.CsmCenterContextImplementation|_ThreadID=98;_ThreadName=Thread-2;|[CSMCenter] Não foi possível iniciar a CSM Center. Recurso conexão com a base de dados não encontrado ou não disponível. Causa: Error in allocating a connection. Cause: Class name is wrong or classpath is not set for : net.sourceforge.jtds.jdbcx.JtdsDataSource|#]
[#|2015-06-25T15:05:56.321-0300|SEVERE|glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.gjc.util|_ThreadID=98;_ThreadName=Thread-2;|RAR5099 : Wrong class name or classpath for Datasource Object
java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbcx.JtdsDataSource
|#]
(...)
Quando ocorre / onde se aplica: Em ambientes que possuem banco de dados SQL Server e que o arquivo JTDS foi removido da pasta LIB. Essa situação ocorre pois a classe definida no Glassfish (porta 4949), menu Resources > JDBC > JDBC Connection Pools > com.senior.seguranca.csmcenter.ConnectionPool > guia General > campo Datasource Classname está igual à net.sourceforge.jtds.jdbcx.JtdsDataSource, onde para a CSM Center sem o arquivo JTDS a classe deve ser com.microsoft.sqlserver.jdbc.SQLServerDataSource.
Solução: Primeiramente, verificar a pasta libs do domínio da CSM Center (Exemplo: C:/glassfish3/glassfish/domains/csmcenter/lib), onde deve conter apenas um arquivo sqljdbc*.jar. O arquivo JDBC correto para as versões 5.8.6/5.8.7/6.2.29/6.2.30 é o 'sqljdbc4.jar'. Posterior a essa verificação, acessar a CSM Center Config > menu Banco de Dados e clicar no botão Configurar (Observação: não é necessário nenhuma alteração caso as informações de banco de dados não tenham sido modificadas). Esse procedimento irá forçar a atualização do campo Datasource Classname (Glassfish > menu Resources > JDBC > JDBC Connection Pools > com.senior.seguranca.csmcenter.ConnectionPool > guia General) para o correspondente ao arquivo 'sqljdbc4.jar' presente na pasta lib. Após, reinicie o serviço da CSM Center.