[Erro] Quando tento integrar JPA, EJB e DataSource

15 respostas
GabrielCardelli

Fala pessoal tudo bom?

Estou com o seguinteproblema , eu tenho um módulo ejb que eu queria fazer um crud,
Porem utilizando um DataSource e o EntityManager junto com JPA

Comecei adesenvolver a aplicação desde modo:

InterfaceLocal e Implementação

package br.com.crud.service;

import javax.ejb.Local;

import br.com.crud.model.Employee;



/**
 * @author Gabriel Castilho
 *
 */
@Local
public interface EmployeeServiceLocal {
	
	public void change(Employee e);

	public void delete(Employee e);

	public void save(Employee e);

}
package br.com.crud.service;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import br.com.crud.model.Employee;

/**
 * @author Gabriel Castilho
 */

@Stateless
public class EmployeeServiceLocalImpl implements EmployeeServiceLocal{

	@PersistenceContext
	private EntityManager em;
	
	public void change(Employee e){
			
	}
	public void delete(Employee e){
		
	}
	public void save(Employee e){

	}
	

}

Eu tenho um persistence.xml, MySQL-ds.xml no ejbModule

MySQL-ds.xml

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>mysqlDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/learning</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="myPersistence">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/learning" />
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
            <property name="hibernate.connection.password" value="root" />
            <property name="hibernate.connection.username" value="root" />
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
        </properties>
	</persistence-unit>
</persistence>

My POJO:

package br.com.crud.model;

import javax.persistence.Entity;
import javax.persistence.Id;

/**
 * @author Gabriel Castilho
 * 
 */
@Entity
public class Employee {

	@Id
	private Long id;

	private String name;

	private String mail;
	
	
	// Getters and Setters
	
}

Me vem a seguinte mensagem quando eu subo o ejb.

ObjectName: jboss.j2ee:service=EJB3,module=crud-ejb.jar
  State: FAILED
  Reason: java.lang.RuntimeException: Illegal @PersistenceUnit on private javax.persistence.EntityManager br.com.crud.service.EmployeeServiceLocalImpl.em :There is no default persistence unit in this deployment.

Por favor alguem pode me ajudar?

Obrigado

15 Respostas

B

Isso aqui não te diz algo?

:wink:

Abraços…

H

Não sou muito bom em EJBS mas acho que está faltando isso.

Espero ter ajudado.

GabrielCardelli

breno500as:
Isso aqui não te diz algo?

:wink:

Abraços…

Valeu Pessoal

:smiley:

Meu EJB agora não está subindo estranho… vou dar uma olhada

B

Qual erro está dando agora?

Abraços…

GabrielCardelli

Mudei o persistence.xml para isto:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="myPersistence">
        <jta-data-source>mysqlDS</jta-data-source>
	</persistence-unit>
</persistence>

agora estoou tentando pegar o EntityManager com

@PersistenceContext(unitName="myPersistence")
	private EntityManager entityManager;

e no final das contas o final do log do jboss é:

19:54:29,614 ERROR [URLDeploymentScanner] Incomplete Deployment listing:

--- MBeans waiting for other MBeans ---
ObjectName: jboss.j2ee:jar=crud-ejb.jar,name=EmployeeServiceLocalImpl,service=EJB3
  State: NOTYETINSTALLED
  I Depend On:
    persistence.units:unitName=myPersistence

--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: persistence.units:unitName=myPersistence
  State: NOTYETINSTALLED
  Depends On Me:
    jboss.j2ee:jar=crud-ejb.jar,name=EmployeeServiceLocalImpl,service=EJB3

e o ejb não sobe =/

pode dar um help?

B

Tem como vc postar a log inteira do erro ?

Abraços…

