2011-08-24 14 views
5

No quiero utilizar el plugin jpa de Websphere 7 incorporado, sino una aplicación WEB-INF/lib/open-jpa 2 y un proveedor de persistencia patentado. No puedo instalar el paquete de características OSGI y JPA 2 para Websphere.websphere 7 y (basado en aplicaciones) open-jpa 2

Originalmente, estaba obteniendo un error de análisis de sax simplemente tratando de cargar el persistence.xml (versión = "2" no compatible). El error fue lanzado por una clase en open-jpa 1.2.3. Cuando ejecuto websphere/appserver/bin/wsjpaversion.bat, se muestra el archivo jar open-jpa 1.2.3. Por defecto anula el jar abierto-jpa 2 en la aplicación. Creé una biblioteca compartida que contiene el jar abierto-jpa 2 con esta opción de configuración marcada: 'Usar un cargador de clases aislado para esta biblioteca compartida'. Configuré el cargador de clases de mi aplicación para cargar el último padre y le asigné el nuevo recurso de biblioteca compartida. El error 'versión 2' se ha ido, pero hay otro problema. Cuando intento para inicializar un EntityManager consigo un error:

Caused by: javax.persistence.PersistenceException: Failed to load provider from META-INF/services 
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getPersistenceProviders(PersistenceProviderResolverHolder.java:121) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:91) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:200) 
    ... 2 more 
Caused by: java.lang.ClassCastException: com.ibm.websphere.persistence.PersistenceProviderImpl incompatible with javax.persistence.spi.PersistenceProvider 
    at javax.persistence.spi.PersistenceProviderResolverHolder$DefaultPersistenceProviderResolver.getPersistenceProviders(PersistenceProviderResolverHolder.java:110) 
    ... 11 more 

Un detalle más: dentro de la persistence.xml, el elemento de proveedor se establece en las PersistenceProviderImpl propiedad no es el proveedor de persistencia predeterminado Websphere. Entonces, ¿de dónde viene el valor predeterminado de esta websphere y cómo lo evito? (Otra nota importante: cuando quito persistence.xml por completo, me sale el mismo error)

Gracias

+1

no estoy seguro si esto ayudaría, pero puede cambiar la política del cargador de clases a PARENT_LAST (no se recomienda como predeterminado, pero si se ve obligado a hacerlo) –

+0

Tengo el mismo problema. Alguna solución? –

Respuesta

4

sin instalar el paquete de características, que está luchando una batalla perdida. Si bien es posible conectar su propia implementación JPA , no es posible hacer eso con JPA API — modo fue de 7, te ata a la versión 1.0 de la APP (véase, por ejemplo, here cómo se hace esto — ningún malabarismo de política de cargador de clases cambiará eso, aunque al principio parece tentador).

+0

Tienes razón, no valía la pena. Websphere 7 tiene jpa 1 también entrelazado. Creo que es posible si crea su propia resolución de proveedor de persistencia y excluye el proveedor de persistencia websphere predeterminado que se carga desde classpath, pero para mí no valió la pena. –

+2

@MorganDowell Esta es la razón principal por la cual nuestra empresa se apega a JPA 1.0, incluso en las nuevas aplicaciones, ya que nuestros servidores alojan muchas aplicaciones, viejas y nuevas al mismo tiempo, tendremos que configurar grupos de servidores completamente diferentes solo para aplicaciones que usan JPA 2, que no es factible por razones financieras. – MaDa

Cuestiones relacionadas