Pular para o conteúdo principal

Erro WebSphere: "A JDBC Driver or DataSource class name must be specified in the ConnectionDriverName property"


Essa semana tive algumas complicações com esse erro descrito no título (em inglês por ser melhor visualizado em ferramentas de busca, ou em português para a galera que usa o servidor em português: Um Driver JDBC ou um nome de classe DataSource deve ser especificado na propriedade ConnectionDriverName).


O erro, em sua essência, é bem simples... Diz que a propriedade de conexão "driver" deveria ter sido informado para a mesma configuração de conexão. Isso pode ser simples de resolver, se você estiver usando conexões com arquivos de propriedades como manda o script antigamente, a conexão bruta. Mas pode se tornar uma baita dor de cabeça se estiver usando EJBs, um servidor JEE ou até mesmo alguma ferramenta IBM (WebSphere e RSA/RAD) como foi o meu caso.

O projeto em que trabalhava consistia de alguns AS (Application Service's) que carregavam, via injeção de dependência, o objeto EntityManager (JPA 2.0) para uso em todos os casos de uso. Este mesmo entityManager seria carregado através da especificação EJB que faz uso de alias (references) no datasource previamente criado no IBM WebSphere (7.0) usado como servidor do projeto.

Pesquisando, vi que aconselhavam a mudar a forma como estava sendo feito o lookup pelo persistence.xml. Antes eu tinha:

<persistence-unit name="myUnitName" transaction-type="JTA">
  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
  <jta-data-source>java:comp/env/ref-jdbc/myDS</jta-data-source>
  // ...

Essa representa o acesso indirect ao recurso JNDI do seu datasource. Em alguns blogs alguns aconselhavam a mudar o acesso para direct:

<jta-data-source>jdbc/myDS</jta-data-source>

Entretanto, isso somente camuflaria o problema, uma vez que acessando o recurso diretamente, teus EJBs não teriam problema em carregá-lo.

Foi então que percebi que o problema consistia na anotação dos AS nos arquivos de ejb-jar.xml e ibm-ejb-jar.xml que precisavam de mais um recurso, uma vez que eu estava  a usar 2 datasources distintos, mas havia criado o mapeamento para apenas um deles:

<!-- ejb-jar.xml | Configuração do service -->
<session>
  <ejb-name>myAppService</ejb-name>
  <ejb-class>br.as.MyAppService</ejb-class>
  <session-type>Stateless</session-type>
  <transaction-type>Container</transaction-type>
  <resource-ref>
    <description></description>
    <res-ref-name>ref-jdbc/myDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>
  <resource-ref>
    <description></description>
    <res-ref-name>ref-jdbc/myDS</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>
</session>

<!-- ibm-ejb-jar.xml | Configuração do service -->
<session name="UnidadeOperacionalAS">
  <resource-ref name="ref-jdbc/myDS" binding-name="jdbc/myRealJNDI">
  </resource-ref>
  <resource-ref name="ref-jdbc/myDS" binding-name="jdbc/myRealJNDI">
  </resource-ref>
</session>

Notem que antes só havia um mapeamento e o erro em questão aparecia porque os EJBs não conseguiam enxergar o outro DS criado. A partir dessa adição de referências tudo funcionou normalmente.

Lembrando que esse foi um caso à parte, pode ser que não funcione para o seu caso, que seja outra problema de fato. No mais, espero ter ajudado! :)

Comentários

Postar um comentário

Postagens mais visitadas deste blog

Como acessar um iframe e seus elementos via jQuery?

Recentemente tive um problema no projeto pois sentiu a necessidade de acessar um valor de um input que estava dentro de um iframe. Esse tipo de situação não é tão comum, uma vez que geralmente acessamos os valores do iframe para fora.

Para acessar, de dentro de um iframe, um valor externo, utilizamos o seguinte código: $('#idDoElementoExterno', parent.document).val();Entretanto, nunca tínhamos passado pela situação contrária. Pesquisando um pouco descobrimos uma alternativa, porém em JavaScript. Para ficar melhor o entendimento, vamos simular uma situação aqui. Temos uma página html "A.html" e dentro da mesma existe um iframe que aponta (src) para uma página "B.html":

<!-- A.html --> <html> <head> <title>Testando iframe - jQuery</title> <script language="JavaScript"> function exibeValor() { // alert aqui! } </script> </head> <body> <input type="button" v…

"Content is not allowed in prolog" - Entendendo exceção no Seam

Recentemente tive um problema de edição em um arquivo .xhtml utilizando JBoss Seam, Richfaces e afins.

A princípio a mensagem de erro não dizia muito a respeito da causa do mesmo:
com.sun.facelets.FaceletException: Error Parsing /consulta.xhtml: Error Traced[line: 1] Content is not allowed in prolog.
"O conteúdo não é permitido no prólogo". Mas que conteúdo? Em qual prolog?
Depois de dar uma pesquisada descobri que o erro acontece em vista de terem sido colocados alguns caraceteres inválidos antes da declaração de documento xml na página xhtml.
Em outras palavras, a primeira coisa que deve constar em um documento xml (afins) deve ser:
<?xml version="1.0" encoding="utf-8"?>
Qualquer coisa antes disso, até mesmo um simples espaço em branco, pode gerar o erro em questão.
Por fim, lembre-se de que a declaração de documento xml segue o padrão de encoding definido. Logo temos:
<!-- Incorreto --> <?xml version="1.0" encoding="UTF-8"?>…

Integrando Android e PayPal com Java e MySQL - Parte 2

Na primeira parte deste artigo, nós cobrimos toda a configuração inicial do ambiente, envolvendo principalmente o projeto Java Web com Restful, as bibliotecas e ferramentas envolvidas, bem como suas respectivas versões.


Criamos também toda a comunicação com o banco de dados, o modelo Entidade-Relacionamento, o SQL gerado e as configurações da API do PayPal SDK para Java.

Nessa parte, focaremos em finalizar a aplicação de modelo, principalmente no lado Android, testando tudo de forma local.

Você poderá efetuar o download do código fonte diretamente do meu GitHub, no botão abaixo:

DOWNLOAD CÓDIGO
Na Figura 1 abaixo você pode visualizar como ficarão nossas telas ao final da implementação:
Configurando o projeto Android Antes de criar o projeto, precisamos efetuar o download do PayPal Android SDK. Extraia os arquivos em uma pasta de preferência.

Mais uma vez, você pode se sentir à vontade para usar o Eclipse Android Bundle ou o AndroidStudio para programar a parte Android, desde que tenha…