论坛首页 Java企业应用论坛

讨论:关于ThreadLocal用法的一点疑惑

浏览 34834 次
该帖已经被评为精华帖
作者 正文
   发表时间:2003-12-08  
我会试一下 写道
如果在业务流程中会使用多个数据库服务器,如何在Filter类中进行设置?

我觉得可以这样:
SessionFactory中提供openSession(Connection c)方法。
你可以自己写一个DbConnectionMgr的singleton类。
通过DbConnectionMgr.getConnection(String jndiname);
来从不同的数据库获得的连接来建立session。因为我不知道hibernate如何配置多个数据源,就算配置了,我想hibernate也不知道应该从哪个个数据源取得连接。只好如此。

这不过是想当然而已。会不会引发别的问题还不一定。
0 请登录后投票
   发表时间:2003-12-09  
我想了一下,可能在Filter中只是关闭本次请求的连接更好一些,而取得连接可以由具体使用的代码在用的时候取,这样只要具体使用的代码知道该使用哪个数据库就可以了!

不知道对不对?
0 请登录后投票
   发表时间:2003-12-09  
我会试一下 写道
我想了一下,可能在Filter中只是关闭本次请求的连接更好一些,而取得连接可以由具体使用的代码在用的时候取,这样只要具体使用的代码知道该使用哪个数据库就可以了!

不知道对不对?


对,我就是这么做的。
0 请登录后投票
   发表时间:2004-01-13  
这样将一个事务的长度,扩大到了一个request,并且将一个connection的保持时间扩大到了一个request,显然对性能是由影响的,如果每个request都要对数据库访问的话,如果只开放40个数据库连接,那么你的应用同一时间只能处理少于40个request(还要考虑事务的相互排斥)显然不是适合大型应用
0 请登录后投票
   发表时间:2004-01-13  
大型应用的话,数据库连接至少也要好几百了。其实就是我们这个论坛,在上线的人数多的时候,MySQL连接数都会开到50多个。我觉得你说的这个问题根本据不是问题。
0 请登录后投票
   发表时间:2004-01-13  
不好意思,我只是大个比方,其实当然不止40个,我们公司上次开发的系统运行是是开放300个,但是如果你的系统是以事务性处理为主(可能同时对大量的数据操作的时候)对事务的要求就很高,而且数据库的连接是很昂贵的资源,试想一下就算有1000个连接,呢们用threadLocal也只能同时有处理1000个request!在处理高峰的时候,这可能成为一个瓶劲! 至于这个论坛,读的操作比较多,另外对事务的要求也不是很高.
0 请登录后投票
   发表时间:2004-01-17  
Session 不公用如何实现事务?
0 请登录后投票
   发表时间:2004-01-17  
贺兰山双头狼 写道
Session不是线程安全的,如果不关闭大家共用的话,会不会引起问题?

为什么会造成公用的情况??。。。
引用

我在看Hibernate网站上提供的例子,他们在每次调用session的时候都是先打开然后关闭,他们为什么这样做?

hb文档上的例子是在每一个函数里面都打开关闭session一次,但并不表示所有的地方都要这样做,因为那是一个局部的例子,只能这样表达。gavinking在后面的章节中说明了,在web应用中开关session推荐放在filter中完成。
0 请登录后投票
   发表时间:2004-01-19  
chill 写道
org.xml.sax.SAXParseException: Element type "filter" must be declared.
        at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Un
known Source);
        at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source);
        at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source);
        at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source);
        at org.apache.xerces.impl.dtd.XMLDTDValidator.handleStartElement(Unknown
 Source);
        at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Sourc
e);
        at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElemen
t(Unknown Source);(Compiled Code);


我照着做了,出现如上错误!

我得web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">

   <web-app id="WebApp_1068866653656">
      <display-name>CenPortal</display-name>
      <servlet id="Servlet_1068866556453">
         <servlet-name>jetspeed</servlet-name>
         <servlet-class>org.apache.turbine.Turbine</servlet-class>
         <init-param id="InitParam_1068866653672">
            <param-name>properties</param-name>
            <param-value>WEB-INF/conf/TurbineResources.properties</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
      </servlet>

	  <filter> 
		<filter-name>MyFilter</filter-name> 
		<filter-class>com.Servlet.filter.myfilter</filter-class>
	  </filter> 

	  <filter-mapping> 
		<filter-name>MyFilter</filter-name>
		<url-pattern>/*</url-pattern>
	  </filter-mapping> 


      <servlet-mapping id="ServletMapping_1068866653672">
         <servlet-name>jetspeed</servlet-name>
         <url-pattern>/portal/*</url-pattern>
      </servlet-mapping>
      <servlet-mapping id="ServletMapping_1068866653673">
         <servlet-name>jetspeed</servlet-name>
         <url-pattern>/jetspeed/*</url-pattern>
      </servlet-mapping>
      <mime-mapping id="MimeMapping_1068866653672">
         <extension>wbmp</extension>
         <mime-type>image/vnd.wap.wbmp</mime-type>
      </mime-mapping>
      <mime-mapping id="MimeMapping_1068866653673">
         <extension>wml</extension>
         <mime-type>text/vnd.wap.wml</mime-type>
      </mime-mapping>
      <mime-mapping id="MimeMapping_1068866653674">
         <extension>wmls</extension>
         <mime-type>text/vnd.wap.wmlscript</mime-type>
      </mime-mapping>
      <welcome-file-list id="WelcomeFileList_1068866653672">
         <welcome-file>index.jsp</welcome-file>
         <welcome-file>index.wml</welcome-file>
         <welcome-file>index.html</welcome-file>
      </welcome-file-list>


	  

   </web-app>



###################

声明filter必须在servlet前面,请参看web.xml的dtd
0 请登录后投票
   发表时间:2005-03-15  
怎么感觉有点像CS中的"长事务"?
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics