ejb3:Unable to build EntityManagerFactory

开发环境为:
jboss-5.1.0.GA
Microsoft SQL Server
sqljdbc4.jar

jndi.Properties:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=192.168.1.131:1099,192.168.1.170:1099
java.naming.factory.url.pkgs=org.jnp.interfaces

persistence.xml:
<persistence-unit name="octawave" transaction-type="[color=red]RESOURCE_LOCAL[/color]">
<jta-data-source>java:/sqlserverDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.jdbc.batch_size" value="10" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>

ReturnOrderOperatorBean:
@Stateful
@Remote(RtnOrderOperator.class)
public class ReturnOrderOperatorBean implements RtnOrderOperator,
java.io.Serializable {
private EntityManager getEntityManager() {
return EntityManagerHelper.getEntityManager();
}

@Remove
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void persist(com.octawave.oms.trade.entity.ReqOrderAction rtnoo) {
getEntityManager().persist(rtnoo);
}

因为EntityManagerFactory一直为空,所以会报Unable to build EntityManagerFactory
从而导致EntityManager为空,原因是persistence unit受Java EE事务(取值JTA)管理并与之集成 此属性在Java EE环境中的默认值是JTA(采用注解),而在Java SE环境中则为RESOURCE_LOCAL
而我的是java ee环境,所以设置的RESOURCE_LOCAL事务出错;使用JTA就没有问题了;
JTA 和RESOURCE_LOCAL 两种事务管理有多大区别呢,下回再研究下。

下面给出没有问题的:
persistence.xml:
<persistence-unit name="octawave" transaction-type="JTA">
<jta-data-source>java:/sqlserverDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.jdbc.batch_size" value="10" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>

ReturnOrderOperatorBean:
@Stateful
@Remote(RtnOrderOperator.class)
public class ReturnOrderOperatorBean implements RtnOrderOperator,
java.io.Serializable {
[color=red]@PersistenceContext
private EntityManager manager[/color];//此处采用注解的形式(java ee容器),用容器管理事务

@Remove
[color=red]@TransactionAttribute(TransactionAttributeType.REQUIRED)[/color]//此处采用注解的形式,用容器管理事务
public void persist(com.octawave.oms.trade.entity.ReqOrderAction rtnoo) {
manager.persist(rtnoo);
}

参考推荐:
http://www.coderanch.com/t/461345/ORM/java/Persistence-Unit-Unable-build-EntityManagerFactory
http://topic.csdn.net/u/20070809/11/0d9a306d-8dec-4013-8ab7-e79d6dd73da6.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值