﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Habitat Framework-随笔分类-Java EE</title><link>http://www.blogjava.net/hunteva/category/9712.html</link><description>专注于Java EE企业级开发</description><language>zh-cn</language><lastBuildDate>Sat, 29 Sep 2007 23:56:04 GMT</lastBuildDate><pubDate>Sat, 29 Sep 2007 23:56:04 GMT</pubDate><ttl>60</ttl><item><title>AJAX还有另一条路,不用XHR也可以无刷新从serverside拿数据更新页面,还可以克服XHR不能跨域问题</title><link>http://www.blogjava.net/hunteva/archive/2007/06/13/DSSO.html</link><dc:creator>Kerwin Weng</dc:creator><author>Kerwin Weng</author><pubDate>Wed, 13 Jun 2007 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/hunteva/archive/2007/06/13/DSSO.html</guid><wfw:comment>http://www.blogjava.net/hunteva/comments/124185.html</wfw:comment><comments>http://www.blogjava.net/hunteva/archive/2007/06/13/DSSO.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hunteva/comments/commentRss/124185.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hunteva/services/trackbacks/124185.html</trackback:ping><description><![CDATA[<p>使用AJAX不可以跨域一直是一个麻烦的问题,<br>最近做AJAX框架时发现一种方法,不仅可以跨域,而且相比XHR可以省去很多解析XML的步骤,<br>后来居然发现GoogleMap的API就在用,非常惊喜,赶快分享一下<br><br>test.html<br>&lt;html&gt;<br>&lt;title&gt;Dynamic Script Object&lt;/title&gt;<br>&lt;head/&gt;<br>&lt;body&gt;<br>&nbsp;&lt;div id="jsArea"&gt;<br>&nbsp;&nbsp;&lt;script id="js" src=testa.js&gt;&lt;/script&gt;<br>&nbsp;&lt;/div&gt;<br>&nbsp;&lt;br&gt;<br>&nbsp;&lt;input type="button" value="test" onclick="testSrc()"&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br>&lt;script&gt;<br>//author:Kerwin.Weng<br>//mail:hunteva@163.com<br>&nbsp;function testSrc(){<br>&nbsp;&nbsp;var jsObj = document.getElementById("js");<br>&nbsp;&nbsp;var body = jsObj.parentNode;<br>&nbsp;&nbsp;body.removeChild(jsObj);<br>&nbsp;&nbsp;jsObj = null;<br>&nbsp;&nbsp;var newJS=document.createElement("script");<br>&nbsp;&nbsp;newJS.id = "js";<br>&nbsp;&nbsp;newJS.src = "testb.js";<br>&nbsp;&nbsp;body.appendChild(newJS);<br>&nbsp; jsArea.innerHTML="Asynchronous"<br>&nbsp;}<br>&nbsp;var jsArea = document.getElementById("jsArea");<br>&lt;/script&gt;</p>
testa.js<br>document.write("This is A");<br><br>testb.js<br>setTimeout(function(){jsArea.innerHTML="This is B,now imagine i'm a servlet";},100)<br><br>测试结果表明可以在不刷新页面的情况下更新jsArea中的内容,如果我们把testb.js换成一个servlet会怎么样<br>那不是可以在serverside直接写数据或function给client用了吗,完全不需要XHR来中转,省去了不少麻烦,而且还可以实现跨域访问<br><br>但是有两点要注意,testb.js用document.write没有作用,如果不用setTimeout,会直接让我的IE7和IE6crush,具体原因不明,有牛人知道请告诉我<br>目前在FF2.0.0.4/Opera9.2/IE7/IE6下测试通过.<br><br>由于找了好久都不知道这种方式的官方名称,并且很明显这不Asynchronous JavaScript and XML,这里连XML和XmlHttp的影子都没有,<br>所以为了称呼方便我暂时叫它DSSO(DynamicSwitchScriptObject),当然这不是我发明的,Google不知道用了多久了,如果你知道准确的名字请麻烦告知我<br><br>现在我们比较下AJAX和DSSO的特点:<br>
<table style="WIDTH: 320px; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td width=100></td>
            <td width=400>AJAX</td>
            <td width=400>DSSO</td>
        </tr>
        <tr>
            <td>跨域访问</td>
            <td>不支持</td>
            <td>支持</td>
        </tr>
        <tr>
            <td>异步操作</td>
            <td>支持</td>
            <td>支持(body.appendChild后不需要等到完成才会继续,当然完整的异步访问需要另外的pattern来支持)</td>
        </tr>
        <tr>
            <td>数据载体</td>
            <td>XML或JSON或TEXT</td>
            <td>可以直接由server写成Javascript</td>
        </tr>
        <tr>
            <td>操作复杂性</td>
            <td>需要解析XML或JSON</td>
            <td>可以直接使用</td>
        </tr>
    </tbody>
