解决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

在这里插入图片描述
在这里插入图片描述
这样项目就能正常跑起来的,接下来就能愉快的玩耍了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值