服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

weblogic中将sessionfactory配置为jndi


  为了更方便的在编写程序的过程中运用hibernate并且在多个应用程序中共享sessionfactory,将生成的sessionfactory配置为jndi并且在服务器启动的时候将其配置为自动运行是个不错的方法,这样在程序中就可以通过“查找”的方式直接获取factory的引用,步骤如下:
  
  1. 如果单单是为了将sessionfactory配置为jndi,方法很简单,只要在hibernate.cfg.xml文件中配置一下要绑定到jndi的名字即可,格式如下:
  

  <hibernate-configuration>
  <session-factory name="hibernate.session_factory">
  <property name="connection.datasource">jdbc.name</property>
  ……………………
  /session-factory>
  </hibernate-configuration>
  
  其中name="hibernate.session_factory"指定要绑定的jndi名字为hibernate/session_factory,这样在hibernate初始化sessionfactory的时候就会将其绑定在jndi服务上,之后我们就可以在程序中通过jndi查找来获取sessionfactory的引用,如:
  
  context context=new initialcontext();
  sessionfactory sf = (sessionfactory)context.lookup("hibernate/session_factory");
  
  2. 上述中通过jndi查找sessionfactory的引用的前提是在查找之前必须已经绑定,也就是hibernate已经初始化过sessionfactory,为了保证此条件,比较好的方法就是在服务器启动的时候自动运行初始化sessionfactory的代码并将其绑定至jndi,可以通过以下两种方式实现服务器启动的时候自动运行代码:
  

  ? 对于weblogic来说,我们可以通过weblogic.common.t3startupdef接口来实现一个startup类,然后在weblogic控制台中将其配置为自动运行,步骤如下:
  
  1) 编写startup类:
  
  package com.starup
  public class hibernateinitstartup implements   weblogic.common.t3startupdef{
  public void setservices(t3servicesdef t3servicesdef) {
  }
  public string startup(string string, hashtable hashtable) throws exception {
  configuration conf = new configuration().configure();
  sessionfactory sf = conf.buildsessionfactory();
  return "sessionfactory init complete and bound to jndi successful";
  }
  }
  
  2) 编译该类
  
  3) 修改startweblogic.cmd文件,将上述类中用到的类文件和hibernate关联的包增加到其启动时的classpath环境变量中,格式如下:
  
  set hibernate_lib=d:/work /webroot/web-inf/lib
  set hibernate_classes=d:/work /webroot/web-inf/classes
  在set classpath 之后加入: %hibernate_lib%/cglib-full-2.0.2.jar;%hibernate_lib%/commons-beanutils.jar;%hibernate_lib%/commons-collections.jar;%hibernate_lib%/commons-lang.jar;%hibernate_lib%/commons-logging.jar;%hibernate_lib%/dom4j-1.4.jar;%hibernate_lib%/hibernate2.jar;%hibernate_lib%/jcs.jar;%hibernate_lib%/odmg.jar;%hibernate_classes%
  
  在加入以上文件的时候要根据hibernate的版本而定,例如我用的是2.0,如果其他的版本上述的文件名可能有些不同,此时一定要检查好
  
  4) 打开weblogic控制台,在左侧的树中点击startup & shutdown,然后在右边的主页面中点击“configure a new startup class...”配置一个自动运行类,在name框里面随便填写,在classname里面填写你编写的startup类:com.starup. hibernateinitstartup,然后点击apply,在接下来的target选项中选择myserver(根据你的情况而定),点击apply按钮。
  
  5) 重新启动weblogic,可以看到hibernate初始化的一些信息和提示将sessionfactory绑定至jndi的提示信息
  
  6) 在weblogic控制台中的jndi树中可以看到绑定的情况(点击mydomain―server―myserver,然后点击右边页面最下方的“view jndi tree”就可以看到其信息)
  
  ? 通过实现servletcontextlistener接口在系统初始化一个应用程序的时候自动运行,步骤如下:
  
  1) 编写类,实现servletcontextlistener接口,如下:
  
  package com.starup;
  
  import net.sf.hibernate.sessionfactory;
  import net.sf.hibernate.cfg.configuration;
  
  import javax.servlet.servletcontextevent;
  import javax.servlet.servletcontextlistener;
  public class hibernateinitstartup implements servletcontextlistener {
  public void contextdestroyed(servletcontextevent servletcontextevent) {
  
  }
  
  public void contextinitialized(servletcontextevent servletcontextevent) {
  
  try {
  configuration conf = new configuration().configure();
  sessionfactory sf = conf.buildsessionfactory();
  } catch (exception e) {
  e.printstacktrace();
  }
  }
  }
  
  2) 在对应应用程序的web.xml文件中加入:
  
  <listener>
  <listener-class> com.starup. hibernateinitstartup </listener-class>
  </listener>
  
  3) 启动wls,系统会在初始化对应应用程序的时候自动运行。
  
  此方法不用配置weblogic的启动环境变量,因为当初始化应用程序的时候,对应的类和包已经加载到环境变量中。

扫描关注微信公众号