Saltar al contenido

Ningún proveedor de durabilidad para EntityManager llamado foo – ¡AYUDA!

Un Usuario hizo la siguiente pregunta

Hola:)

busqué en foros de todo tipo, ¡pero no encontré nada!

1. Descargué SAPNW CE7.1 SP1 J2EE solamente.

2. Aplicación WD desarrollada, funciona perfectamente.

3. Intentando probar JPA -> encuentra el mismo error una y otra vez ….

=> Sin proveedor de durabilidad para EntityManager llamado XXX

Lo que he hecho hasta ahora:

3.1 Enlace DB creado con MAXDB:

Servidor: CE1

Esquema: SUPERDBA

Usuario: superdba

Contraseña: ****

3.2 Entidades creadas, una 🙂

3.3 Java Persistence contribuyó al proyecto.

3.4 duration.xml creado:


<?xml version="1.0" encoding="UTF-8"?>
<persistence>
	<persistence-unit name="foo">
		<provider>javax.persistence.spi.PersistenceProvider</provider>
		<jta-data-source>superdba_test</jta-data-source>
		<class>mycom.demo.entities.WelcomeTest</class>
		<properties>
			<property
				name="com.sap.engine.services.orpersistence.generator.versio
ntablename" value="WELCOME_VERSIONGEN" />
		</properties>
	</persistence-unit>
</persistence>

3.5 data-sources.xml creado así:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data-sources SYSTEM "data-sources.dtd" >
<data-sources>
  <data-source>
    <data-source-name>superdba</data-source-name>
    <driver-name>SYSTEM_DRIVER</driver-name>
    <!--<sql-engine>native_sql</sql-engine>-->
    <sql-engine>vendor_sql</sql-engine>
    <jdbc-1.x>
      <driver-class-name>com.sap.dbtech.jdbc.DriverSapDB</driver-class-name>
      <url>jdbc:sapdb://mungo01/CE1</url>
      <user-name>superdba</user-name>
      <password>****</password>
    </jdbc-1.x>
  </data-source>
</data-sources>

3.6 creación de data-source-aliases.xml

<?xml version="1.0" encoding="UTF-8"?>
<data-source-aliases>
<aliases>
<data-source-name>superdba</data-source-name>
<alias>superdba_test</alias>
</aliases>
</data-source-aliases>

3.7 Ejecutando perseverancia:

...
StringBuffer queryTxt = new StringBuffer("SELECT * FROM WelcomeTest");
EntityManager em = null;
EntityManagerFactory emf = Persistence.createEntityManagerFactory("foo");
em = emf.createEntityManager();

Query query = em.createQuery(queryTxt.toString());
...

Estoy desesperado en este punto. ¡Así que cualquier idea es bienvenida! 🙂

buena voluntad

Simón 🙂

4 respuestas

  • Ex miembro

    Hola simon

    no está utilizando EJB: por eso las notas no funcionan. La especificación EJB 3 establece que deben recibir soporte tanto en el contenedor EJB como en el contenedor web. WD no es un contenedor estándar, es un contenedor patentado.

    Creo que el contenedor WD ignora las descripciones persistence.xml, data -ources.xml y data-source-aliases.xml. ¿Por qué no separar la capa de durabilidad y la capa de presentación?

  • Ex miembro

    ¡Hola, Simon!

    Para el entorno Java EE, creo que sería una mejor idea si obtiene el ejemplo de Entity Manager por inyección de dependencia:

    @PersistenceUnit
    EntityManagerFactory emf;
    EntityManager em = emf.createEntityManager();
    

    Puede ver los documentos oficiales de NW CE 7.1 SP1 en el portal de ayuda de SAP:

    http://help.sap.com/saphelp_nwce10/helpdata/en/45/0029b3515224dee10000000a114a6b/frameset.htm

    PD: No estoy seguro de si este es el problema exacto que le hizo desesperarse, pero creo que la forma en que inició Entity Manager es más relevante para el entorno Java SE.

    ¡Espero que esto ayude!

    Sobre,

    Yordan

  • Ex miembro

    Hola simon

    Tengo una pregunta sobre el punto 3.7: ¿Este código se ejecuta desde un contenedor EJB? Si esto es cierto, ¿por qué no usar una inyección de dependencia para inyectar el EntityManager?

    ¿Has mirado en el visor hueco?

  • Hola simon

    deberías etiquetar elimine persistence.xml.

    El proveedor de durabilidad de SAP está seleccionado de forma predeterminada. Con la etiqueta del proveedor, puede aconsejar al contenedor JPA que utilice un proveedor de durabilidad alternativo (es decir, implementación de JPA) que debería incluirse con la aplicación. Además, “javax.persistence.spi.PersistenceProvider” es solo una interfaz abstracta, por lo que no se puede cargar.

    Espero que esto te inspire aún más.

    Todo lo mejor,

    Adrian