WebSphere8.5.5部署时jpa2.1报错解决方案
网上很多资料上只修改WebSphere的ClassLoader Order为parent last,是不行的。下面是可行的解决方案。
加入依赖包
hibernate-entitymanager-4.3.11.Final
portal-kernel-5.2.3 //该包只是用于判断当前web容器是否为tomcat
HibernatePersistenceProviderResolver
创建类HibernatePersistenceProviderResolver,并确保该类能被spring扫描到。
@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());
}
}
在sessionFactory的配置中增加hibernate properities配置
注意,下面这两个配置只在websphere部署下使用,如果是其他容器部署,注释掉
<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>
把应用打成war包上传到websphere
修改websphere服务器上部署应用的classloader order为parent last
这样项目就能正常跑起来的,接下来就能愉快的玩耍了。