解決Websphere8.5.5上使用jpa2.1報錯
阿新 • • 發佈:2018-11-06
解決Websphere8.5.5上使用jpa2.1報錯
1.新增兩個 jar包
hibernate-entitymanager-4.3.11.Final.jar //jpa2.1
portal-kernel-5.2.3.jar //用於在HibernatePersistenceProviderResolver類中判斷當前容器是否為tomcat
2. 在SessionFactory配置中,給hibernate properties配置中新增以下配置(注意,這兩個配置只能在webSphere用,如果跑在tomcat中需要把這兩個配置註釋掉,不然會報錯)
``` <prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.WebSphereExtendedJtaPlatform</prop> <prop key="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.WebSphereExtendedJTATransactionLookup</prop> ```
-
建立HibernatePersistenceProviderResolver類,並確保能被spring掃描到。
package cn.com.agree.aweb.hibernate.dao.support; import org.hibernate.jpa.HibernatePersistenceProvider; import org.springframework.context.annotation.Configuration; import com.liferay.portal.kernel.util.ServerDetector; import javax.annotation.PostConstruct; import javax.persistence.spi.PersistenceProvider; import javax.persistence.spi.PersistenceProviderResolver; import javax.persistence.spi.PersistenceProviderResolverHolder; import java.util.Collections; import java.util.List; /** * This allows to deploy upgraded JPA and Hibernate versions to Websphere 8.5.5.x servers. * Has been used successfully with JPA 2.1 and Hibernate 4.3.11 * * Mostly a copy of <a href="https://hibernate.atlassian.net/browse/JPA-4">https://hibernate.atlassian.net/browse/JPA-4</a> * Changes made to deploy in a Spring environment. * * To use: add a @DependsOn("hibernatePersistenceProviderResolver") annotation on a DatabaseConfig class */ @Configuration public class HibernatePersistenceProviderResolver implements PersistenceProviderResolver { private volatile PersistenceProvider persistenceProvider = new HibernatePersistenceProvider(); @Override public List<PersistenceProvider> getPersistenceProviders() { return Collections.singletonList(persistenceProvider); } @Override public void clearCachedProviders() { persistenceProvider = new HibernatePersistenceProvider(); } @PostConstruct public void register() { if(ServerDetector.isTomcat()){ return; } PersistenceProviderResolverHolder.setPersistenceProviderResolver(new HibernatePersistenceProviderResolver()); } }
-
應用打成war,部署到webSphere上
-
修改類載入順序為parent last