【SQL开源代码栏目提醒】:网学会员在SQL开源代码频道为大家收集整理了“EJB实体Bean动态数据源绑定 - 技术总结“提供大家参考,希望对大家有所帮助!
EJB实体Bean动态数据源绑定 中Web应用和数据源。
在server.xml中加入以下的配置描述。
例程1配置web应用 Context path/hibernatedocBasehibernatedebug0reloadabletruecrossContexttrue Resource namejdbc/hibernateauthContainertypejavax.
sql.DataSource/ ResourceParams namejdbc/hibernate parameter name factory/name value org.apache.commons.dbcp.BasicDataSourceFactory/value /parameter parameter name driverClassName/name value org.gjt.mm.mysql.Driver/value /parameter parameter name url/name value jdbcmysql///test/value /parameter parameter name username/name value root/value /parameter parameter name password/name value/value /parameter parameter name maxActive/n ame value 20/value /parameter parameter name maxIdle/name value 10/value /parameter parameter name maxWait/name value-1/value /parameter /ResourceParams /Context 在这里配置了一个名为hibernate的Web应用并且配置了一个数据源数据源的JNDI名称为jdbc/hibernate。
您需要根据情况修改数据源的链接属性。
6、下一步就是书写Hibernate的配置描述符。
可以使用XML的配置描述也可以使用基于属性的配置描述。
在这里使用基于XML的配置描述。
在hibernateWEB-INFclasses目录下新建一个hibernate.cfg.xml文件。
然后加入例程2所示的内容。
DOCTYPE hibernate-configuration PUBLIC-//Hibernate/Hibernate Configuration DTD//EN hibernate-configuration session-factory property namehibernate.connection.datasourcejava/myDataSource/property property nameconnection.datasourcejavacomp/env/jdbc/hibernate/property property nameshow_sqlfalse/property property namedialectnet.sf.hibernate.dialect.MySQLDialect/property//对应数据库方言 --Mapping files-- /session-factory /hibernate-configuration 注意connection.datasource属性必须和server.xml中配置的数据源的属性一样。
如果不是使用MYSQL那么需要更改dialect属性。
Jndi连接 必要条件 将mysql-connector-java-3.1.10-bin.jar放到tomcat目录commons/lib下面。
这样当tomcat启动时就可以加载相应的驱动程序。
第一、要求web容器tomcat里面的conf目录下面的servlet里面配置节点 在server.xml中配置全局数据源 在GlobalNamingResources下面增加 Resource namejdbc/testtypejavax.
sql.DataSourceusernamerootpassword123456driverClassNamecom.mysql.jdbc.DrivermaxIdle10maxWait50urljdbcmysql//localhost3306/java308maxActive20/ 第二、、要求web容器tomcat里面的conf目录下面的 在context.xml中为Context增加子元素 ResourceLink globaljdbc/testnamejdbc/testtypejavax.
sql.DataSource/ 再配置好的context.xml拷入项目中WebRoot下的META-INF中. 第三、在hibernate.cfg.xml配置文件中配置如下 第四、相关java
代码如下 page importjavax.naming.Context page importjavax.
sql.DataSource page importjava.
sql.Connection page importjavax.naming.InitialContext Context contextnew InitialContext DataSource dataSourceDataSourcecontext.lookupjavacomp/env/jdbc/test Connection conndataSource.getConnection Hibernate的JNDI名称绑定分析 Hibernate的JNDI名称绑定是在net.sf.hibernate.impl.SessionFactoryObjectFactory程序里面实现的我来分析一下Hibernate的绑定JNDI的过程 我们获得SessionFactory一般是这样写
代码 Configuration confnew Configuration。
addClassCat.class SessionFactory sfconf.buildSessionFactory 首先是new Configuration创建一个Configuration在这个构造器里面进行配置文件hibernate.properties的读取工作然后保存到一个Properties对象里面去和JNDI相关的是这个属性 hibernate.session_factory_name hibernate/session_factory 接着调用buildSessionFactory方法该方法检查一下配置信息然后调用SessionFactoryImpl的一个构造器。
在构造器里面注意下面两行
代码 nameproperties.getPropertyEnvironment.SESSION_FACTORY_NAME SessionFactoryObjectFactory.addInstanceuuidnamethisproperties 调用了SessionFactoryObjectFactory的addInstance方法并且把自身SessionFactory的实例作为参数传递。
最后在addInstance方法可以看到如下
代码 Context ctxNamingHelper.getInitialContextproperties NamingHelper.bindctxnameinstance instance就是SessionFactory的实例通过读源
代码可以清楚的看到Hibernate是在conf.buildSessionFactory的时候通过一系列类方法调用把创建的SessionFactory实例绑定到配置文件hibernate.properties中hibernate.session_factory_name属性指定的名称上的因此可见Hibernate自身是具有JNDI的动态绑定功能的。
但是Hibernate需要获得一个SessionFactory实例用于绑定而这个SessionFactory实例需要我们写
代码进行预先创建并且必须保证该过程要在所有其它要从JNDI上获得SessionFactory实例的程序之前完成。
因此对于任何App Server来说我们都不必去管JNDI名称的绑定过程只需要保证预先创建一个SessionFactory实例出来就够了剩下的工作Hibernate会做的。
那么如何确保预创建SessionFactory实例呢如果是Servlet可以配置一个初始化的Servlet只要把 Configuration confnew Configuration。
addClassCat.class SessionFactory sfconf.buildSessionFactory这样的
代码加进去就可以了。
如果是包含EJB的的复杂的J2EE应用可能需要依靠App Server的功能来保证预创建SessionFactory实例。
作者MIDI发表于2010-12-05 1123原文链接 评论0查看评论发表评论 最新新闻 ·报告称高通和Android联盟将成下个Wintel2010-12-05 1244 ·盘点虎年IT业十大糗事苹果天线门居首2010-12-05 1210 ·Google TV和Nexus One跻身Business Insider的2010商业败笔排行榜2010-12-05 1207 ·Groupon拒绝Google收购的后续猜想2010-12-05 1206 ·谷歌中国地图也开始测试全新UI2010-12-05 1204 编辑推荐博客无双活动写博客、攒园豆、赢大奖 网站导航博客园首页我的园子新闻闪存小组博问知识库
上一篇:
java comp env获取数据源的语法
下一篇:
法律专业开题报告范文