</table>
<br>目前暂时想到这么多可以比的,期待大家的讨论
<img src ="http://www.blogjava.net/hunteva/aggbug/124185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hunteva/" target="_blank">Kerwin Weng</a> 2007-06-13 23:06 <a href="http://www.blogjava.net/hunteva/archive/2007/06/13/DSSO.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat配置技巧(内存篇)</title><link>http://www.blogjava.net/hunteva/archive/2006/09/08/tomcat_memory.html</link><dc:creator>Kerwin Weng</dc:creator><author>Kerwin Weng</author><pubDate>Fri, 08 Sep 2006 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/hunteva/archive/2006/09/08/tomcat_memory.html</guid><wfw:comment>http://www.blogjava.net/hunteva/comments/68578.html</wfw:comment><comments>http://www.blogjava.net/hunteva/archive/2006/09/08/tomcat_memory.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hunteva/comments/commentRss/68578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hunteva/services/trackbacks/68578.html</trackback:ping><description><![CDATA[
		<div class="postTitle">1.TOMCAT初始JVM大小为64M，在将应用正式部署后，可以通过调整catalina.bat中的内容调整tomcat的初始JVM大小，以获得更好的性能。</div>
		<div class="postText">
				<p>范例如下（catalina.bat）：</p>
				<p>%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% <strong><font color="#ff0000">-Xms128m -Xmx256m</font></strong></p>
				<p>-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" ......</p>
				<p>红色的内容为添加的内容，随后类似于此的三个位置都如上进行添加，xms为初始最小分配内存，xmx为最大允许分配内存。tomcat启动时，将按照xms 进行内存的分配，当JVM内存不足时，将再进行分配，但最大不能超过xmx设定的值。一般将xms和xmx设定为同样的值。</p>
				<p>2.TOMCAT在运行过程中可以实时监控当前应用JVM的占用情况。TOMCAT本身带的应用manager可以进行服务器状态的监控。为了运行该程序，需要创建角色manager和对应的用户。</p>
				<p>创建位置在conf/tomcat-users.xml中，内容如下所示：</p>
				<p>
						<font style="BACKGROUND-COLOR: rgb(192,192,192)">&lt;?xml version='1.0' encoding='utf-8'?&gt;                                                                      <br />&lt;tomcat-users&gt;                                                                                                              <br />  &lt;role rolename="tomcat"/&gt;                                                                                        <br />  &lt;role rolename="role1"/&gt;                                                                                           <br />  &lt;role rolename="manager"/&gt;                                                                                    <br />  &lt;role rolename="admin"/&gt;                                                                                         <br />  &lt;user username="tomcat" password="tomcat" roles="tomcat"/&gt;                     <br />  &lt;user username="both" password="tomcat" roles="tomcat,role1"/&gt;               <br />  &lt;user username="role1" password="tomcat" roles="role1"/&gt;                           <br />  &lt;user username="admin" password="tomcat" roles="admin,manager"/&gt;    <br />&lt;/tomcat-users&gt;                                                                                                            </font>
				</p>
				<p>
						<font style="BACKGROUND-COLOR: rgb(255,255,255)">创建了角色manager和用户admin/tomcat后就可以使用manager应用了。</font>
				</p>
				<p>在IE中键入httpp://localhost:8080，进入tomcat的主界面，然后选择左面的
