请教Robbin一个Hibernate和EJB协作的问题

03-09-10 gaoyanbing
我在Weblogic8.1启动的时候将SessionFactory绑定到了JNDI上去。所有的持久化类及映射文件都打到一个包里HibernateCAT.jar。将该jar添加到Weblogic的启动文件的CLASSPATH上去。在一个EJB中,我按如下方式调用Hibernate:

SessionFactory sessionFactory;

Session session;

Transaction transaction;

try

{

//获取Session工厂

Context ctx = new InitialContext();

sessionFactory = (SessionFactoryImpl) ctx.lookup("hibernate");

//启动事务

session = sessionFactory.openSession();

transaction = session.beginTransaction();

}catch(Exception e)

{

System.out.println("启动事务的时候出错!");

e.printStackTrace();

return null;

}

//下面根据该JVTSession实现管理的值对象来判断,并分别调用Hibernate持久化框架的数据

//记录添加实现来完成记录的创建

if(managedEntityValue instanceof OrderBaseValue)

{

//to do...

OrderBase orderBase = new OrderBase();

OrderBaseValue orderValue = (OrderBaseValue)managedEntityValue;

orderBase.setId(orderValue.getOrderID());

orderBase.setName(orderValue.getName());

orderBase.setType(orderValue.getType());

orderBase.setCustid(orderValue.getCustID());

try

{

//开始添加记录

session.save(orderBase);

//提交并结束事务

transaction.commit();

}catch(Exception e)

{

try

{

transaction.rollback();

}catch(HibernateException he)

{

System.out.println("回滚事务出错!");

}

System.out.println("提交事务出错!");

e.printStackTrace() ;

}

}

该EJB作为一个独立的jar部署到Weblogic上。

编写一个测试该EJB的客户端运行出现如下错误:

net.sf.hibernate.MappingException: No persister for: com.huawei.ibss.po.OrderBas

e

at net.sf.hibernate.impl.SessionFactoryImpl.getPersister(SessionFactoryI

mpl.java:426)

at net.sf.hibernate.impl.SessionImpl.getPersister(SessionImpl.java:2248)

at net.sf.hibernate.impl.SessionImpl.getPersister(SessionImpl.java:2255)

at net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:601)

at com.huawei.ibss.ordermsg.OrderMsgJVTSessionBean.createManagedEntityBy

Value(OrderMsgJVTSessionBean.java:114)

at com.huawei.ibss.ordermsg.OrderMsgJVTSession_isibbm_EOImpl.createManag

edEntityByValue(OrderMsgJVTSession_isibbm_EOImpl.java:154)

at com.huawei.ibss.ordermsg.OrderMsgJVTSession_isibbm_EOImpl_WLSkel.invo

ke(Unknown Source)

at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:466)

at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerR

ef.java:108)

at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:409)

at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate

dSubject

1
robbin
2003-09-10 18:34
你提供的信息不足,判断不出是哪里的错误,单纯看error message,你那个持久对象找不到ClassPersister类,应该是hbm配置不对。

robbin
2003-09-10 18:35
另外在EJB里面应该让容器来管理事务,不要写任何Hibernate事务控制代码。

gaoyanbing
2003-09-10 22:41
首先非常感谢Robbin的热心!!

我建立我两个持久类Cat和OrderBase。都在Weblogic启动的时候填充到SessionFactory里去了。用的是在你的站点看到的绑定SessionFactory到Weblogic的JNDI的方法。http://www.jdon.com/jive/article.jsp?forum=16&thread=9188:

Configuration conf = new Configuration().addClass(Cat.class).addClass(OrderBase.class); SessionFactory sf = conf.buildSessionFactory();

Weblogic启动的时候提示绑定成功。两个持久类也分别配置成功。

Hibernate的参考手册说如果用CMP,就无需事务处理。但是如果我用BMP,是否事务就是必须的?

robbin
2003-09-10 22:58
可能你的客户端代码写的不对。

BMP你就不会用容器管理事务了?

猜你喜欢
2Go 1 2 下一页