GabrielCardelli
19:54:07,433 INFO  [Server] Starting JBoss (MX MicroKernel)...
19:54:07,435 INFO  [Server] Release ID: JBoss [Trinity] 4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)
19:54:07,437 INFO  [Server] Home Dir: C:\jboss-4.2.3.GA
19:54:07,437 INFO  [Server] Home URL: file:/C:/jboss-4.2.3.GA/
19:54:07,444 INFO  [Server] Patch URL: null
19:54:07,444 INFO  [Server] Server Name: default
19:54:07,444 INFO  [Server] Server Home Dir: C:\jboss-4.2.3.GA\server\default
19:54:07,444 INFO  [Server] Server Home URL: file:/C:/jboss-4.2.3.GA/server/default/
19:54:07,503 INFO  [Server] Server Log Dir: C:\jboss-4.2.3.GA\server\default\log
19:54:07,503 INFO  [Server] Server Temp Dir: C:\jboss-4.2.3.GA\server\default\tmp
19:54:07,504 INFO  [Server] Root Deployment Filename: jboss-service.xml
19:54:07,894 INFO  [ServerInfo] Java version: 1.6.0_18,Sun Microsystems Inc.
19:54:07,894 INFO  [ServerInfo] Java VM: Java HotSpot(TM) Client VM 16.0-b13,Sun Microsystems Inc.
19:54:07,894 INFO  [ServerInfo] OS-System: Windows Vista 6.0,x86
19:54:08,559 INFO  [Server] Core system initialized
19:54:10,694 INFO  [WebService] Using RMI server codebase: http://localhost:8083/
19:54:10,697 INFO  [Log4jService$URLWatchTimerTask] Configuring from URL: resource:jboss-log4j.xml
19:54:11,184 INFO  [TransactionManagerService] JBossTS Transaction Service (JTA version) - JBoss Inc.
19:54:11,184 INFO  [TransactionManagerService] Setting up property manager MBean and JMX layer
19:54:11,599 INFO  [TransactionManagerService] Starting recovery manager
19:54:11,722 INFO  [TransactionManagerService] Recovery manager started
19:54:11,722 INFO  [TransactionManagerService] Binding TransactionManager JNDI Reference
19:54:14,122 INFO  [EJB3Deployer] Starting java:comp multiplexer
19:54:16,810 INFO  [NativeServerConfig] JBoss Web Services - Native
19:54:16,811 INFO  [NativeServerConfig] jbossws-3.0.1-native-2.0.4.GA (build=200803312044)
19:54:17,720 INFO  [Embedded] Catalina naming disabled
19:54:17,927 INFO  [AprLifecycleListener] The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre6\bin;.;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;native
19:54:18,006 INFO  [Http11Protocol] Initializing Coyote HTTP/1.1 on http-localhost%2F127.0.0.1-8080
19:54:18,007 INFO  [AjpProtocol] Initializing Coyote AJP/1.3 on ajp-localhost%2F127.0.0.1-8009
19:54:18,008 INFO  [Catalina] Initialization processed in 286 ms
19:54:18,011 INFO  [StandardService] Starting service jboss.web
19:54:18,014 INFO  [StandardEngine] Starting Servlet Engine: JBossWeb/2.0.1.GA
19:54:18,074 INFO  [Catalina] Server startup in 66 ms
19:54:18,222 INFO  [TomcatDeployer] deploy, ctxPath=/, warUrl=.../deploy/jboss-web.deployer/ROOT.war/
19:54:19,111 INFO  [TomcatDeployer] deploy, ctxPath=/invoker, warUrl=.../deploy/http-invoker.sar/invoker.war/
19:54:19,290 INFO  [TomcatDeployer] deploy, ctxPath=/jbossws, warUrl=.../deploy/jbossws.sar/jbossws-context.war/
19:54:19,398 INFO  [TomcatDeployer] deploy, ctxPath=/jbossmq-httpil, warUrl=.../deploy/jms/jbossmq-httpil.sar/jbossmq-httpil.war/
19:54:20,095 INFO  [TomcatDeployer] deploy, ctxPath=/web-console, warUrl=.../deploy/management/console-mgr.sar/web-console.war/
19:54:20,572 INFO  [MailService] Mail Service bound to java:/Mail
19:54:20,969 INFO  [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jboss-ha-local-jdbc.rar
19:54:21,007 INFO  [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jboss-ha-xa-jdbc.rar
19:54:21,042 INFO  [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jboss-local-jdbc.rar
19:54:21,074 INFO  [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jboss-xa-jdbc.rar
19:54:21,157 INFO  [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jms/jms-ra.rar
19:54:21,212 INFO  [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/mail-ra.rar
19:54:21,263 INFO  [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/quartz-ra.rar
19:54:21,276 INFO  [QuartzResourceAdapter] start quartz!!!
19:54:21,375 INFO  [SimpleThreadPool] Job execution threads will use class loader of thread: main
19:54:21,404 INFO  [QuartzScheduler] Quartz Scheduler v.1.5.2 created.
19:54:21,407 INFO  [RAMJobStore] RAMJobStore initialized.
19:54:21,407 INFO  [StdSchedulerFactory] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
19:54:21,407 INFO  [StdSchedulerFactory] Quartz scheduler version: 1.5.2
19:54:21,407 INFO  [QuartzScheduler] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
19:54:22,944 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=DefaultDS' to JNDI name 'java:DefaultDS'
19:54:23,260 INFO  [A] Bound to JNDI name: queue/A
19:54:23,263 INFO  [B] Bound to JNDI name: queue/B
19:54:23,266 INFO  [C] Bound to JNDI name: queue/C
19:54:23,268 INFO  [D] Bound to JNDI name: queue/D
19:54:23,270 INFO  [ex] Bound to JNDI name: queue/ex
19:54:23,288 INFO  [testTopic] Bound to JNDI name: topic/testTopic
19:54:23,291 INFO  [securedTopic] Bound to JNDI name: topic/securedTopic
19:54:23,293 INFO  [testDurableTopic] Bound to JNDI name: topic/testDurableTopic
19:54:23,297 INFO  [testQueue] Bound to JNDI name: queue/testQueue
19:54:23,343 INFO  [UILServerILService] JBossMQ UIL service available at : localhost/127.0.0.1:8093
19:54:23,394 INFO  [DLQ] Bound to JNDI name: queue/DLQ
19:54:23,538 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=JmsXA' to JNDI name 'java:JmsXA'
19:54:23,569 INFO  [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=.../deploy/jmx-console.war/
19:54:23,767 INFO  [Http11Protocol] Starting Coyote HTTP/1.1 on http-localhost%2F127.0.0.1-8080
19:54:23,786 INFO  [AjpProtocol] Starting Coyote AJP/1.3 on ajp-localhost%2F127.0.0.1-8009
19:54:23,795 INFO  [Server] JBoss (MX MicroKernel) [4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)] Started in 16s:289ms
19:54:29,067 INFO  [JmxKernelAbstraction] creating wrapper delegate for: org.jboss.ejb3.stateless.StatelessContainer
19:54:29,077 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:jar=EJBinAction.jar,name=HelloUserBean,service=EJB3 with dependencies:
19:54:29,114 INFO  [EJBContainer] STARTED EJB: ejb3inaction.example.HelloUserBean ejbName: HelloUserBean
19:54:29,151 INFO  [EJB3Deployer] Deployed: file:/C:/Users/Gabriel Castilho/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_4.2_Runtime_Server/deploy/EJBinAction.jar/
19:54:29,283 INFO  [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=mysqlDS' to JNDI name 'java:mysqlDS'
19:54:29,323 INFO  [JmxKernelAbstraction] creating wrapper delegate for: org.jboss.ejb3.stateless.StatelessContainer
19:54:29,323 INFO  [JmxKernelAbstraction] installing MBean: jboss.j2ee:jar=crud-ejb.jar,name=EmployeeServiceLocalImpl,service=EJB3 with dependencies:
19:54:29,324 INFO  [JmxKernelAbstraction] 	persistence.units:unitName=myPersistence
19:54:29,326 INFO  [EJB3Deployer] Deployed: file:/C:/Users/Gabriel Castilho/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_4.2_Runtime_Server/deploy/crud-ejb.jar/
19:54:29,346 INFO  [TomcatDeployer] deploy, ctxPath=/EJBinActionTeste, warUrl=file:/C:/Users/Gabriel Castilho/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_4.2_Runtime_Server/deploy/EJBinActionTeste.war/
19:54:29,520 INFO  [TomcatDeployer] deploy, ctxPath=/crud-webclient, warUrl=file:/C:/Users/Gabriel Castilho/workspace/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_4.2_Runtime_Server/deploy/crud-webclient.war/
19:54:29,614 ERROR [URLDeploymentScanner] Incomplete Deployment listing:

--- MBeans waiting for other MBeans ---
ObjectName: jboss.j2ee:jar=crud-ejb.jar,name=EmployeeServiceLocalImpl,service=EJB3
  State: NOTYETINSTALLED
  I Depend On:
    persistence.units:unitName=myPersistence

--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: persistence.units:unitName=myPersistence
  State: NOTYETINSTALLED
  Depends On Me:
    jboss.j2ee:jar=crud-ejb.jar,name=EmployeeServiceLocalImpl,service=EJB3

no global naming o ejb não sobe. =/

B

Vou fazer duas perguntas bobas mas não custa conferir:

1 - Seu arquivo MySQL-ds.xml está no diretório /server/default/deploy do seu jboss ?
2 - Seu driver de comunicação com o banco de dados(mysql-connector.jar) está no diretório /server/default/lib ?

Abraços…

GabrielCardelli

Está tudo no meu projeto dentro do eclipse o MySQL-ds na raiz, e o jar no classpath.

GabrielCardelli

Está tudo no meu projeto dentro do eclipse o MySQL-ds na raiz, e o jar no classpath.

B

Então faz um teste colocando estes artefatos nos diretórios que te falei para ver se continua com o mesmo erro ou não…

Abraços…

GabrielCardelli

mesmo erro =/

B

Bom, vc vai ter que ir fazendo mais testes,erros assim são meio chatos de encontrar…

Lá no seu persistence.xml altere a tag:

para:

GabrielCardelli

vou fazendo uns testes aqui.

Sò que pintou uma duvida o @PersistenceContext no código que tem nesse tópico:

http://www.guj.com.br/posts/list/75823.java

E os outros que ja vi não configuram nenhum atributo e funcionanm por que devo configurar?

E em que momento eu mapeio minha classe?

Abraço.

B

A anotação @PersistenceContext não necessita de ter um atributo unitName desde que exista apenas uma unidade de persistência no persistence.xml … Por isso acho que vc tbm deve dar uma conferida no build do seu ejb.jar para ver se não esta fazendo mais de uma vez, limpar arquivos temp no container e faça tbm a alteração que eu falei na tag …

Criado 27 de fevereiro de 2010
Ultima resposta 28 de fev. de 2010
Respostas 15
Participantes 3