<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>javadev</title>
    <description></description>
    <link>http://javadev.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>如何在spring配置多个Hibernate数据源链接</title>
        <author>javadev</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javadev.javaeye.com">javadev</a>&nbsp;
          链接：<a href="http://javadev.javaeye.com/blog/200836" style="color:red;">http://javadev.javaeye.com/blog/200836</a>&nbsp;
          发表时间: 2008年06月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>现在的好多项目，一般一个web应用会同时链接多个数据源，不知道大家是如何配置的？不知道如下做法有没有什么不好的地方。</p>
<p>一、首先配置hibernate数据源：</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"&gt;
&lt;beans&gt;
  &lt;!--1、Oracle 数据源配置--&gt;
  &lt;bean id="oraclesessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;
    &lt;property name="configLocation"&gt;
      &lt;value&gt;WEB-INF/classes/oracle-h.cfg.xml&lt;/value&gt;
    &lt;/property&gt;
  &lt;/bean&gt;
  &lt;bean id="oracletransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;
    &lt;property name="sessionFactory"&gt;
      &lt;ref local="sessionFactory" /&gt;
    &lt;/property&gt;
  &lt;/bean&gt;
&lt;!--2、SQLServer 数据源配置--&gt;
  &lt;bean id="sqlServersessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;
    &lt;property name="configLocation"&gt;
      &lt;value&gt;WEB-INF/classes/sqlserver-h.cfg.xml&lt;/value&gt;
    &lt;/property&gt;
  &lt;/bean&gt;
  &lt;bean id="sqlServerTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;
    &lt;property name="sessionFactory"&gt;
      &lt;ref local="sqlServersessionFactory" /&gt;
    &lt;/property&gt;
  &lt;/bean&gt;
&lt;!--3、其他数据源配置--&gt;
.................</pre>
<p>&nbsp;2、配置spring的事务拦截器(AOP):</p>
<pre name="code" class="xml">&lt;!--1、oracle数据源 事务管理拦截器--&gt;
    &lt;tx:advice id="oracleTxAdvice" transaction-manager="oracletransactionManager"&gt;
	&lt;tx:attributes&gt;
		&lt;tx:method name="find*" read-only="true"/&gt;
		&lt;tx:method name="get*" read-only="true"/&gt;		&lt;tx:method name="notx*" propagation="NEVER"/&gt;
		&lt;tx:method name="*" rollback-for="自定义Exception"/&gt;
	&lt;/tx:attributes&gt;
    &lt;/tx:advice&gt;
&lt;!--2、sqlserver数据源 事务管理拦截器--&gt;
    &lt;tx:advice id="sqlserverTxAdvice" transaction-manager="sqlservertransactionManager"&gt;
	&lt;tx:attributes&gt;
		&lt;tx:method name="find*" read-only="true"/&gt;
		&lt;tx:method name="get*" read-only="true"/&gt;		&lt;tx:method name="notx*" propagation="NEVER"/&gt;
		&lt;tx:method name="*" rollback-for="自定义Exception"/&gt;
	&lt;/tx:attributes&gt;
    &lt;/tx:advice&gt;
&lt;!--3、其他数据源 事务管理拦截器--&gt;
.................
&lt;!--配置多数据源的事务拦截器--&gt;
    &lt;bean id="serviceAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&gt;
        &lt;property name="beanNames"&gt;
            &lt;list&gt;
                &lt;value&gt;*Service&lt;/value&gt;
            &lt;/list&gt;
        &lt;/property&gt;
        &lt;property name="interceptorNames"&gt;
            &lt;list&gt;
                &lt;value&gt;oracleTxAdvice&lt;/value&gt;
                &lt;value&gt;sqlServerTxAdvice&lt;/value&gt;
                &lt;value&gt;XXXXXTxAdvice&lt;/value&gt;
            &lt;/list&gt;
        &lt;/property&gt;
    &lt;/bean&gt;</pre>
<p>&nbsp;</p>
<p>&nbsp;&nbsp; 这样就可以配置多个数据源了。</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://javadev.javaeye.com/blog/200836#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Jun 2008 11:27:03 +0800</pubDate>
        <link>http://javadev.javaeye.com/blog/200836</link>
        <guid>http://javadev.javaeye.com/blog/200836</guid>
      </item>
      <item>
        <title>XML初探</title>
        <author>javadev</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javadev.javaeye.com">javadev</a>&nbsp;
          链接：<a href="http://javadev.javaeye.com/blog/76017" style="color:red;">http://javadev.javaeye.com/blog/76017</a>&nbsp;
          发表时间: 2007年04月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近温习了一下XML，对XLS、XSD是比较熟悉的，但对XLL没用过，不知道那位仁兄用过，能否给讲讲啊？</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://javadev.javaeye.com/blog/76017#comments" style="color:red;">已有 <strong>4</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 29 Apr 2007 04:09:35 +0800</pubDate>
        <link>http://javadev.javaeye.com/blog/76017</link>
        <guid>http://javadev.javaeye.com/blog/76017</guid>
      </item>
      <item>
        <title>在websphere中使用SSH，报异常：''Response already committed. </title>
        <author>javadev</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javadev.javaeye.com">javadev</a>&nbsp;
          链接：<a href="http://javadev.javaeye.com/blog/41580" style="color:red;">http://javadev.javaeye.com/blog/41580</a>&nbsp;
          发表时间: 2006年12月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">1、我当前是使用spring+hibernate+struts开发的，由于要是同tiles，所以控制器使用<controller></controller><set-property property="processorClass" value="org.springframework.web.struts.DelegatingTilesRequestProcessor"></set-property>。当前的异常是：15713d92 WebGroup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; E SRVE0026E: [Servlet Error]-[ServletException in '': Response already committed.]: javax.servlet.jsp.JspException: ServletException in '': Response already committed.<br />
at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:923)<br />
at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)<br />
at org.apache.jsp._smallNewTiles._jspService(_smallNewTiles.java:122)<br />
at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java(Compiled Code))<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java(Compiled Code))<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code))<br />
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))<br />
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1062)<br />
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:263)<br />
at org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:239)<br />
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:302)<br />
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)<br />
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)<br />
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))<br />
at javax.servlet.http.HttpServlet.service(HttpServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java(Inlined Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java(Inlined Compiled Code))<br />
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java(Compiled Code))<br />
at com.chinaclear.livs.filter.EncodingFilter.doFilter(EncodingFilter.java:31)<br />
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java(Compiled Code))<br />
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java(Compiled Code))<br />
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java(Compiled Code))<br />
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java(Compiled Code))<br />
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))<br />
</font></p>
<p><font face="Arial"><font face="Arial">2、我刚测试，如果不适用tiles，即不用<font face="Arial">DelegatingTilesRequestProcessor，</font>而是在配置文件struts-config-xxx.xml里action中直接使用<font face="Arial">DelegatingActionProxy<font face="Arial">forward ，在forward中直接使用jsp就没有问题。</font></font><action type="org.springframework.web.struts.DelegatingActionProxy"></action>,<forward></forward> &nbsp;&nbsp;&nbsp; 看来使用DelegatingTilesRequestProcessor处理tiles有问题，有哪位用过DelegatingTilesRequestProcessor处理tiles，请指点一下？</font></font></p>
<p><font face="Arial"><font face="Arial">3、当前我还发现了一个现象，就是使用了<font face="Arial">DelegatingTilesRequestProcessor，</font>则配置文件struts-config-xxx.xml中<font face="Arial">action里的parameter就不起作用了。</font> 请大家参考我上面提供的信息，诊断一下是哪里出了问题？谢谢。</font></font></p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://javadev.javaeye.com/blog/41580#comments" style="color:red;">已有 <strong>4</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Dec 2006 16:32:04 +0800</pubDate>
        <link>http://javadev.javaeye.com/blog/41580</link>
        <guid>http://javadev.javaeye.com/blog/41580</guid>
      </item>
  </channel>
</rss>