
2008-7-2 16:54
mymyitpub
Hibernate + JTA 的应用问题?
各位大虾:你们好!
向你们请教一个问题,问题如下:
Java应用程序(非web程序,即Java程序不是运行在Tomcat/Jboss等服务器上的)+ Hibernate + JTA实现跨数据库操作的问题,Hibernate配置如下:
文件a.hibernate.cfg.xml配置如下:
<hibernate-configuration>
<session-factory >
<property name="connection.url">jdbc:mysql://localhost:3306/database01</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="myeclipse.connection.profile">native mysql</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="show_sql">false</property>
<property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
<property name="jta.UserTransaction">java:comp/UserTransaction</property>
<mapping resource="Bbean.hbm.xml" />
</session-factory>
</hibernate-configuration>
文件b.hibernate.cfg.xml配置如下:
<hibernate-configuration>
<session-factory >
<property name="connection.url">jdbc:mysql://localhost:3306/database02</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="myeclipse.connection.profile">native mysql</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="show_sql">false</property>
<property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
<property name="jta.UserTransaction">java:comp/UserTransaction</property>
<mapping resource="Abean.hbm.xml" />
</session-factory>
</hibernate-configuration>
现在遇到的问题是:
<1>.上述配置是否可行? 若配置不正确,那么正确配置方式是?
<2>.用如上配置,业务代码如下:
Session abeanSession = AbeanSessionFactory.getSession();
Session bbeanSession = BbeanSessionFactory.getSession();
UserTransaction userTransaction = null;
try {
userTransaction = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
userTransaction.begin();
//save Abean
Abean abean = new Abean();
abean.setName("my_test");
abean.setSex(0);
abean = abeanDAO.save(abean, abeanSession);
//save Bbean
Bbean bbean = new Bbean();
control.setAbeanid(abean.getId());
control.setState("Active");
bbeanDAO.save(bbean, bbeanSession);
userTransaction.commit();
} catch (Exception e) {
logger.error(e);
...
}
抛出异常是:
WARN - Could not bind factory to JNDI
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getNameParser(Unknown Source)
at org.hibernate.util.NamingHelper.bind(NamingHelper.java:52)
at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:90)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:291)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
该怎么解决,多谢你不吝指教!!
[[i] 本帖最后由 mymyitpub 于 2008-7-3 10:09 编辑 [/i]]
2008-7-2 17:36
justforregister
首先要知道你要干什么,
然后你看自己在干什么
2008-7-2 17:37
justforregister
userTransaction = (UserTransaction)new InitialContext().lookup("java:comp/UserTransaction");
知道自己在干什么吗?
2008-7-2 17:38
justforregister
不知道自己在干什么
出了错, 至少要先google
WARN - Could not bind factory to JNDI
2008-7-2 17:49
justforregister
先google几篇文章, 看看别人是怎么做hibernate jta的
2008-7-3 09:55
mymyitpub
怎么实现Hibernate+JTA?
偶的目的是:[color=Blue]怎么让java程序+Hibernate+JTA 操作多个数据库,[/color] [color=Red]java程序不是web应用程序[/color],[color=Blue]不需要运行在web服务器(tomcat/jboss等)上的![/color]
在googleaidu等网上都找了下,几乎都是
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.datasource">java:comp/env/jdbc/db</property>
<property name="show_sql">false</property>
<property name="transaction.factory_class">net.sf.hibernate.transaction.JTATransactionFactory</property>
<property name="jta.UserTransaction">javax.transaction.UserTransaction</property>
...Mpping文件
<mapping resource="xxx.hbm.xml" />
</session-factory>
</hibernate-configuration>
web的一些应用(java web 程序),而我的不是java web程序,在hibernate.cfg.xml文件中无法配置
<property name="connection.datasource">java:comp/env/jdbc/db</property> 所就我改为:
<property name="connection.url">jdbc:mysql://localhost:3306/db01</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="myeclipse.connection.profile">native mysql</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="show_sql">false</property>
<property name="transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
<property name="jta.UserTransaction">javax.transaction.UserTransaction</property>
<mapping resource="Abean.hbm.xml" />
这种形式,况且也不知这种配置方式是否正确?
多谢您的帮助与指教!
[[i] 本帖最后由 mymyitpub 于 2008-7-3 10:05 编辑 [/i]]
2008-7-3 15:12
mymyitpub
回复 #6 mymyitpub 的帖子
顶~
页:
[1]

Powered by ITPUB论坛