[求助]关于整合JBoss和Hibernate的配置问题

按照网上的资料如下配置,但是还是有错,谁能帮帮我!

1。创建hiberate-ds.xml文件,我觉得这个文件主要用于创建cardiac_dbds数据源:


<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>cardiac_dbds</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/cardiac_db</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
</local-tx-datasource>
</datasources>

2。创建cardiac_ds.har(Jboss4自动识别),包括一个配置文件和一些hibernate mapping 文件。配置文件如下:



<server>
<mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.adminguide:name=CardiacSessionFactory">
<attribute name="DatasourceName">java:/cardiac_dbds</attribute>
<attribute name="Dialect">
org.hibernate.dialect.MySQLDialect
</attribute>
<attribute name="SessionFactoryName">
hibernate/SessionFactory
</attribute>
<attribute name="CacheProviderClass">
org.hibernate.cache.HashtableCacheProvider
</attribute>
<attribute name="ShowSqlEnabled">true</attribute>
</mbean>
</server>

启动Jboss,似乎一切正常。

然后在我的java代码里面如此调用:


InitialContext ctx = new InitialContext();
SessionFactoryImpl factory = (SessionFactoryImpl)ctx.lookup
("hibernate/SessionFactory");
Session session = factory.openSession();

出现空指针异常,factory为空。

谁知道哪出了问题吗?

JNDI名称应该是java:/cardiac_dbds吧?

java:/cardiac_dbds是datasource在jndi中的名字,不是sessionfactory的名字。

而我在java代码中是从jndi树上lookup sessionfactory的对象,所以我觉得应该还是hibernate/SessionFactory

而且我在启动JBoss时,后台有一条这样的信息:

[SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured

SessionFactoryObjectFactory是做啥用的?

没人知道吗?

I met a problem when lookuping SessionFactory object from jndi tree.

My environment is:
1. Hibernate 3.1.2
2. JBoss 4.0.4

My configuration is:
1. DataSource configuration:
<datasources>
<local-tx-datasource>
<jndi-name>cardiac_dbds</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/cardiac_db</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
</local-tx-datasource>
</datasources>
2. Deploy cardiac_ds.har on JBoss, cardiac_ds.har can be recognised by JBoss as *.jar, *.war and *.ear.

There are all hibernate hbm (mapping) files under com folder. And a configuration file named jboss-service.xml under META-INF which is defining Hibernate info in JBoss. Its content is:
<server>
<mbean code="org.jboss.hibernate.jmx.Hibernate" name="jboss.jca:service=HibernateFactory,name=CardiacSessionFactory">
<depends>jboss.jca:service=RARDeployer</depends>
<attribute name="DatasourceName">java:/cardiac_dbds</attribute>
<attribute name="Dialect">
org.hibernate.dialect.MySQLDialect
</attribute>
<attribute name="SessionFactoryName">
hibernate/SessionFactory
</attribute>
<attribute name="CacheProviderClass">
org.hibernate.cache.HashtableCacheProvider
</attribute>
<attribute name="ShowSqlEnabled">true</attribute>
</mbean>
</server>
3. JBoss startup info:
15:54:18,221 INFO [Environment] Hibernate 3.1.2
15:54:18,231 INFO [Environment] hibernate.properties not found
15:54:18,241 INFO [Environment] using CGLIB reflection optimizer
15:54:18,241 INFO [Environment] using JDK 1.4 java.sql.Timestamp handling
15:54:18,491 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TGroup.hbm.xml
15:54:18,692 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TGroup -> T_GROUP
15:54:18,782 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TGroupMailingList.hbm.xml
15:54:18,812 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TGroupMailingList -> T_GROUP_MAILING_LIST
15:54:19,012 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TGroupMailingListMember.hbm.xml
15:54:19,062 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TGroupMailingListMember -> T_GROUP_MAILING_LIST_MEMBER
15:54:19,062 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TGroupSslSetting.hbm.xml
15:54:19,082 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TGroupSslSetting -> T_GROUP_SSL_SETTING
15:54:19,082 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TMailingList.hbm.xml
15:54:19,102 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TMailingList -> T_MAILING_LIST
15:54:19,102 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TMailingListMember.hbm.xml
15:54:19,122 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TMailingListMember -> T_MAILING_LIST_MEMBER
15:54:19,122 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TSubsystem.hbm.xml
15:54:19,142 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TSubsystem -> T_SUBSYSTEM
15:54:19,142 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TSubsystemFeature.hbm.xml
15:54:19,162 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TSubsystemFeature -> T_SUBSYSTEM_FEATURE
15:54:19,162 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TSystem.hbm.xml
15:54:19,182 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TSystem -> T_SYSTEM
15:54:19,182 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TUser.hbm.xml
15:54:19,202 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TUser -> T_USER
15:54:19,202 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TUserGroup.hbm.xml
15:54:19,232 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TUserGroup -> T_USER_GROUP
15:54:19,232 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TUserGroupFeature.hbm.xml
15:54:19,272 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TUserGroupFeature -> T_USER_GROUP_FEATURE
15:54:19,272 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TUserSlSetting.hbm.xml
15:54:19,292 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TUserSlSetting -> T_USER_SL_SETTING
15:54:19,292 INFO [Configuration] Reading mappings from file: D:\work\Server\jboss-4.0.4-All\server\default\deploy\cardiac_ds.har\com\mot\iden\cardiac\tms\integration\data\TUserSslSetting.hbm.xml
15:54:19,313 INFO [HbmBinder] Mapping class: com.mot.iden.cardiac.tms.integration.data.TUserSslSetting -> T_USER_SSL_SETTING
15:54:19,313 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TGroup.TGroupMailingLists -> T_GROUP_MAILING_LIST
15:54:19,313 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TGroup.TUserGroups -> T_USER_GROUP
15:54:19,313 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TGroupMailingList.TGroupMailingListMembers -> T_GROUP_MAILING_LIST_MEMBER
15:54:19,313 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TMailingList.TMailingListMembers -> T_MAILING_LIST_MEMBER
15:54:19,313 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TSubsystem.TSubsystemFeatures -> T_SUBSYSTEM_FEATURE
15:54:19,313 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TSubsystemFeature.TUserSslSettings -> T_USER_SSL_SETTING
15:54:19,313 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TSystem.TUserSlSettings -> T_USER_SL_SETTING
15:54:19,323 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TSystem.TSubsystemFeatures -> T_SUBSYSTEM_FEATURE
15:54:19,323 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TSystem.TSubsystems -> T_SUBSYSTEM
15:54:19,323 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TUser.TGroupMailingListMembers -> T_GROUP_MAILING_LIST_MEMBER
15:54:19,323 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TUser.TUserSlSettings -> T_USER_SL_SETTING
15:54:19,323 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TUser.TMailingListMembers -> T_MAILING_LIST_MEMBER
15:54:19,323 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TUser.TUserGroups -> T_USER_GROUP
15:54:19,323 INFO [HbmBinder] Mapping collection: com.mot.iden.cardiac.tms.integration.data.TUser.TUserSslSettings -> T_USER_SSL_SETTING
15:54:19,973 INFO [NamingHelper] JNDI InitialContext properties:{}
15:54:19,983 INFO [DatasourceConnectionProvider] Using datasource: java:/cardiac_dbds
15:54:20,684 INFO [SettingsFactory] RDBMS: MySQL, version: 4.1.14-nt
15:54:20,684 INFO [SettingsFactory] JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-3.1.7 ( $Date: 2005/01/25 19:11:41 $, $Revision: 1.27.4.54 $ )
15:54:20,755 INFO [Dialect] Using dialect: org.hibernate.dialect.MySQLDialect
15:54:20,765 INFO [TransactionFactoryFactory] Transaction strategy: org.hibernate.transaction.JTATransactionFactory
15:54:20,765 INFO [NamingHelper] JNDI InitialContext properties:{}
15:54:20,765 INFO [TransactionManagerLookupFactory] instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
15:54:20,775 INFO [TransactionManagerLookupFactory] instantiated TransactionManagerLookup
15:54:20,775 INFO [TransactionManagerLookupFactory] instantiating TransactionManagerLookup: org.hibernate.transaction.JBossTransactionManagerLookup
15:54:20,775 INFO [TransactionManagerLookupFactory] instantiated TransactionManagerLookup
15:54:20,775 INFO [SettingsFactory] Automatic flush during beforeCompletion(): enabled
15:54:20,775 INFO [SettingsFactory] Automatic session close at end of transaction: enabled
15:54:20,775 INFO [SettingsFactory] JDBC batch size: 15
15:54:20,775 INFO [SettingsFactory] JDBC batch updates for versioned data: disabled
15:54:20,775 INFO [SettingsFactory] Scrollable result sets: enabled
15:54:20,775 INFO [SettingsFactory] JDBC3 getGeneratedKeys(): enabled
15:54:20,775 INFO [SettingsFactory] Connection release mode: after_statement
15:54:20,775 INFO [SettingsFactory] Maximum outer join fetch depth: 2
15:54:20,775 INFO [SettingsFactory] Default batch fetch size: 1
15:54:20,775 INFO [SettingsFactory] Generate SQL with comments: disabled
15:54:20,775 INFO [SettingsFactory] Order SQL updates by primary key: disabled
15:54:20,775 INFO [SettingsFactory] Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
15:54:20,795 INFO [ASTQueryTranslatorFactory] Using ASTQueryTranslatorFactory
15:54:20,795 INFO [SettingsFactory] Query language substitutions: {}
15:54:20,795 INFO [SettingsFactory] Second-level cache: enabled
15:54:20,795 INFO [SettingsFactory] Query cache: disabled
15:54:20,795 INFO [SettingsFactory] Cache provider: org.hibernate.cache.HashtableCacheProvider
15:54:20,805 INFO [SettingsFactory] Optimize cache for minimal puts: disabled
15:54:20,805 INFO [SettingsFactory] Structured second-level cache entries: disabled
15:54:20,875 INFO [SettingsFactory] Echoing all SQL to stdout
15:54:20,875 INFO [SettingsFactory] Statistics: disabled
15:54:20,875 INFO [SettingsFactory] Deleted entity synthetic identifier rollback: disabled
15:54:20,875 INFO [SettingsFactory] Default entity-mode: pojo
15:54:20,965 INFO [SessionFactoryImpl] building session factory
15:54:22,577 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
15:54:22,577 INFO [NamingHelper] JNDI InitialContext properties:{}
15:54:22,587 INFO [Hibernate] SessionFactory successfully built and bound into JNDI [hibernate/SessionFactory]
15:54:22,717 INFO [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=.../deploy/jmx-console.war/
15:54:23,549 INFO [Http11BaseProtocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-8080
15:54:24,009 INFO [ChannelSocket] JK: ajp13 listening on /0.0.0.0:8009
15:54:24,079 INFO [JkMain] Jk running ID=0 time=0/210 config=null
15:54:24,139 INFO [Server] JBoss (MX MicroKernel) [4.0.4RC1 (build: CVSTag=JBoss_4_0_4_RC1 date=200602071519)] Started in 1m:20s:378ms
Here, SessionFactoryObjectFactory hasn't been bound to jndi tree.

4. Java code to lookup SessionFactory from jndi tree.

InitialContext ctx = new InitialContext();
SessionFactoryImpl factory = (SessionFactoryImpl) ctx.lookup("hibernate/SessionFactory");
Session session = factory.openSession();
And an exception is thrown:
16:31:07,400 WARN [SessionFactoryObjectFactory] Not found: 48f989440a16c6a7010a16c6add90000
16:31:07,410 ERROR [STDERR] java.lang.NullPointerException
16:31:07,410 ERROR [STDERR] at com.mot.iden.cardiac.tms.integration.UserDAOImpl.loadUser(UserDAOImpl.java:126)
16:31:07,410 ERROR [STDERR] at com.mot.iden.cardiac.tms.business.UserManager.getUser(UserManager.java:252)
16:31:07,410 ERROR [STDERR] at com.mot.iden.cardiac.as.presentation.action.AuthenticateAction.execute(AuthenticateAction.java:123)
16:31:07,410 ERROR [STDERR] at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
16:31:07,410 ERROR [STDERR] at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
16:31:07,410 ERROR [STDERR] at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
16:31:07,410 ERROR [STDERR] at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
16:31:07,410 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
16:31:07,410 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
16:31:07,410 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
16:31:07,410 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
16:31:07,410 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
16:31:07,410 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
16:31:07,410 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
16:31:07,410 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
16:31:07,410 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
16:31:07,410 ERROR [STDERR] at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:54)
16:31:07,410 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:174)
16:31:07,420 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
16:31:07,420 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
16:31:07,420 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
16:31:07,420 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
16:31:07,420 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
16:31:07,420 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
16:31:07,420 ERROR [STDERR] at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
16:31:07,420 ERROR [STDERR] at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
16:31:07,420 ERROR [STDERR] at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
16:31:07,420 ERROR [STDERR] at java.lang.Thread.run(Unknown Source)
The reason is SessionFactoryObjectFactory cannot be founded, but I cannot find a way how to config SessionFactoryObjectFactory in JBoss or Hibernate documents.

Do you have any suggestion?

噢,你需要了解JBoss的MBean的JNDI名称,你配置的MBean名称是CardiacSessionFactory,那么估计应该是java:/CardiacSessionFactory这样调用。

反正你查阅一下JBoss 的MBean的JNDI相关资料,我估计你JNDI名称写错误了。

另外Hibernate本身有时也包no JNDI,但不是错误,所以不必在意。

> 噢,你需要了解JBoss的MBean的JNDI名称,你配置的MBean名?> 是CardiacSessionFactory,那么估计应该是java:/CardiacSes
> ionFactory这样调用。
>
> 反正你查阅一下JBoss
> 的MBean的JNDI相关资料,我估计你JNDI名称写错误了。
>
> 另外Hibernate本身有时也包no
> JNDI,但不是错误,所以不必在意。


JNDI名字没有错,我怀疑是不是就没有绑定成功啊?我如何确定在jboss中,sessionfactory已经被bind到jndi树上了?

testjive