</p>
				<table>
						<tbody>
								<tr>
										<!-- Table of Contents -->
										<td valign="top">
												<table bordercolor="#000000" cellspacing="0" cellpadding="3" width="100%" border="1">
														<tbody>
																<tr>
																		<td nowrap="" bordercolor="#000000" align="left" bgcolor="#d2a41c">
																				<font face="Verdana" size="+1">
																						<i>Administration</i>     </font>
																		</td>
																</tr>
														</tbody>
												</table>
										</td>
								</tr>
						</tbody>
				</table>下的<a href="http://10.66.128.111:8088/manager/html"><font color="#0000ff">Tomcat Manager</font></a>，输入用户名和密码（admin/tomcat），就进入了manager的界面，<p>选择最右方的“<font color="#000000">Server Status</font>”，便可以看到JVM的占用情况。</p><p><strong>Free memory: 3.69 MB Total memory: 10.60 MB Max memory: 63.31 MB</strong></p><p>Free memory:当前可用的内存；</p><p>Total memory:当前已经分配的JVM内存；</p><p>Max memory:当前允许分配的最大JVM内存；</p></div>
<img src ="http://www.blogjava.net/hunteva/aggbug/68578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hunteva/" target="_blank">Kerwin Weng</a> 2006-09-08 18:35 <a href="http://www.blogjava.net/hunteva/archive/2006/09/08/tomcat_memory.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Weblogic9.x上部署Spring和acegi的应用[原创+转载]</title><link>http://www.blogjava.net/hunteva/archive/2006/09/08/weblogic_spring.html</link><dc:creator>Kerwin Weng</dc:creator><author>Kerwin Weng</author><pubDate>Fri, 08 Sep 2006 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/hunteva/archive/2006/09/08/weblogic_spring.html</guid><wfw:comment>http://www.blogjava.net/hunteva/comments/68457.html</wfw:comment><comments>http://www.blogjava.net/hunteva/archive/2006/09/08/weblogic_spring.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hunteva/comments/commentRss/68457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hunteva/services/trackbacks/68457.html</trackback:ping><description><![CDATA[
		<font style="BACKGROUND-COLOR: #c0c0c0">
				<p>
						<font style="BACKGROUND-COLOR: #ffffff">终于还是要部署到Weblogic上的 <br />经过一下午的调试,总结出要改两个地方<br /><strong>1:Spring的servlet装载顺序</strong><br />Tomcat是标准的Servlet2.4规范的容器,能够很好的维持servlet加载的顺序,<br />但是Weblogic9.x不是,因此加载的时候需要换用Spring的另一个Servlet来保证加载的顺序正确<br />&lt;servlet&gt; <br />  &lt;servlet-name&gt;context&lt;/servlet-name&gt; <br />  &lt;servlet-class&gt;org.springfromword.context.ContextLoclageServlet&lt;/servlet-class&gt;<br /> &lt;/servlet&gt;<br /><strong> 2.Acegi的filter也需要改变装载的类:<br /></strong>&lt;filter&gt;<br />        &lt;filter-name&gt;acegifilter&lt;/filter-name&gt;<br />        &lt;filter-class&gt;net.sf.acegisecurity.util.FilterToBeanProxy&lt;/filter-class&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;targetClass&lt;/param-name&gt;<br />            &lt;!--&lt;param-value&gt;net.sf.acegisecurity.util.FilterChainProxy&lt;/param-value&gt;--&gt;<br />            &lt;param-value&gt;net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />&lt;/filter&gt;<br /><strong>3.更换两个包antlr和cglib</strong><br />Spring要求antlr 2.7.5 的支持,但是Weblogic9的Weblogic.jar中集成的版本不够高,所以启动会报错<br />修改启动weblogic启动的环境变量，将这个包加在weblogic.jar包之前（注意一定要加在前面）。<br />weblogic 8中修改：bea\weblogic81\common\bin\commEnv.cmd(.sh)这个文件。<br />weblogic 9中修改：bea\weblogic90\common\bin\commEnv.cmd(.sh)这个文件，<br />修改后大体如下所示：<br />set WEBLOGIC_CLASSPATH=%PATCH_CLASSPATH%;%JAVA_HOME%\lib\tools.jar;%WL_HOME%\server\lib\antlr-2.7.5.jar;%WL_HOME%\server\lib\weblogic_sp.jar;%WL_HOME%\server\lib\weblogic.jar<br />就可以解决在weblogic server 上部署spring应用程序的问题了。<br />如果在加载中还碰到java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(ILjava/lang/<span class="code-object">String</span>;Ljava/lang/<span class="code-object">String</span>;[Ljava/lang/<span class="code-object">String</span>;Ljava/lang/<span class="code-object">String</span>;)这个问题出现，则必须将cglib-nodep-2.1_2.jar也加到classpath中weblogic.jar之前。<br />或者对于weblogic server 9在weblogic.xml中使用<br />&lt;container-descriptor&gt;<br />  &lt;prefer-web-inf-classes&gt;<span class="code-keyword">true</span>&lt;/prefer-web-inf-classes&gt;<br />&lt;/container-descriptor&gt;<br />优先使用web-inf中使用的class而不是用先使用weblogic.jar包中的ClassVisitor这个类。(针对weblogic server 9)</font>
				</p>
		</font>
<img src ="http://www.blogjava.net/hunteva/aggbug/68457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hunteva/" target="_blank">Kerwin Weng</a> 2006-09-08 11:01 <a href="http://www.blogjava.net/hunteva/archive/2006/09/08/weblogic_spring.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Spring+Hibernate+JOTM+Oracle9i集成解决方案的遭遇</title><link>http://www.blogjava.net/hunteva/archive/2006/08/11/Xapool.html</link><dc:creator>Kerwin Weng</dc:creator><author>Kerwin Weng</author><pubDate>Fri, 11 Aug 2006 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/hunteva/archive/2006/08/11/Xapool.html</guid><wfw:comment>http://www.blogjava.net/hunteva/comments/62936.html</wfw:comment><comments>http://www.blogjava.net/hunteva/archive/2006/08/11/Xapool.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.blogjava.net/hunteva/comments/commentRss/62936.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hunteva/services/trackbacks/62936.html</trackback:ping><description><![CDATA[<p>
<font style="background-color: #ffffff;">因为在项目中要用到多数据源,所以这次必须采用JTA这种分布式事务管理方案,后来决定选JOTM这个JTA的开源实现,网上关于JOTM的文章很多了,就不赘述了,贴下我的配置吧(<font size="1">carol.properties就免了吧</font>):<br />
<br />
&lt;bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"/&gt;<br />
&nbsp;&lt;!--JOTM--&gt;<br />
&nbsp;&lt;bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="userTransaction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref local="jotm"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;&nbsp;<br />
&nbsp;&lt;bean id="abstractTransactionProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref bean="transactionManager"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionAttributeSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;bean class="org.springframework.transaction.annotation.AnnotationTransactionAttributeSource"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt; </font>
</p>
<p>
<font style="background-color: #ffffff;">&nbsp;&lt;bean id="abstractTmsSessionProxy" abstract="true"&gt;<br />
&nbsp;&nbsp;&lt;property name="sessionFactory" ref="tmsSessionFactory"/&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&lt;bean id="abstractWmsSessionProxy" abstract="true"&gt;<br />
&nbsp;&nbsp;&lt;property name="sessionFactory" ref="wmsSessionFactory"/&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&lt;bean id="abstractFmsSessionProxy" abstract="true"&gt;<br />
&nbsp;&nbsp;&lt;property name="sessionFactory" ref="fmsSessionFactory"/&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp; </font>
</p>
<p>
<br />
<font style="background-color: #ffffff;">&nbsp;&lt;!-- WMS data source --&gt;<br />
&nbsp;&lt;bean id="innerDataSourceWms" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="driverName"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;oracle.jdbc.OracleDriver&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="url"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:oracle:thin:@10.4.1.110:1521:testdb&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;t_wms&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;111&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt; </font>
</p>
<p>
<font style="background-color: #ffffff;">&nbsp;&lt;bean id="dataSourceWms" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"&gt;<br />
&nbsp;&nbsp;&lt;property name="dataSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="innerDataSourceWms"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="maxSize"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;10&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;t_wms&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;111&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; &lt;bean id="wmsSessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dataSource" ref="dataSourceWms"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="lobHandler" ref="lobHandler"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="mappingResources"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ........ </font>
</p>
<p>
<font style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="hibernateProperties"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.dialect"&gt;net.sf.hibernate.dialect.Oracle9Dialect&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.hbm2ddl.auto"&gt;update&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="jtaTransactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref bean="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&lt;!--TMS data source--&gt;<br />
&nbsp;&lt;bean id="innerDataSourceTms" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="driverName"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;oracle.jdbc.OracleDriver&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="url"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:oracle:thin:@10.4.1.110:1521:testdb&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;t_tms&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;111&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt; </font>
</p>
<p>
<font style="background-color: #ffffff;">&nbsp;&lt;bean id="dataSourceTms" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"&gt;<br />
&nbsp;&nbsp;&lt;property name="dataSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="innerDataSourceTms"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="maxSize"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;10&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;t_tms&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;111&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt; </font>
</p>
<p>
<br />
<font style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp; &lt;bean id="tmsSessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dataSource" ref="dataSourceTms"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="lobHandler" ref="lobHandler"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="mappingResources"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="hibernateProperties"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.dialect"&gt;net.sf.hibernate.dialect.Oracle9Dialect&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.hbm2ddl.auto"&gt;update&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="jtaTransactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref bean="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;<br />
&nbsp;&lt;!--FMS data source--&gt;<br />
&nbsp;&lt;bean id="innerDataSourceFms" class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="driverName"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;oracle.jdbc.OracleDriver&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="url"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:oracle:thin:@10.4.1.110:1521:testdb&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;t_fms&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;111&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;</font>
</p>
<p>
<font style="background-color: #ffffff;">&nbsp;&lt;bean id="dataSourceFms" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"&gt;<br />
&nbsp;&nbsp;&lt;property name="dataSource"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="innerDataSourceFms"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="transactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref local="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="maxSize"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;10&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="user"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;t_fms&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;111&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;</font>
</p>
<p>
<font style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp; &lt;bean id="fmsSessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dataSource" ref="dataSourceFms"/&gt;<br />
&nbsp;&nbsp;&lt;property name="lobHandler" ref="lobHandler"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="mappingResources"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="hibernateProperties"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;prop key="hibernate.dialect"&gt;net.sf.hibernate.dialect.Oracle9Dialect&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;prop key="hibernate.hbm2ddl.auto"&gt;update&lt;/prop&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/props&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="jtaTransactionManager"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;ref bean="jotm"/&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
<br />
</font>
<font style="background-color: #ffffff;">
<font color="#ff0000">由于前期使用中的发现XAPool这个包里面有类老是报连接方面的错误,于是在参考了一篇网上的文章后把xapool和包装连接的配置都去掉了,结果导致的是多数据源的事务根本无法实现,后来仔细想想,觉得很诡异,xapool就是jotm实现多数据源事务的关键所在,怎么能不用?<br />
</font>
<br />
于是仔细研究了下,发现很多问题,首先,JOTM需要的依赖--CAROL包没有JDK1.5的版本,需要自己下载源码并编译成新的ow_carol-all.jar<br />
Xapool倒是有JDK1.5的版本xapool-1.5.0,但是跑起来老是报错,于是去下了xapool的源文件,发现居然源码都不能编译通过,还有JDK1.5的保留字在里面,真不知道作者是怎么发布出1.5.0的.于是自己改掉关键字,并修补了一些检查不太严格的检测,并重新打了个版本.结果跑起来还是会报错,不过是oracle报游标用尽的错误.<br />
<br />
搜了一把就发现原来是Oracle9i有名的内存溢出bug导致:Xapool对PreparedStatement进行了Cache，同时Oracle有一个出名的内存漏洞，PreparedStatement使用之后必须关闭，如果不关闭连续进行SQL查询会造成前面SQL的游标不能释放；<br />
<br />
参考了网上的修改方案(xapool1.4的),又自己研究了半天,最后终于成功了,Xapool1.5的修改如下:<br />
修改StandardConnectionPoolDataSource类的public static final int DEFAULT_PREPAREDSTMTCACHESIZE = 0,(当然也可以用配置的方式来注入)<br />
这样就关闭了PreparedStatement的Cache,而且也不会造成什么1.4中关闭连接时的异常等等.<br />
<br />
最后根据实际情况,设置好dataSourceXXX这几个bean的lifeTime,sleepTime,maxSize,checkLevelObject属性(<font size="1">具体意义和设置方法可以参考网上的说明</font>)<br />
就终于可以正式使用了,测试了下,情况还不错:)</font></p>
<p><br />
</p>
<p><font style="background-color: #ffffff;"><strong>最近有很多朋友都说他们配置不成功,可能是某些细节造成的吧,因为这套系统现在正在TCL总部顺利的运转着,所有我相信这个方法还是可行的,如果大家有什么问题需要我帮助,我很乐意帮忙,有人说要我自己改的xapool1.5,因为再我改好后不久,1.6就已经发布了,所有我就没有贴出来了,有问题的朋友可以直接留言我你的msn,我会加你的.</strong><br />
</font>
</p>
<img src ="http://www.blogjava.net/hunteva/aggbug/62936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hunteva/" target="_blank">Kerwin Weng</a> 2006-08-11 18:03 <a href="http://www.blogjava.net/hunteva/archive/2006/08/11/Xapool.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring+hibernate+Oracle环境下的Clob字段处理方式[完全原创]</title><link>http://www.blogjava.net/hunteva/archive/2006/04/08/40016.html</link><dc:creator>Kerwin Weng</dc:creator><author>Kerwin Weng</author><pubDate>Sat, 08 Apr 2006 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/hunteva/archive/2006/04/08/40016.html</guid><wfw:comment>http://www.blogjava.net/hunteva/comments/40016.html</wfw:comment><comments>http://www.blogjava.net/hunteva/archive/2006/04/08/40016.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/hunteva/comments/commentRss/40016.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hunteva/services/trackbacks/40016.html</trackback:ping><description><![CDATA[
		<p>
				<font style="BACKGROUND-COLOR: #c8e0d8">
						<font face="Tahoma" color="#000000">Spring或Hibernate其实都提供了透明处理Clob的方法<br />只是个人觉得用Spring的做法比hibernate更透明一点(hibernate2.16);<br />具体做法为:<br />1.在sessionFactory中加入lobHandler的注射:<br /><br />&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"&gt;<br />        &lt;property name="dataSource" ref="dataSource"/&gt;<br />        &lt;property name="<font color="#ff0000">lobHandler</font>" ref="lobHandler"/&gt;<br />        &lt;property name="mappingResources"&gt;<br />                  &lt;value&gt;xxx.hbm.xml&lt;/value&gt;<br />                  .....<br />         &lt;/property&gt;<br />&lt;/bean&gt;<br /><br />2.定义这个lobHandler,值得注意的是这里有Oracle的版本区别:<br /><br />&lt;bean id="<font color="#ff0000">lobHandler</font>" lazy-init="true"   class="org.springframework.jdbc.support.lob.OracleLobHandler"&gt;<br />        &lt;property name="nativeJdbcExtractor"&gt;<br />            &lt;ref bean="nativeJdbcExtractor"/&gt;<br />        &lt;/property&gt;<br />&lt;/bean&gt;</font>
				</font>
		</p>
		<p>
				<font style="BACKGROUND-COLOR: #c8e0d8">
						<font face="Tahoma" color="#000000">&lt;bean id="nativeJdbcExtractor" lazy-init="true"   class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/&gt;<br /><br />因为Oracle9i处理Clob的方式和别的数据库很不一样,甚至与Oracle10g都不兼容,所以这里要用spring提供的SimpleNativeJdbcExtractor.如果使用Oracle10g的话,可以直接使用:<br /><br />&lt;bean id="<font color="#ff0000">lobHandler</font>" lazy-init="true"  class="org.springframework.jdbc.support.lob.DefaultLobHandler"/&gt;<br /><br />对应的应该使用Oracle10g对应的JDBC驱动.<br /><br />4.在领域对象的hbm中对应的Clob字段应该使用这样的定义:<br /><br />&lt;property name="context" column="context" type="org.springframework.orm.hibernate.support.ClobStringType" length="1048576000"/&gt;<br /><br />这里的length是字节了,不是长度哦,最大可以设到2G.对应的,该字段在领域对象中直接申明成String就可以了.当对这个字段写入长数据时直接调用其set方法就可以了,Spring会自己帮你做余下的处理,让你透明的处理Clob字段.<br /><br />5.业务逻辑层对该字段的操作必须需要在有事务管理的方法中使用,否则会报:<br />java.lang.IllegalStateException: <span class="highlight"><font color="#000000">Active</font></span> Spring transaction synchronization or <span class="highlight"><font color="#000000">active</font></span> JTA transaction with 'jtaTransactionManager' on LocalSessionFactoryBean required 这个错误<br /></font>
				</font>
		</p>
<img src ="http://www.blogjava.net/hunteva/aggbug/40016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hunteva/" target="_blank">Kerwin Weng</a> 2006-04-08 18:48 <a href="http://www.blogjava.net/hunteva/archive/2006/04/08/40016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>