Pessoal,
Instalei o GlassFish V2 hoje de 9h da manhã e, desde então, estou tentando migrar (antes no JBoss 4.2.2.GA) uma aplicacao super simples (exemplo do livro do Bill Burke), soh com um EJB. Tudo ia muito bem até a hora de fazer o deploy do ejb-jar… No momento do deploy o GlassFish não está encontrando o DataSource registrado com o nome informado no jta-data-source (do persistence.xml). Desde 9h até agora estou tentando fazer o deploy desse danado… por um lado foi bom pois aprendi um monte de coisa nao necessariamente ligada ao problema, por outro, foi ruim pois ainda nao consegui soluciona-lo rss.
No JBoss estava funcionando… para configurar o DataSource foi soh colocar um arquivo cruise-ds.xml no diretório deploy e no persistence.xml, na tag jpa-data-source, colocar java:/CruiseDS (nome do jndi configurado no cruise-ds.xml).
No GlassFish cadastrei o pool de conexoes pelo Admin Console e, através do mesmo, fiz um teste de conexao, que foi bem sucedido.
Até aqui, acredito, então que o DataSource está configurado corretamente. Porém, na hora do Deploy, recebo uma mensagem de que o EJB não foi implantado com sucesso devido a algum erro indicado no log (mais abaixo coloco a mensagem do log).
Dada a descrição geral, vamos com mais detalhes:
O arquivo ejb-jar tem apenas uma entidade mapeada com JPA, uma interface remota e uma implementação @Stateless da mesma. Segue o persistence.xml:
<persistence ...>
<persistence-unit name="CruiseEJB">
<jta-data-source>java:/CruiseDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
</properties>
</persistence-unit>
</persistence>
Segue a configuração no Glassfish equivalente ao cadastrar o DataSource pelo Admin Console (claro que na minha versão, as propriedades user, password e url estão devidamente preenchidos):
<resources>
<jdbc-connection-pool
name="CruiseDS"
datasource-classname="org.postgresql.ds.PGSimpleDataSource"
res-type="javax.sql.DataSource">
<property name="user" value="DB_USER"/>
<property name="password" value="DB_PASSWORD"/>
<property name="url" value="jdbc:postgresql://DB_HOSTNAME/DATABASE_NAME:5432"/>
</jdbc-connection-pool>
</resources>
Com essas configurações, eu consigo, através do Admin Console, testar a conexão com o pool e o teste é bem sucedido. Porém, no momento do deploy, a seguinte exceção (apenas um trecho do stackTrace) é lançada:
javax.naming.NameNotFoundException: No object bound to name java:/CruiseDS
java.lang.RuntimeException: javax.naming.NameNotFoundException: No object bound to name java:/CruiseDS
Como estou começando agora com EJB, não sei se o nome no persistence.xml está correto… o prefixo “java:/” informar em jta-data-source (“java:/CruiseDS”) é padrão EJB ou seria especifico do JBoss e no GlassFish seguiria outro padrão? Do jeito que está, deveria funcionar (provavelmente, não… ou seria algum bug do glassfish, o que acho pouquissimo provável)?