ITPUB论坛 » Java web开发及框架技术 » Hibernate + JTA 的应用问题?
新一届的微软MVP评选已经开始,欢迎各位推荐!
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论坛