2011-11-10 1 views
6

Dobbiamo rinominare persistence.xml per ingannare WebSphere 7 a non utilizzare il suo built-in OpenJPA.configurare Hibernate per utilizzare un persistence.xml rinominato

E 'abbastanza facile da fare quando si utilizza Primavera, basta incaricare la fabbrica di un'entità responsabile di utilizzare un'altra posizione per persistence.xml:

<property name="persistenceXmlLocation" value="META-INF/persistence-xxx.xml"/> 

ma ora vogliamo usare pianura Hibernate/JPA senza molla e non è stato possibile trovare alcun modo per specificare il percorso persistence.xml alternativo.

JPA2 spec non dice nulla al riguardo ...

Degli indizi? È possibile istruire Hibernate per utilizzare un persistence.xml rinominato?

======

sembra che non sia possibile fare Hibernate leggere un ribattezzata persistence.xml file. E non è necessario nel mio caso.

risposta

3

Per quanto ne so, non è possibile modificare la posizione del file persistence.xml.

anche dare un'occhiata a questo documento: Alternate JPA Providers in WebSphere Application Server, sembra che si dovrebbe essere in grado di usare Hibernate come provider JPA specificando nel file persistence.xml, e incorporando i vasi richiesti nell'applicazione.

Assicurarsi che il persistence.xml è specificare Hibernate come provider JPA:

<persistence> 
    <persistence-unit name="myapp"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

Si dovrebbe anche essere in grado di raggiungere questo obiettivo con la creazione di una libreria condivisa e usarlo per configurare WebSphere per utilizzare un provider di persistenza alternativo. Qui potete trovare come farlo: Configuring the Java Persistence API (JPA) default persistence provider

EDIT dato le informazioni nei commenti a questa risposta, sembra che il problema può essere risolto con l'aggiunta di queste proprietà in persistence.xml, come indicato in questo post Websphere EntityManagerFactory creation problem:

<property name="hibernate.transaction.manager_lookup_class" 
value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup" /> 

<property name="hibernate.transaction.factory_class" 
value="org.hibernate.transaction.CMTTransactionFactory" /> 

Questa stessa informazione è anche disponibile nei provider JPA alternativi nel documento di WebSphere Application Server.

+0

Grazie! Ciò comporterà procedure di installazione aggiuntive ogni volta che installeremo l'applicazione, scrivendo un'istruzione ecc. Ma se non troviamo un altro modo e questa è l'unica opzione - dovremo farlo ... –

+0

Inoltre, prendi un guarda questo documento: [Provider JPA alternativi in ​​WebSphere Application Server] (http: ///www.ibm.com/developerworks/mydeveloperworks/wikis/form/anonymous/api/library/53181ccd-bcd4-431f-b968-0b5f6d46d652/ documento/192a432b-28bb-4080-b037-345e5d83da76/attacco/61e74f67-1d60-4120-ba25-ad7264c9f4f6/media/AlternateJPAProviders_TestReport.pdf). Sembra che dovresti essere in grado di utilizzare la sospensione specificando il 'provider' in persistence.xml e incorporando i jars richiesti nella tua applicazione.Vedi la mia modifica sulla risposta. –

+0

Xavi, abbiamo specificato il provider ... ma ha provocato solo 'Il server non può creare un factory EntityManagerFactory per l'unità persistente xxx dal provider org.hibernate.ejb.HibernatePersistence in jar: file:/C:/IBM/WebSphere /wp_profile/installedApps/XXX/xxx-ear.ear/xxx-ejb.jar!/ module. Potrebbe trattarsi di un problema a parte, ovviamente ... –

0

il persistence.xml deve esistere in una directory META-INF, in genere in un file jar contenente le classi di entità. Quello che faccio è che ho l'entità clase in un progetto separato in eclipse, con una directory META-INF che contiene il persistence.xml, pacchetto questo un file jar e includerlo nelle dipendenze del progetto delle applicazioni (ad esempio WEB-INF/lib), o, distribuirlo direttamente al server dell'app.