operaciones how getentitymanager example entitymanagerfactory con java jpa jboss

java - how - operaciones con jpa



Cómo mapear jpa datasources en WildFly? (0)

Tengo una aplicación EJB 3.1 con JPA, el bean @Stateless tiene un EntityManager y persistence.xml está configurado para usar java: comp / env / jf / demo / ds JNDI para DataSource.

En ejb-jar.xml, he declarado que mi EJB necesita el jf / demo / ds y en el descriptor de despliegue de ibm asigné jf / demo / ds al nombre JNDI real del DataSource. Esto funciona en WebSphere, pero también necesito hacerlo funcionar en WildFly 10 / JBoss EAP 7.

He encontrado algunos ejemplos con el archivo de mapeo jboss.xml, pero WildFly requiere un jboss-ejb3.xml y no puedo encontrar ningún ejemplo que funcione con la asignación de DataSource.

Mi EJB:

@Stateless public class CartPersistence extends PersistenceBean { @PersistenceContext(unitName = "jf-demo-persistence") protected EntityManager _em; ... }

persistence.xml

<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/persistence" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="jf-demo-persistence"> <jta-data-source>java:comp/env/jf/demo/ds</jta-data-source> <class>factory.jf.demo.persistence.CartEntity</class> <class>factory.jf.demo.persistence.ShopEntity</class> </persistence-unit> </persistence>

ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" version="3.1" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd"> <module-name>jf-demo-persistence</module-name> <enterprise-beans> <session> <ejb-name>CartPersistence</ejb-name> <resource-ref> <res-ref-name>jf/demo/ds</res-ref-name> <res-type>javax.sql.DataSource</res-type> </resource-ref> </session> </enterprise-beans> </ejb-jar>

ibm-ejb-jar-bnd.xml (solo para WAS)

<?xml version="1.0" encoding="UTF-8"?> <ejb-jar-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" version="1.0"> <session name="CartPersistence"> <resource-ref name="jf/demo/ds" binding-name="jf/ds"/> </session> </ejb-jar-bnd>

jboss-ejb3.xml (no funciona, la etiqueta no está presente en el esquema)

<?xml version="1.0" encoding="UTF-8"?> <jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:iiop="urn:iiop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd urn:iiop jboss-ejb-iiop_1_0.xsd" version="3.1" impl-version="2.0"> <enterprise-beans> <session> <ejb-name>CartPersistence</ejb-name> <resource-ref> <res-ref-name>jf/demo/ds</res-ref-name> <jndi-name>java:/jf/ds</jndi-name> </resource-ref> </session> </enterprise-beans> </jboss:ejb-jar>

standalone.xml

<subsystem xmlns="urn:jboss:domain:datasources:4.0"> <datasources> <datasource jndi-name="java:/jf/ds" pool-name="JfDS"> <connection-url>jdbc:oracle:thin:@//****/****</connection-url> <driver>oracle</driver> <security> <user-name>****</user-name> <password>****</password> </security> </datasource>

Cuando se inicia WildFly, aparece este error en la implementación de la aplicación:

09:27:03,550 ERROR [org.jboss.as.controller.management-operation] (DeploymentScanner-threads - 1) WFLYCTL0013: Operation ("deploy") failed - address: ([("deployment" => "jf-demo-web.war")]) - failure description: { "WFLYCTL0412: Required services that are not installed:" => ["jboss.naming.context.java.module.jf-demo-web.jf-demo-web.env.jf.demo.ds"], "WFLYCTL0180: Services with missing/unavailable dependencies" => [ "jboss.persistenceunit./"jf-demo-web.war#jf-demo-persistence/".__FIRST_PHASE__ is missing [jboss.naming.context.java.module.jf-demo-web.jf-demo-web.env.jf.demo.ds]", "jboss.persistenceunit./"jf-demo-web.war#jf-demo-persistence/" is missing [jboss.naming.context.java.module.jf-demo-web.jf-demo-web.env.jf.demo.ds]" ] }