JBSEAM自带的例子seamSpace从JBoss AS+Hibernate移到Geronimo+OpenJPA上的总结

本文详细介绍了将SeamSpace项目从JBoss移植到Geronimo并集成OpenJpa的过程,包括JNDI配置变更、数据源定义调整及JPQL语句规范化等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

seamSpace是Seam自带的一个演示Seam的安全模块的一个demo,里面用到了好多安全相关的操作,由于项目框架选择的原因,想把Seam和Geronimo、OpenJpa集成起来。下面就来看看集成他们的具体步骤。

1.JBoss到Geronimo的移植。

①JNDI的变更:使用JBoss服务器时,有很多默认的配置,但Geronimo和JBoss的默认的JNDI配置是不一样的,工程中的EJB BEAN、数据源以及Seam本身的一些组件,都需要显式定义它们的JNDI。
②去除JBoss的一些专用配置,并添加Geronimo的一些专用配置
③数据源定义配置移到persistent.xml文件中

2.Hibernate到OpenJpa

①修改persistent.xml中的persistent provider为OpenJpa
②在component.xml中添加org.jboss.seam.persistence.persistenceProvider的定义,默认是Hibernate,需要新建一个OpenJpaPersistenceProvider,如下

public class OpenJpaPersistenceProvider extends PersistenceProvider {
Log log = Logging.getLog(OpenJpaPersistenceProvider.class);

@Override
public void setFlushModeManual(EntityManager entityManager) {
// see also https://jira.jboss.org/jira/browse/JBSEAM-3030
log.warn("setFlushModeManual is not supported by OpenJPA");
}
}
3.seamSpace的移植

①修改seam使用的JNDI

 <core:init debug="true" jndi-pattern="java:comp/env/#{ejbName}Local"/>

②规范化seam安全框架里的JPQL语句,以及seamSpace里的JPQL语句
③修改所有的使用:member作为命名参数的地方,把member改为其他字符,member是Openjpa的一个关键字。
④对通过entityManager查询List结果需进行操作的,需把list拷贝一个出来再做操作,OpenJpa不让对他查询出的结果进行类似remove、sort的操作,不过这样可能导致list下的某些对象不能加载

public List<String> listRoles()
{
return new
java.util.LinkedList( lookupEntityManager().createQuery(
"select r." + roleNameProperty.getName() + " from " + roleClass.getName() + " r").getResultList());
}

⑤ drl里相关的实体对象的加载方式修改为fetch = FetchType.EAGER

4.总结

总体上移植的还比较顺利,可能SEAM与Hibernate耦合的比较深,Seam需要它的一些jar包,另外就是OpenJpa现在还很不成熟,好多地方会莫名的出点错,版本间的差别也比较大。这个还需大家多多测测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值