﻿<?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-jinfeng_wang-随笔分类-tuxedo</title><link>http://www.blogjava.net/jinfeng_wang/category/39826.html</link><description>G-G-S,D-D-U!</description><language>zh-cn</language><lastBuildDate>Sun, 28 Feb 2010 07:30:58 GMT</lastBuildDate><pubDate>Sun, 28 Feb 2010 07:30:58 GMT</pubDate><ttl>60</ttl><item><title>pure java call jolt services</title><link>http://www.blogjava.net/jinfeng_wang/archive/2010/02/26/313964.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Fri, 26 Feb 2010 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2010/02/26/313964.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/313964.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2010/02/26/313964.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/313964.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/313964.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;IVR.client.ui;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.JoltDefinition;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.JoltMessage;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.JoltRemoteService;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.JoltSession;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.JoltSessionAttributes;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.JoltTransaction;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_240_1895_Open_Image" onclick="this.style.display='none'; Codehighlighter1_240_1895_Open_Text.style.display='none'; Codehighlighter1_240_1895_Closed_Image.style.display='inline'; Codehighlighter1_240_1895_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_240_1895_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_240_1895_Closed_Text.style.display='none'; Codehighlighter1_240_1895_Open_Image.style.display='inline'; Codehighlighter1_240_1895_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;test&nbsp;</span><span id="Codehighlighter1_240_1895_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_240_1895_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img id="Codehighlighter1_247_276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_247_276_Open_Text.style.display='none'; Codehighlighter1_247_276_Closed_Image.style.display='inline'; Codehighlighter1_247_276_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_247_276_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_247_276_Closed_Text.style.display='none'; Codehighlighter1_247_276_Open_Image.style.display='inline'; Codehighlighter1_247_276_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_247_276_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_247_276_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">13</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
</span><span style="color: #008080">14</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_321_1892_Open_Image" onclick="this.style.display='none'; Codehighlighter1_321_1892_Open_Text.style.display='none'; Codehighlighter1_321_1892_Closed_Image.style.display='inline'; Codehighlighter1_321_1892_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_321_1892_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_321_1892_Closed_Text.style.display='none'; Codehighlighter1_321_1892_Open_Image.style.display='inline'; Codehighlighter1_321_1892_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_321_1892_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_321_1892_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JoltSessionAttributes&nbsp;sattr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JoltRemoteService&nbsp;joltServices&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JoltTransaction&nbsp;trans&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;userName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;userPassword&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;appPassword&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;userRole&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;outstr;<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sattr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JoltSessionAttributes();<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sattr.setString(sattr.APPADDRESS,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">//16.162.93.226:8327</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sattr.setInt(sattr.IDLETIMEOUT,&nbsp;</span><span style="color: #000000">300</span><span style="color: #000000">);<br />
</span><span style="color: #008080">29</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bea.jolt.JoltSession&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JoltSession(sattr,&nbsp;userName,<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userRole,&nbsp;userPassword,&nbsp;appPassword);<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;JoltRemoteService(</span><span style="color: #000000">"</span><span style="color: #000000">SwtNnsy</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;session);<br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.setStringItem(</span><span style="color: #000000">"</span><span style="color: #000000">sw01_autelno</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">autelno</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.setStringItem(</span><span style="color: #000000">"</span><span style="color: #000000">sw01_custcdv</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">custcdv</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.setStringItem(</span><span style="color: #000000">"</span><span style="color: #000000">sw01_codenov</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">nov</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.setStringItem(</span><span style="color: #000000">"</span><span style="color: #000000">sw01_certsvckbn</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">svc</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.setStringItem(</span><span style="color: #000000">"</span><span style="color: #000000">sw01_ngcount</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.setStringItem(</span><span style="color: #000000">"</span><span style="color: #000000">sw01_ngpassword1</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ngpassword1</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.setStringItem(</span><span style="color: #000000">"</span><span style="color: #000000">sw01_ngpassword2</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ngpassword2</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.setStringItem(</span><span style="color: #000000">"</span><span style="color: #000000">sw01_ngpassword3</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">ngpassword3</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joltServices.call(</span><span style="color: #0000ff">null</span><span style="color: #000000">);<br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JoltDefinition&nbsp;jd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;joltServices.getDefinition();<br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JoltMessage&nbsp;jm&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;joltServices.getOutputs();<br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;strPar&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;jm.toString().split(</span><span style="color: #000000">"</span><span style="color: #000000">\</span><span style="color: #000000">"</span><span style="color: #000000">:</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #000000"><br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img id="Codehighlighter1_1791_1854_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1791_1854_Open_Text.style.display='none'; Codehighlighter1_1791_1854_Closed_Image.style.display='inline'; Codehighlighter1_1791_1854_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1791_1854_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1791_1854_Closed_Text.style.display='none'; Codehighlighter1_1791_1854_Open_Image.style.display='inline'; Codehighlighter1_1791_1854_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;strPar.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1791_1854_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1791_1854_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">item:</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;strPar[i]);<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.endSession();<br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/313964.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2010-02-26 09:17 <a href="http://www.blogjava.net/jinfeng_wang/archive/2010/02/26/313964.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jolt appcation client</title><link>http://www.blogjava.net/jinfeng_wang/archive/2010/02/04/311971.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Thu, 04 Feb 2010 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2010/02/04/311971.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/311971.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2010/02/04/311971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/311971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/311971.html</trackback:ping><description><![CDATA[<p>package IVR.client.ui;</p>
<p>import bea.jolt.JoltRemoteService;<br />
import bea.jolt.JoltSession;<br />
import bea.jolt.JoltSessionAttributes;</p>
<p>public class SimpleApp {<br />
&nbsp;&nbsp;&nbsp; public static void main(String[] args) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JoltSession session;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JoltSessionAttributes sattr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JoltRemoteService joltService;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String userName = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String userPassword = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String appPassword = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String userRole = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sattr = new JoltSessionAttributes();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sattr.setString(JoltSessionAttributes.APPADDRESS,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "//XX.XX.X:8307");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sattr.setInt(JoltSessionAttributes.IDLETIMEOUT, 300);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session = new JoltSession(sattr, userName, userRole, userPassword,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; appPassword);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService = new JoltRemoteService("testServiceName", session);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.setString("sw01_1", "&lt;Hello&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.setString("sw01_2", "&lt;Hello&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.setString("sw01_3", "&lt;Hello&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.setString("sw01_4", "&lt;Hello&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.setString("sw01_5", "&lt;Hello&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.setString("sw01_6", "&lt;Hello&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.setString("sw01_7", "&lt;Hello&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.setString("sw01_8", "&lt;Hello&gt;");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; joltService.call(null);</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
<p>}</p>
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/311971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2010-02-04 15:28 <a href="http://www.blogjava.net/jinfeng_wang/archive/2010/02/04/311971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TUXEDO超时控制全功略 zz</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278089.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Tue, 26 May 2009 13:15:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278089.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/278089.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/278089.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/278089.html</trackback:ping><description><![CDATA[http://kimva.blogbus.com/logs/10795776.html<br />
http://kimva.blogbus.com/logs/10795836.html<br />
<br />
<p>摘要：<br />
　　本《功略》集中了TUXEDO应用中，可能涉及到的所有时间参数，并分别对其进行详细描述，不但对其出处、取值等基本属性进行查证，而且，通过分析其内在的控制机制，给出设置建议，以期能够达到透彻理解、方便查阅、准确使用的目的。</p>
<p>1 前言<br />
　　金融、电信等众多行业的综合营业系统中，广泛使用了TUXEDO交易中间件，用来处理大量并发的联机事务处理（OLTP）业务。典型的OLTP业务，每笔业务的信息量较小，而且，具有一定的实时性，对时间的要求非常严格。</p>
<p>　　TUXEDO，联系着DATABASE和客户端软件，凭借其多层次的超时控制机制，达到客户端快速响应，服务器端稳定可靠的效果。</p>
<p>　　TUXEDO的多层次的超时控制机制中，涉及到的时间参数不少于10个，再加上与之紧密联系的DATABASE中的几个超时参数，确实比较复杂。遗憾的是，目前还没有的专门的文档对它们进行详细说明，而是分散在不同的专题中分别说明，而且，不同的专题中，解释的详细程度也不一样，在查阅过程中，多有不便。</p>
<p>　　本文试图将这些参数集中起来，对每一个都加以详细说明，并试图解释每个参数存在的原因。大部分参数时间长短的设置，除个别外，基本没有固定的模式，只要了解它们的具体含义，并结合具体应用系统的实际要求，相信大家都能够作出合理的配置。</p>
<p>2 全功略解读<br />
2.1 SCANUNIT<br />
2.1.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; RESOURCES -&gt; SCANUNIT 。</p>
<p>2.1.2 时间单位<br />
　　秒,且必须为5的倍数。</p>
<p>2.1.3 取值范围<br />
　　大于0小于等于60中5的倍数，即｛5，10，15，20，25，30，35，40，45，50，55，60｝。</p>
<p>2.1.4 默认取值<br />
　　10 。</p>
<p>2.1.5 用途解释 ⑴<br />
　　这个参数大家都会用，比较好理解，TUXEDO中，BBL是用来对Bulletin Board进行管理和监控的系统进程，它基于时间片的轮询方式，时间片的大小就是SCANUNIT的值，SCANUNIT是Tuxedo对系统进行管理的最基本时间单位。每隔SCANUNIT，BBL对Bulletin Board进行一次检查，看看有没有超时的事务或阻塞的服务请求。后面讲到的很多时间参数都是以SCANUNIT为单位。</p>
<p>2.1.6 超时后果<br />
　　仅仅是个轮询时间单位而已，到时间就轮询，如此而已。</p>
<p>2.1.7 设置考虑<br />
　　作为一个涉及到整个TUXDO系统的基本单位时间，如果业务需要，对时间参数控制比较严格，设置为5也不算小。如果系统业务对时间要求不严格，那就大点儿，60也没什么不可以；毕竟频繁轮询是要耗费更多系统资源的，而任何对资源的不必要的消耗都是浪费。</p>
<p>2.2 SANITYSCAN<br />
2.2.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; RESOURCES -&gt; SANITYSCAN 。</p>
<p>2.2.2 时间单位<br />
　　SCANUNIT 。</p>
<p>2.2.3 取值范围<br />
　　1 ～32767 。</p>
<p>2.2.4 默认取值<br />
　　大约120/SCANUNIT。</p>
<p>2.2.5 用途解释 ⑵<br />
　　进行系统健全性检查，主要包括Server进程状态和Bulletin Board数据结构，检查Server进程是否存活，如果已经不存在，会清理Bulletin Board中相应的数据项及IPC资源，并根据参数配置决定是否重新启动，如果设了RESTART=Y，所占的Message Queue不会被清除，Queue中的Request得到保留，仍会被处理。如果是MP模式，BBL还会给DBBL发状态消息。</p>
<p>2.2.6 超时后果<br />
　　仅仅是个系统健康检查的间隔时间而已，到时间就检查，如此而已。</p>
<p>2.2.7 设置考虑<br />
　　作为一个涉及到整个TUXDO系统健康检查的间隔时间，如果系统处在一个稳定的运行环境中，网络、数据库、应用都很稳定，那这个参数可以大一些；如果运行环境不稳定，系统繁忙，而且Server进程经常因异常（如超时）而死掉，那就设置小一些。设置的原则和SCANUNIT一样：不要随意浪费系统资源。</p>
<p>2.3 BBLQUERY<br />
2.3.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; RESOURCES -&gt; BBLQUERY。</p>
<p>2.3.2 时间单位<br />
　　SCANUNIT</p>
<p>2.3.3 取值范围 ⑶<br />
　　BBLQUERY必须大于等于SANITYSCAN，tmloadcf 时会强制检查，如果设的值小于SANITYSCAN，tmloadcf会自动调整为SANITYSCAN。</p>
<p>2.3.4 默认取值<br />
　　大约300/SCANUNIT。</p>
<p>2.3.5 用途解释 ⑷<br />
　　BBL检查，在MP模式下，BBL会每隔一段时间都发送了" I am ok "心跳信息给DBBL，这个间隔就是BBLQUERY。</p>
<p>2.3.6 超时后果 ⑸<br />
　　如果DBBL在规定时间间隔内没有收到某个BBL的信息，DBBL它会主动发送Request给那个BBL，判断其是否正常。（如果等了DBBLWAIT后仍然没有回复，DBBL会认为那台机器有问题，然后，将其隔离。）</p>
<p>2.3.7 设置考虑<br />
　　此设置仅仅在MP模式下才起作用。</p>
<p>　　在MP模式下，如果TUXEDO系统需要对不稳定的运行环境可能发生的故障作出快速的反应，那么BBLQUERY要设置小一些，让系统快速的自我检查。考虑网络传输时间、系统反应速度等因素，网络速度越慢，系统负载越重，取值越大；反之亦然。</p>
<p>　　如果系统运行环境很稳定，利用其默认值即可，甚至可以更大数值。</p>
<p>2.4 DBBLWAIT<br />
2.4.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; RESOURCES -&gt; DBBLWAIT。</p>
<p>2.4.2 时间单位<br />
　　SCANUNIT。</p>
<p>2.4.3 取值范围<br />
　　大于0。</p>
<p>2.4.4 默认取值<br />
　　1和20/SCANUNIT中的较大者 。</p>
<p>2.4.5 用途解释 ⑹<br />
　　如果DBBL在规定时间间隔BBLQUERY内没有收到某个BBL的"I AM OK"信息，它会发Request给那个BBL，其等待回复的时间就是DBBLWAIT。</p>
<p>2.4.6 超时后果 ⑺<br />
　　DBBL等了DBBLWAIT后仍然没有回复，DBBL会认为相关BBL的机器有问题，然后，将其隔离（partation）。</p>
<p>2.4.7 设置考虑<br />
　　此设置仅仅在MP模式下才起作用。</p>
<p>　　在MP模式下，考虑网络传输时间、系统反应速度等因素，网络速率越大，系统负载越轻，此数值越小；反之亦然。</p>
<p>2.5 BLOCKTIME<br />
2.5.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; RESOURCES -&gt; BLOCKTIME。</p>
<p>2.5.2 时间单位<br />
　　SCANUNIT。</p>
<p>2.5.3 取值范围<br />
　　大于0。</p>
<p>2.5.4 默认取值<br />
　　大约60/SCANUNIT。</p>
<p>2.5.5 用途解释<br />
　　Client端阻塞请求（Blocking call）服务的超时值，BBL发现有超时的Request时，会给相应的Client端发超时信息。</p>
<p>　　此参数仅仅在"阻塞请求"的情况下起作用，因此，理解它，关键要理解什么是阻塞请求（Blocking call）？习惯上，我们将"阻塞请求"理解为"同步请求"，将"异步请求"理解为"非阻塞请求"，是源于将"&lt;发送请求－得到结果&gt;"这一过程看成为一个整体。如果是整体的同步操作，就认为是"阻塞请求"；如果是分开异步的操作，就认为是"非阻塞请求"。</p>
<p>　　其实，异步操作中，同样存在"阻塞请求"，tuxedo中，tpacall和tpgetrply这两个异步操作各自本身就是"阻塞请求"，tpacall是将请求发送到请求队列，tpgetrply是将从结果队列中取出结果，如果没有特殊的设置，这两个操作本身都是阻塞的，BLOCKTIME将起作用。</p>
<p>　　以Request/Reply方式为例，将成功发送请求的时长设置为T1，将请求处理的时长(含排队等待)设置为T2,将成功取得结果的时长设置为T3，那么在下面不同的情况下，将触发BLOCKTIME，引起超时：</p>
<p>　　（1） tpcall（）不在transaction中，flag为0，当T1+T2+T3 &gt; BLOCKTIME时，发生超时 ;</p>
<p>　　（2） tpcall（）不在transaction中，flag为TPNOBLOCK，只有当一次调用即成功完成T1阶段发送请求的任务后，T2+T3 &gt; BLOCKTIME时，发生超时 ; </p>
<p>　　（3） tpacall（）不在transaction中，flag为0，当T1 &gt; BLOCKTIME时，发生超时 ;</p>
<p>　　（4） tpgetrply（）不在transaction中，flag为0，当T2+T3 &gt; BLOCKTIME时，发生超时 ;</p>
<p>　　（5） tpcall，tpacall,tpgetrply,在其他任何情况，BLOCKTIME都将不起作用。</p>
<p>　　（6） 如果请求处于事务交易（transaction）中，此参数不起作用，取代它的是 TransactionTimeOut。</p>
<p>2.5.6 超时后果<br />
　　在上面描述的四种情况下，Server端 BBL返回Client端超时错误：tperrno ＝ 13 （TPETIME）。同时，client端和Server端已经建立的联接不受任何影响，继续保持联接。</p>
<p>2.5.7 设置考虑<br />
　　此参数涉及整个TUXEDO系统，不能够直接适应业务系统中不同场合的不同时间等待要求，而且在应用过程中，存在误差，不适合进行精确到秒的时间控制。</p>
<p>　　准确有效的使用这个参数，需要考虑好以下几个问题： </p>
<p>　　（1） 应用中是否完全依赖这个参数进行时间控制？</p>
<p>　　（2） 有哪些业务依赖这个参数进行时间控制？</p>
<p>　　（3） 平衡各种业务，此参数设置为多少？</p>
<p>　　（4） 除此参数外，是否需要利用其他的超时控制机制？</p>
<p>2.6 WSL CLOPT [-T Client_timeout]<br />
2.6.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; SERVERS -&gt; WSL -&gt; CLOPT "-T"。</p>
<p>2.*** 默认取值<br />
　　0 ，意味着无限等待时间。</p>
<p>2.6.5 用途解释 ⑻<br />
　　系统允许的Client静默时长，即Client和WSH建立联接后，如果在此指定的时间内客户端没有发送任何请求，WSH会自动回收与此Client端相关的资源。</p>
<p>2.6.6 超时后果 ⑼<br />
　　WSH会自动释放和这个Client端的联接，并将此Client在Bulletin Board中的数据项清空，RollBack它未完成的事务 。</p>
<p>2.6.7 设置考虑<br />
　　此参数的设置目的，主要是从Server的角度进行考虑，防止在Client端意外失效的情况下仍然耗费Server端的资源。</p>
<p>　　如果设置太小，那么频繁的检测同样要消耗Server端一定的资源，而且，在使用长联接的系统中，系统空闲时，容易造成已经建立的长联接频繁的释放，影响正常业务的提供。</p>
<p>　　如果设置为0，不管发生什么状况，哪怕是Client端系统真的崩溃了，也不会触发此超时，这将造成Server端资源的无谓浪费。</p>
<p>　　建议：在业务负载不均衡的长联接业务系统中，根据业务实际空闲时间，适当加大此数值。</p>
<p>2.7 WSL CLOPT [-t timeout]<br />
2.7.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; SERVERS -&gt; WSL -&gt; CLOPT "-t"。</p>
<p>2.7.2 时间单位<br />
　　SCANUNIT。</p>
<p>2.7.3 取值范围<br />
　　大于0。</p>
<p>2.7.4 默认取值<br />
　　非安全应用为3，安全应用为6 。</p>
<p>2.7.5 用途解释<br />
　　建立联接时长，指workstation Client建立与server端WSH建立联接允许的最长时间，因为非安全应用建立联接时不需要进行用户校验等步骤，因此，建立联接需要的时间较短。同理，安全应用需要的时间较长。</p>
<p>2.7.6 超时后果<br />
　　建立联接失败。</p>
<p>2.7.7 设置考虑<br />
　　设置此参数，要分析业务系统中，网络带宽因素、用户验证的复杂程度等。<br />
<br />
<br />
</p>
<p>2.8 WSL CLOPT [-I init_timeout]<br />
2.8.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; SERVERS -&gt; WSL -&gt; CLOPT "-I"。</p>
<p>2.8.2 时间单位<br />
　　秒。</p>
<p>2.8.3 取值范围<br />
　　大于0。</p>
<p>2.8.4 默认取值<br />
　　60 。</p>
<p>2.8.5 用途解释 ⑽<br />
　　WorkStation Client端和后台建立联接的超时参数值。</p>
<p>　　（注：感觉上此参数和 WSL CLOPT [-t timeout]功能类似）</p>
<p>2.8.6 超时后果<br />
　　不确定，现有的文档没有一点儿解释。按照字面解释，应该是tpinit的超时时间，但是，在tpinit所有的错误中，只有TPESYSTEM可能承担这个超时后果，而且仅仅是可能。</p>
<p>2.8.7 设置考虑<br />
　　在使用过程中，没有感觉到这个参数的存在，也从来没有专门设置过。</p>
<p>2.9 WSL CLOPT [-N network_timeout]<br />
2.9.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; SERVERS -&gt; WSL -&gt; CLOPT "-N"。</p>
<p>2.9.2 时间单位<br />
　　秒。</p>
<p>2.9.3 取值范围<br />
　　大于等于0。</p>
<p>2.9.4 默认取值<br />
　　0 。</p>
<p>2.9.5 用途解释<br />
　　网络超时，指Workstation client利用网络接收数据（receive data）的等待时间。</p>
<p>　　我们同样需要分析触发Network Timeout的不同条件。</p>
<p>　　以Request/Reply方式中的tpcall为例，将成功发送请求的时长设置为T1，将请求处理的时长(含排队等待)设置为T2,将成功取得结果的时长设置为T3，那么在如下情况下，将触发Network Timeout，引起超时：</p>
<p>　　（1） tpcall（）不在transaction中，flag为0，当 BLOCKTIME&gt; T1+T2+T3 &gt; NetworkTimeout时，触发此超时 ;</p>
<p>　　（2） tpcall（） 在transaction中，flag为0，当TranactionTimeout&gt; TI+T2+T3 &gt; NetworkTimeout时，触发此超时 ;</p>
<p>　　（3） tpcall（）不在transaction中，flag为TPNOBLOCK，只有当一次调用即成功完成T1阶段发送请求的任务后，当 BLOCKTIME&gt; T2+T3 &gt; NetworkTimeout时，触发此超时 ;</p>
<p>　　（4） tpcall（）在transaction中，flag为TPNOBLOCK，只有当一次调用即成功完成T1阶段发送请求的任务后，当 TranactionTimeout&gt; T2+T3 &gt; NetworkTimeout时，触发此超时 ;</p>
<p>　　（5） tpcall（）不在transaction中，flag为TPNOTIME，当 T1+T2+T3 &gt; NetworkTimeout时，触发此超时 ;</p>
<p>　　（6） tpcall（）在transaction中，flag为TPNOTIME，当 TranactionTimeout&gt; TI+T2+T3 &gt; NetworkTimeout时，触发此超时 ;</p>
<p>　　（7） tpcall在其他任何情况，NetworkTimeout都将不起作用。</p>
<p>　　（8） 同理，可以确定NetworkTimeout在tpacall和tpgetrply中起的作用。</p>
<p>2.9.6 超时后果<br />
　　在上面描述的六种情况下， Client端操作失败，同时，client端断开与Server端已经建立的联接。Server端已经为此Client完成的操作和分配的资源不能立刻回滚和释放，Server端需要等待前面介绍过的Client_timeout时间后，再释放相关的资源。</p>
<p>2.9.7 设置考虑<br />
　　此参数的设置目的，主要是从Client的角度进行考虑，防止在Server端意外失效的情况下，仍然消耗Client端的资源。</p>
<p>　　设置参数，必须避免小于BLOCKTIME或TransactionTimeout的情况，因为在这种情况下，会出现业务正常等待中，联接却中断的现象，这是一定要避免的。</p>
<p>　　同时，由于此超时触发的联接中断，并不能立刻释放Server端的资源，带来业务执行过程中的不确定性，因此，此参数要谨慎使用。</p>
<p>2.10 SVCTIMOUT<br />
2.10.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; SERVICES -&gt; SVCTIMEOUT 。</p>
<p>2.10.2 时间单位<br />
　　秒</p>
<p>2.10.3 取值范围<br />
　　大于等于0。</p>
<p>2.10.4 默认取值 <br />
　　0，表示无限时长 。</p>
<p>2.10.5 用途解释<br />
　　服务处理时长（Service Processing Time），表示系统允许服务处理请求的时间长度。</p>
<p>　　此参数主要是维护Server端系统安全的角度，防止由于系统异常引起的失控服务占据系统资源，阻碍正常的后续业务请求。它起到了一个清道夫的作用，将不能有效提供服务的Services清除出系统，并依靠系统的其他机制，重新产生具有活力的Services。</p>
<p>2.10.6 超时后果<br />
　　超时后，此Service所属的Server将被系统的SIGKILL信号清除；此操作不会影响与此Server相关的其他正在运行的副本Servers。</p>
<p>　　如果系统设置SERVERS-&gt;RESTART=Y，那么，被清除的Server将立刻自动重新启动。重新启动的次数受随后介绍的MAXGEN和GRACE两个参数联合限制。</p>
<p>　　如果系统设置SERVERS-&gt;RCMD为有效命令文件，那么，在重启此Server时，将同时执行此命令，如向管理员发送通知邮件等。</p>
<p>　　如果SERVER没有RESTART＝Y设置，那么Server将不会自动重新启动。</p>
<p>2.10.7 设置考虑<br />
　　此参数不是系统全局参数，而是涉及到单个Service，可以根据不同的Service的处理时间进行设置。由于其主要起到系统清道夫的角色，因此，建议设置为正常Service处理时长的3倍较合适，以避免清除正常运行的Service，使正常运行的业务受到影响。</p>
<p>　　如果系统运行环境基本稳定，一旦出现底层网络或数据库系统故障，不是在短时间内能够恢复，建议将此参数增大，至少为平均恢复时间，甚至可以利用默认值0，无限等待，避免此自动机制，而用人工介入的方法进行服务恢复。因为系统自动的、频繁的SIGKILL将影响到整个TUXEDO系统的稳定。</p>
<p>2.11 GRACE<br />
2.11.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; SERVERS -&gt; GRACE 。</p>
<p>2.11.2 时间单位<br />
　　秒。</p>
<p>2.11.3 取值范围<br />
　　0-2147,483,647。</p>
<p>2.11.4 默认取值<br />
　　86400（24小时）。</p>
<p>2.11.5 用途解释<br />
　　此时间参数与其他两个参数紧密相关RESTART, MAXGEN。</p>
<p>　　关联起来解释就是，当Server异常终止时，如果RESTART=Y，那么此SERVER可立即自动重新启动，这个重新启动的次数被限制为在GRACE指定的时间间隔内，重启不超过MAXGEN-1 次。</p>
<p>　　如果RESTART这个参数为N，其他的相关参数将都无效。</p>
<p>2.11.6 超时后果<br />
　　此参数不仅仅是时间的限制，如果在GRACE时间段内，此SERVER重启次数已经达到MAXGEN-1，后续重启将不能执行。</p>
<p>2.11.7 设置考虑<br />
　　此组参数设置的综合目的是避免运行Server无限的重启，重启次数说明了系统目前异常状况的严重程度，如果在一定时间内，Server重启次数达到了一定的数量，说明这个Server相关的资源已经出现较严重的故障，需要人工进行干预了。</p>
<p>　　另外，经过调优的生产系统是不需要自动重启的，因此，RESTART这个参数更多是应用在系统测试版本中，在正常运行的生产系统中，应该有不同参数设置，谨慎使用，因为过多的重启将有可能严重影响Server端的整体稳定性。</p>
<p>2.12 Transaction TimeOut<br />
2.12.1 参数出处<br />
　　tpbegin(timeout,0)。</p>
<p>2.12.2 时间单位<br />
　　秒,且必须为SCANUINT的倍数。</p>
<p>2.12.3 取值范围<br />
　　大于等于0。</p>
<p>2.12.4 默认取值<br />
　　无，使用时必须明确指定。</p>
<p>2.12.5 用途解释<br />
　　交易时长，确定交易（transaction）的持续时间，如果超过此时间，系统将返回超时错误。</p>
<p>　　分析其触发条件，分两种情况：</p>
<p>　　（1） Server端发起交易，</p>
<p>　　对Client而言，因为Client不在交易范围内，即使BLOCKTIME设置小于此参数，起有效作用的仍然将是BLOCKTIME，而不是此参数。</p>
<p>　　（2） Client端发起交易。</p>
<p>　　对Client而言，因为Client在交易范围内，此时，BLOCKTIME将失效，此参数取而代之。只要处理时间超过此参数，将触发此超时，交易处理将随时中断。</p>
<p>2.12.6 超时后果<br />
　　相关交易将被标识为abort only。注意，仅仅是标识为abort only，而不是系统自动执行tpabort进行交易恢复。随后必须主动执行tpabort，恢复交易，保障交易完整性。如果没有执行tpabort，系统将通过其他机制，恢复交易，保障交易完整性。</p>
<p>2.12.7 设置考虑<br />
　　此参数的主要目的是将交易处理过程限制在合理的时间范围内，如果确实是完成交易的条件不具备，系统也能够作出反应，避免系统资源的长时间占用。因此，不管交易由Client还是由Server发起，此参数都要按照业务的实际状况进行设置。如果设置为0，就基本相当于无限时长。（系统unsigned long数据类型的最大值）</p>
<p>2.13 TRANTIME<br />
2.13.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; SERVICES -&gt; TRANTIME/AUTOTRAN。</p>
<p>2.13.2 时间单位<br />
　　秒,且必须为SCANUNIT的倍数。</p>
<p>2.13.3 取值范围<br />
　　0-2147,483,647。</p>
<p>2.13.4 默认取值<br />
　　30 。</p>
<p>2.13.5 用途解释<br />
　　此参数必须与AUTOTRAN配合使用，表示不需要调用tpbegin，就可自动发起的隐含交易（AUTOTRAN implicitly transactions）处理持续时长。其实，起到与tpbegin（timeout,0）中的timeout相同的作用。</p>
<p>　　其实，AUTOTRAN这个参数更为重要，其默认值为N, 其作用描述如下：</p>
<p>　　（1） 请求发起方不在交易模式，AUTOTRAN＝Y，Service将自动发起一个交易，TRANTIME将起作用；</p>
<p>　　（2） 请求发起方在交易模式，而且，其中的标记参数（flags）不是TPNOTRAN，那么，无论AUTOTRAN如何，Service将自动加入请求方交易中，TRANTIME将不起作用；</p>
<p>　　（3） 请求发起方在交易模式，而且，其中的标记参数（flags）是TPNOTRAN，如果AUTOTRAN＝N，Service将自动加入请求方交易中，TRANTIME将不起作用；</p>
<p>　　（4） 请求发起方在交易模式，而且，其中的标记参数（flags）是TPNOTRAN，如果AUTOTRAN＝Y，Service将不加入请求方交易中，而是产生一个新的交易，TRANTIME将在新交易中起作用；</p>
<p>2.13.6 超时后果<br />
　　与tpbegin(timeout,0)中的timeout相同。</p>
<p>2.13.7 设置考虑<br />
　　与tpbegin(timeout,0)中的timeout相同。</p>
<p>2.14 ORACLE XA OPENINFO参数：SESTM<br />
2.14.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; GROUPS -&gt; OPENINFO -&gt;SESTM 。</p>
<p>2.14.2 时间单位<br />
　　秒。</p>
<p>2.14.3 取值范围<br />
　　大于等于0，0表示无限时长。</p>
<p>2.14.4 默认取值<br />
　　无，使用时必须明确设置 。</p>
<p>2.14.5 用途解释<br />
　　会话静默等待时长，即全局交易中，作为资源管理器（resource manager）已经参与交易并完成相应的数据操作的数据库，等待全局交易中的其他参与方操作完成的时间长度。</p>
<p>　　举例说明：</p>
<p>　　假设一个全局交易由以下几个部分组成：</p>
<p>　　（1）tpbegin（T,0） -&gt; </p>
<p>　　（2）tpcall(S1) -&gt; DB1 完成耗时 T1;</p>
<p>　　（3）tpcall(S2) -&gt; DB2 完成耗时 T2;</p>
<p>　　（4）其他操作 耗时 T3</p>
<p>　　（5）tpcommit()</p>
<p>　　其中，tpcall(S1)访问数据库DB1, tpcall(S2)访问数据库DB2。</p>
<p>　　对DB1而言，如果T-T1&gt; T2+T3 &gt; SESTM1,则触发超时；</p>
<p>　　对DB2而言，如果T-T1-T2 &gt; T3 &gt; SESTM2,则触发超时；</p>
<p>　　由此可以看出，此参数的主要目的是对数据库进行资源保护，避免在全局交易中，已经完成任务的数据库，为等待其他参与方耗费过多的资源，毕竟ORACLE中并发全局交易的数量是很有限的。</p>
<p>2.14.6 超时后果<br />
　　触发此超时后，数据库将自己主动回滚已经完成的任务，释放全局交易资源。TUXEDO控制的全局交易进行TPCOMMIT时，如果总时间仍没有超过Transaction TimeOut，那么TPCOMMIT将失败，XALOG会记录下ORACLE错误："ORA-24756: Transaction does not exist"。确实如此，拿上面的例子来说，等到最后TPCOMMIT的时候，DB1已经主动回滚了所有的数据，不难理解，对DB1而言，它好像根本没有参加过这个全局交易，自然就会有这样的错误提示。</p>
<p>2.14.7 设置考虑<br />
　　这个参数是从数据库自我保护的角度设计的，对数据库而言，是不得已的办法。最好的措施还是TUXEDO能够控制时间，赶在SESTM之前，进行TPABORT，主动通知数据库进行数据回滚。</p>
<p>　　用一个简单的比方：冬天，客人出门时没有关门，SESTM时间后，客人还没有回来，主人感觉到冷了，只好自己去关门，不管什么理由，这样总是不太好。如果在SESTM时间内，客人能及时回来关门，主人就不会感觉那么差。</p>
<p>　　从前面的超时触发分析，我们也能发现，只要设置SESTM 能够大于 TransactionTimeOut的话，就能够尽量的不触发此超时机制，达到较好的效果。</p>
<p>2.15 ORACLE XA OPENINFO参数：SESWT<br />
2.15.1 参数出处<br />
　　UBBCONFIG配置文件 -&gt; GROUPS -&gt; OPENINFO -&gt; SESWT。</p>
<p>2.15.2 时间单位<br />
　　秒。</p>
<p>2.15.3 取值范围<br />
　　大于0。</p>
<p>2.15.4 默认取值<br />
　　60 。</p>
<p>2.15.5 用途解释<br />
　　会话繁忙等待时长，指全局交易中的一个交易分支（transaction branch）正在一个会话（session）中处理数据过程中，如果第二个会话也要对此交易分支进行操作，那么第二个会话必须等待第一个会话完成，如果在等待SESWT后，第一个会话仍然没有完成，那么第二个分支将触发此超时。</p>
<p>　　举例说明：</p>
<p>　　假设一个全局交易由以下几个部分组成：</p>
<p>　　（1）tpbegin（T,0） -&gt; </p>
<p>　　（2）tpcall(S1) -&gt; DB1 完成数据操作耗时 T1;</p>
<p>　　（3）tpcall(S2) -&gt; DB2 完成数据操作耗时 T2;</p>
<p>　　（4）其他操作 耗时 T3</p>
<p>　　（5）tpcommit()</p>
<p>　　其中，tpcall(S1)访问数据库DB1, tpcall(S2)访问数据库DB2，任何操作失败后，将调用tpabort。</p>
<p>　　假设 T1+T2 &gt; T &gt; T1，也就是说，在成功执行第二步tpcall(S1)后，应用执行到第三步tpcall(S2)，在执行过程中，将触发TransactionTimeout，tpcall（S2）将返回错误，应用将立即调用tpabort进行交易回滚，DB1的数据将立刻回滚；而DB2并不能中断tpcall(S2)引起的数据操作，对于ORACLE DB2而言，tpcall(S2)引起的数据操作属于第一个会话，而tpabort引起的数据库回滚操作是通过XA接口，属于第二个会话，所以，tpabort作用到DB2上，只有等待第一个会话完成，如果等待SESWT后，第一个会话仍然没有完成，即SESTM </p>
<p>2.15.6 超时后果<br />
　　系统将返回XA_RETRY错误，提示TMS此操作不能完成，需再试一次。如果应用程序对此没有再次尝试的话，仍以上例说明，DB2只能利用SESTM2，触发超时，自动回滚。</p>
<p>2.15.7 设置考虑<br />
　　查阅ORACLE相关资源，发现oracal9.2与以前版本效果不同，以前的版本都是第二个会话在等待SESWT后，如果第一个会话操作仍然没有结束，第二个会话能够使第一个会话操作立即进行有效的回滚，使第一个会话返回错误：ORA-24761。</p>
<p>　　不难理解，两者的区别是，打个简单比方说，A正在用杯子喝水时，B要A放下杯子，B等待SESWT后：</p>
<p>　　oracle9.2的做法很民主，A还没有用完，通知B，A还在用杯子，不能放下，还想让A放下杯子，可以，再来一次；也就是说，只要A在用，B就不能让人家放下杯子，某种程度上，A代表了强权。</p>
<p>　　Oracle9.2之前版本的做法很粗暴，通知A不能使用这个杯子了，必须放下，因为B让你放下，而且已经等很久了，某种程度上，B代表了强权。</p>
<p>　　因此，如果是ORACLE9.2后的版本，SESWT适当放长一些，毕竟还是希望能够等到能做事的时候，把想做的事情做了。如果是以前的版本，SESWT适当放短一些，反正一定能等到，为什么不少等一会儿呢？</p>
<p>2.16 ORACLE sqlnet.expire_time<br />
2.16.1 参数出处<br />
　　$ORACLE_HOME/network/admin/sqlnet.ora -&gt; expire_time 。</p>
<p>2.16.2 时间单位<br />
　　分钟。</p>
<p>2.16.3 取值范围<br />
　　大于0。</p>
<p>2.1*** 默认取值<br />
　　无 。</p>
<p>2.16.5 用途解释 ⑾<br />
　　死联接检测DCD(Dead Connection Detection)是 SQL*NetV2.1 和此版本以后的一个新特性, 当它检测到对方 c/s 或者s/s 联接意外终止时, 释放相关占用的资源。 </p>
<p>　　DCD 起初是专为客户机没有从会话中断开联接的情况下断电的环境设计的。 </p>
<p>　　DCD由服务端开始建立联接。 这时候SQL*Net 从参数文件中读取变量, 设置一个定时器定时产生信号。 这个时间间隔是sqlnet.ora文件中的SQLNET.EXPIRE_TIME提供的。 </p>
<p>　　当定时器设定的时间到了之后, 服务器上的SQL*Net 发送一个探测包到客户端。(如果是数据库联接, 目的端的服务器发送探测包到另一端)。 探测包是由空的SQL*Net包组成, 不体现SQL*Net层任何数据, 但会在下一层的网络协议中产生数据流量。 </p>
<p>　　如果客户端的联接仍然是活动的, 探测包被丢弃,计时装置复位。 如果客户端异常断掉，服务器将收到由发送探测包的调用发出的错误。 </p>
<p>2.16.6 超时后果<br />
　　服务器将收到由发送探测包的调用发出的错误，SQL*Net 将会通知操作系统释放联接占用的资源。</p>
<p>　　需要说明的是, SQL*Net 2.1.x中 一个活动的孤儿进程（active orphan process） ，如单独的查询进程，在查询完成之前不会被杀掉。 在SQL*Net 2.2中，孤儿进程占用的资源将会被无条件释放，不管查询是否结束。 </p>
<p>2.16.7 设置考虑<br />
　　ORACLE 在NT操作系统上，此功能表现很差，检测出的无效联接（dead connection）不能被尽快释放，而必须等到数据库重新启动时才释放。SQL*Net v2.3以后版本改善了以上问题。</p>
<p>　　此功能只是服务器的特性，如果不设置此参数，此功能将不启动。按照ORACLE的建议，对大多数应用来说，设置10分钟较合适，其实关键还是分析应用系统的实际情况。</p>
<p>　　同时，不难理解，作为一个数据库自我管理的机制，也是要占用数据库资源和网络资源的，太频繁的探测同样会降低系统和网络的性能。在低速网络上，设置此参数，就需更为慎重。</p>
<p>　　客户端不需要设置此参数。</p>
<p>2.17 ORACLE distributed_lock_timeout<br />
2.17.1 参数出处<br />
　　ORACLE初始参数文件：init.ora -&gt; distributed_lock_timeout。</p>
<p>2.17.2 时间单位<br />
　　秒。</p>
<p>2.17.3 取值范围<br />
　　大于0。</p>
<p>2.17.4 默认取值<br />
　　60 。</p>
<p>2.17.5 用途解释<br />
　　分布式事务锁等待超时（distributed transaction waiting for lock），指第二个事务处理需要的数据库资源，正被第一个分布式事务占用而锁定，那么，第二个事务将等待第一个分布式事务释放此资源，等待distributed_lock_timeout时间后，如果第一分布式事务仍然没有释放此资源，第二个事务触发此超时。</p>
<p>2.17.6 超时后果<br />
　　如果资源被第一个事务正常使用锁定，ORACLE回滚第二个事务，并返回错误："ORA-02049: time-out: distributed transaction waiting for lock "。</p>
<p>　　如果第一个事务处理完成，资源释放后，再尝试第二个事务，就会成功。如果第二个事务不能等待资源自动释放，那么可以采用处理数据库死锁（deadlock）的措施，人工介入，清除第一个事务，但一般不建议采用这种方式，因为第一个事务一般会正常结束的。</p>
<p>　　如果资源被第一个事务因为处于不确定分布事务状态（in-doubt distributed transaction）而锁定，ORACLE回滚第二个事务，并返回错误："ORA-01591: lock held by in-doubt distributed transaction identifier "。</p>
<p>　　这种错误遇到的可能性较小，一般只有在分布事务的关键提交阶段出现网络、系统故障，才可能出现此故障，而且，当网络、系统故障恢复后，ORACLE一般可以自己解决此问题，不需要人工介入。如果一定要人工介入，可以查阅ORACLE专门的手册。</p>
<p>2.17.7 设置考虑<br />
　　出现这样的超时，是因为特定数据库资源的使用碰撞，要分析应用系统的业务特点，确定碰撞可能发生的条件，在此条件下，资源可能被先来者锁定多长时间（T1），后来者又能够等多长时间（T2），再来设置此参数（T）的大小。如果在大多数情况下，T1 &lt; T2, 那么就设置T1 &lt; T &lt; T2；反之，大多数情况下，T1 &gt; T2，那么，就设置T &lt; T2。</p>
<p>　　因此，不分析业务特点，一味的增大和减小是不恰当的。</p>
<p>2.18 ORACLE Max_commit_propagation_delay<br />
2.18.1 参数出处<br />
　　ORACLE初始文件:init.ora -&gt; Max_commit_propagation_delay。</p>
<p>2.18.2 时间单位<br />
　　0.01秒。</p>
<p>2.18.3 取值范围 <br />
　　0 ～ 90000。</p>
<p>2.18.4 默认取值<br />
　　700 。</p>
<p>2.18.5 用途解释<br />
　　最大提交传播时延（MAX_COMMIT_PROPAGATION_DELAY，简称MCPD），在ORACLE RAC(或OPS)环境中才使用，表示在RAC系统中，一个instance系统提交产生的最新系统改变码（SCN），能够以多快的速度反应到另一个instance中。</p>
<p>　　举例说明，RAC系统，有A,B两个实例（instance），A、B本地系统改变码为SCN1，A更新数据DATA1提交， LGWR操作完成后，A本地系统改变码为SCN2，经过不大于MAX_COMMIT_PROPAGATION_DELAY时间后，B系统本地改变码才变为SCN2。</p>
<p>2.18.6 超时后果<br />
　　Global Cache Services 将刷新RAC中的SCN。不管SCN是否及时刷新，后续的数据查询都不会因此产生数据库错误。但，在此时间内，有可能查询结果不是最新数据，产生读一致性（read consistency）问题。</p>
<p>2.18.7 设置考虑<br />
　　RAC环境中的所有实例，此参数值必须相同。</p>
<p>　　ORACLE8i后，建议常用的两个值是0和700（默认），其他数值皆不建议。其实，这两个数值就代表了RAC环境中，两种SCN 产生机制：</p>
<p>　　Lamport Scheme和 Broadcast on Commit scheme。</p>
<p>　　设置为默认值700，表示采用Lamport Scheme，SCN改变不会完全同步，同步将在 7秒钟内完成，而不是总等待7秒钟后才完成。如果系统比较空闲，同步可能在0.5秒（甚至更短时间）内完成；不管系统多繁忙，同步时间也不可能超过7秒。不难理解，采用此模式，整个RAC系统的运行效率较高。</p>
<p>　　设置为0，表示采用Broadcast on Commit scheme，SCN改变完全同步。每当commit时（即LGWR 写redo log时）：</p>
<p>　　－ LGWR发送消息更新全局SCN（global SCN），</p>
<p>　　－ LGWR 发送消息给每个活动的实例更新其本地SCN（local SCN）。</p>
<p>　　有资料说，只要MCPD &lt; 700，系统将采用Broadcast on Commit scheme。</p>
<p>　　Lamport Scheme能够适应绝大部分应用的要求，只有个别实时性特别高的业务，才需要Broadcast on Commit scheme。通过分析，不难理解，Broadcast on Commit scheme将需要更多的系统资源。</p>
<p>3 总结<br />
　　以上所有时间参数，都是tuxedo系统或ORACLE数据库系统提供的时间控制机制，更多的是从维护本系统自身安全的角度，建立起相互之间沟通的规则。在Client 端，中间件服务器，数据服务器这相互联系的三者之间，用一个简单的比方，就是先保证自己尽量不给相关人带来麻烦；一旦相关人出了麻烦，自己能够自我保障，不受别人干扰。</p>
<p>　　这些时间参数还有的一个共性的特点就是"不精确"，如果业务需要要精确到1秒，则必须依靠业务程序中更精确的时间编程。</p>
<p>　　总之，要保障整个业务系统的有效性和健壮性，必须了解都有哪些时间参数？都表示什么意思？都起哪些作用？自己的业务应用对时间要求是怎样的？这些参数该如何配置才能满足应用的要求？希望本文能够在以上方面给大家带来一点方便。</p>
<p>4 后记<br />
　　自2002年真正在项目中利用TUXEDO起，就发现已有资料在时间参数解释方面的缺憾，那时，就有写这样一个专题的打算，开始收集这方面的资料。由于后来工作内容的变化，也就没有精力再作整理，但心里一直惦记着这件事情。直到前些天知道了BEA的这个活动，再到网络上搜集资料，发现已经有了一些类似的资料，但感觉仍然不够完整，不够透彻，因此，我认为整理这样一个专题资料，还是有必要的，便下决心借此机会做完这件事情。经过近十天的查阅、整理，终于完成，算是了我多年夙愿。</p>
<p>　　文中的参数，我仅仅使用过其中的12个，其他未用参数，主要是靠查阅资料和逻辑分析，根据我自己的理解进行解释，再加上时间仓促，或遗漏、不妥之处，敬请指正，让我们一起来使此《功略》更准确、更全面，让更多的人从中受益。</p>
<p>5 参考文献<br />
<a href="http://e-docs.bea.com/">http://e-docs.bea.com</a> BEA TUXEDO RELEASE 7.1 。 <br />
<a href="http://dev2dev.bea.com.cn/techdoc/tuxedo/20030230.html">http://dev2dev.bea.com.cn/techdoc/tuxedo/20030230.html</a> 《Tuxedo 中关于时间的参数的说明》作者：不详 。 <br />
《ORACLE8i Reference》。 <br />
《ORACLE9i Reference》。 <br />
《ORACLE8i Parallel Server Concepts and Administration》。 <br />
《ORACLE8i Application Developers Guide - Fundamentals》。 <br />
<a href="http://metalink.oracle.com/">http://metalink.oracle.com</a> 相关问题解决资料。 <br />
<a href="http://www.chinaunix.net/">http://www.chinaunix.net</a> 《DCD死联接检测》作者：yukaikai <br />
　　注：文章中标注⑴～⑽涉及的内容，引自参考文献-2 ，标注⑾涉及的内容，引自参考文献-8 。</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/278089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-26 21:15 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278089.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于TUXEDO 负载均衡和MSSQ的探讨  zz </title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278088.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Tue, 26 May 2009 13:14:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278088.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/278088.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278088.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/278088.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/278088.html</trackback:ping><description><![CDATA[<a href="http://kimva.blogbus.com/logs/10795676.html">http://kimva.blogbus.com/logs/10795676.html</a>&nbsp;<br />
<br />
&nbsp;在使用TUXEDO的过程中，会遇到一些并发请求量很大的情况，比如某些帐单处理服务或者是在营业下班前的日操作清单服务。这时，一些SERVICE会接收到大量客户端，甚至长时间的请求，对service，甚至整个系统是严峻的考验。遇到这种情况，单个的server往往难以应付，或者性能不好，我们就想到负载均衡或者使用TUXEDO的MSSQ（Multi Server, Single Queue）。下面笔者根据自己在TUXEDO应用开发和管理配置方面的实践，结合实际系统压力测试的结果对相关的问题进行一些探讨。
<p>在没有负载均衡的情况下，是由一个server（可能包含一个或多个service）来处理客户端对其中service的请求，所有的请求首先放入这个server的队列里面，然后server逐个取出处理。在UNIX系统上，TUXEDO较多的使用了队列，并且也用到了共享内存和信号量，相关的UNIX系统参数会影响到系统的性能，但这个不在本文讨论范围之内，这里假设已经调到了合适的范围，具体请查阅TUXEDO关于IPC的文档。</p>
<p>现以一个帐单处理的server为例，负载均衡前server的ubb配置为：<br />
billpay SRVGRP=GROUP1 SRVID=1<br />
在单个server不能满足性能要求的情况下，就考虑采用TUXEDO的负载均衡方法。<br />
方法一是直接将相关server启多份，将上面的配置改为：<br />
billpay SRVGRP=GROUP1 SRVID=1 MIN = 5 MAX = 10<br />
这样tmboot的时候，就会有MIN = 5个billpay启动，类似下面的情况：<br />
billpay 00001.00001 GROUP1 1 0 0 ( IDLE )<br />
billpay 00001.00002 GROUP1 2 0 0 ( IDLE )<br />
（依此类推，共5个）</p>
<p>其中第二列是该server的队列名，"."前面是GRPNO,后面是SRVID，每个server有自己的队列。相关的另一个参数就是在ubb的*RESOURCES段的LDBAL，表示是否启动Load Balancing，默认是"N"（不启动），你可以通过设置成"Y"来启动。这里需要注意的是，为"N"的时候并不表示多个server不能分担负载。主要的差别是为"Y"时，TUXEDO在接收到请求时会按照它的负载均衡的算法来找到合适的server来处理，而设置成"N"时，总是由第一个可用的server来处理。通过这种方法可以让多个server来处理大量并发的请求，就达到了改善性能的目的。</p>
<p>方法二是采用MSSQ（Multi Server, Single Queue），顾名思义，就是有多份server，但是只有一个队列（请求队列）。具体的配置是：<br />
billpay SRVGRP=GROUP1 SRVID=1 MIN = 5 MAX = 10<br />
RQADDR=" billpay" REPLYQ=Y</p>
<p>启动后的情况如下：<br />
billpay billpay GROUP1 1 0 0 ( IDLE )<br />
billpay billpay GROUP1 2 0 0 ( IDLE )<br />
（依此类推，共5个）</p>
<p>我们发现几个billpay server都关联相同的名为billpay的队列，这就是所谓的Single Queue。</p>
<p>与直接多server相比，多了两个参数，RQADDR是这多个server共用的队列名，是一种逻辑名，可以自己命名，不和别的冲突就可以，REPLYQ是标示是否设置返回队列，在使用MSSQ的时候是强烈建议设置，因为这样可以将请求和返回分开，避免多个server共用队列时造成混乱。相关的其它参数这里没有详细列出。</p>
<p>到底两种方式和没有负载均衡时有什么不同，后面将提供相关的测试结果。先分析一下两种方法。方法一有多个队列可以容纳请求，但是这些大量的请求怎样放入这些队列必定有一定的策略，而且根据LDBAL的设置会不同，但是这个策略本身的运算也是一种消耗，因为每个请求都面临着这个选择。因为这种情况下每个队列是和server对应的，所以队列的选择就意味着选择了相应的那个server，这样大量的请求就被分流。虽然有选择的消耗，但是额外的好处也是显而易见的，那就是有多个queue可用，有效避免了请求并发量很大时队列的溢出，这种情况在实际的压力测试中发生过。使用方法二时，放入队列时不用做选择，然后每个server的任务就是从队列取出请求去处理，考虑到多个server并发取队列，所以用MSSQ时其server的数目不宜太多，官方文档建议2－12。而且在这种情况下，建议不要设置LDBAL=Y，因为MSSQ本身就是一种基于single queue的负载均衡的方法，这时再使用系统的策略已经没有意义。这种方法也有一个问题，如果相对于请求数来说，处理得不够快，就比第一种方法更容易造成队列溢出。</p>
<p>因为我们无法知道TUXEDO一些具体的算法和策略，那就用一些具体的测试来比较吧。笔者在一个和实际生产系统配置相同的UNIX+ORACLE+TUXEDO8.0系统上做了一下试验，被测服务是一个帐单查询服务，每次根据一批ID从数据库查询出具体的帐单，由于都是实际数据和实际使用的服务，有一定的说明力，但是也不排除一些情况造成的误差。以下是测试的一些结果，每个server的实际运行份数都是10。</p>
<p>一：客户端数目为1，循环调用100次。 </p>
<p>1． 方法一，LDBAL = Y or N。结果发现所有的请求都由其中的一个server处理，其它全部空闲。在此基础上再进行两次循环调用，结果还是一样。<br />
2． 用方法二，LDBAL = Y or N。其中两次测试的情况是：<br />
&lt;1&gt;19，19，2，2，1，18，18，1，1，19<br />
&lt;2&gt;23，8，23，23，23，（其它空闲）<br />
以上数据说明了两种方式的调度策略是不一样的，在单客户端循环的情况下方法二更合适。 </p>
<p>二：客户端数目50，每个循环80次，统计总的执行时间。<br />
1． 用single server。两次测试的处理时间分别是219s和196s。<br />
2． LDBAL = Y 方法一：三次测试时间为：63s，79s，69s<br />
3． LDBAL = N 方法一：三次测试时间为：74s，79s，85s<br />
4． LDBAL = Y 方法二：三次测试时间为：74s，73s，77s<br />
5． LDBAL = N 方法二：三次测试时间为：78s，76s，75s </p>
<p>通过以上数据可以看出不管用那种方法，使用负载均衡相比单个server都可以在大量请求并发时得到更好的性能。但是同时也发现后四种情况的总时间差别不大，考虑一些实际的误差，很难断定哪种更好。</p>
<p>通过前面的分析，并查阅相关的文档，建议采用的是两种方式：多个server，不用MSSQ,设置LDBAL = Y；用MSSQ，设置LDBAL = N。当然，在使用TUXEDO的应用系统中，不能绝对的说哪一种方式更好，只能是根据具体的情况来分析，并通过实际的压力测试来进行选择，而且这个和具体server的特点也是有关的。</p>
<p>以上是一些个人分析和测试的结果，算是写出来和大家探讨，也希望大家提出自己的看法并讨论。</p>
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/278088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-26 21:14 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中间件在电信行业中的应用 zz </title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278087.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Tue, 26 May 2009 13:13:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278087.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/278087.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/278087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/278087.html</trackback:ping><description><![CDATA[<br />
<a href="http://kimva.blogbus.com/logs/10687711.html">http://kimva.blogbus.com/logs/10687711.html</a> <br />
<br />
<p>一、中间件技术在系统设计规划方面的经验总结</p>
<p>1.1、中间件应用架构的选择 <br />
这种架构选择的焦点就是业务逻辑到底是放在前台应用中还是放在后台中间件应用中。其实，引入中间件平台的原因之一就是业务逻辑的集中管理，出现这种争论的原因主要是开发商对这种业务逻辑集中的理解不深，在应用设计的过程中仍然没有摆脱以前两层结构的影响，再加上因为业务逻辑集中会增加程序开发量，才出现了这种情况。我们认为，把业务逻辑集中在中间件服务器上不仅对于业务逻辑的集中管理有好处，而且对于系统的后期运行维护、软件的升级管理都有着明显的优势。当然,在开发的工作量方面，业务逻辑集中时工作量大很多。</p>
<p>1.2、中间件服务分布的设计和优化原则<br />
在Tuxedo中，Server可以理解成为Unix的一个进程，Service可以理解成为应用进程Server中的一个函数。用户可以任意划分Server和Service：既可以把所有的Service放在一个单一的Server中，也可以采用&#8220;一个Service一个Server&#8221;的方式。Tuxedo对此没有任何限制。<br />
中间件应用的性能直接影响到营业前台服务的稳定性和连续性，而影响中间件应用性能的因素除了硬件资源的保证、数据库响应时间、中间件应用软件本身的质量之外，中间件应用服务的分布也起着至关重要的作用。我们有着这样的一个例子，在前台进入收费界面的时候，应用程序需要调用一个SERVICE名字叫A，A分布在一个叫SA的server中，而SA中又包含着很多其他的在线统计的SERVICE B，结果造成了SA响应B调用的时候执行时间比较长，所有的SA都在执行SERVICE B ，前台请求SERVICE A得不到响应，收费的界面怎么都进不去，从而导致前台收费业务中断。这就是个典型的因为服务分布不当造成的系统故障。<br />
我们在系统规划设计过程中遵循的一个最基本原则就是尽量将&#8220;类似的Service&#8221;捆绑在一个Server之内。所谓&#8220;类似的Service&#8221;是指这些函数有相似的大小、执行时间、复杂度或者功能。我们来考虑一个极端的例子：假设一个Service A是完成非常简单工作的，它的平均执行时间是100毫秒。另一个Service B进行数据库的查询，它的执行时间可能长达20秒。如果将这两个Service捆绑在一起使用，就会出现非常严重的后果。大家知道，操作系统的基本调度单位是进程。在一个进程中的Service执行是串行的。Tuxedo把发往同一个Server的请求交易包放在同一个消息队列中。当Service B在执行的时候，Service A的请求包必须在队列里面等待20秒以上才可能被执行，虽然它的执行时间仅仅100毫秒。这显然是不能容忍和应该避免的。<br />
实际上，用户在设计和开发应用程序的时候，并不能完全估计出每个Service的执行时间和频度。所以对Server和Service的划分优化是在应用程序开发完毕后进行调整的。调整的依据就是在系统运行的时候记录每个Service的执行时间和频度，然后根据这些数据来进行优化调整。下面就是我们在实际当中获得经验的一些系统总结。<br />
1、 区分Service的不同类型：是业务操作还是简单的数据访问<br />
在中间件应用中的Service可以进一步细分成负责完成业务操作和负责数据访问的两种类型。在设计的时候，最好把这两种不同类型的Service区别出来。所谓完成业务操作的类型其实就是进行数据修改的操作，负责数据访问的类型其实就是进行数据查询的操作。但是在实际的系统运行过程中，凡是涉及到数据修改的操作过程中必然会有数据查询的操作，这种类型的操作也应该规整到第1种类型中去。<br />
2、 请求/响应类型的Service要和会话Service分开在不同的Server中<br />
在Tuxedo中，一个Server要么支持请求/响应类型类型的Service，要么支持会话方式的Service。会话方式和请求/响应方式是两种互斥的通讯方式。请求/响应方式效率比较高，是使用最频繁的通讯类型。Tpcall/tpacall/tpforward都是这种类型的函数。会话方式适合大量的数据传输，但是它的代价是效率的下降。所以这两种类型的Service要分开放在不同的Server里面。<br />
3、 执行时间相似的Service放在同一个Server里面<br />
在Tuxedo应用环境中，可能有成百上千的Service，这些Service的执行时间显然是不同的。对于单线程的Server来说，虽然它可能有多个Service，但是这些Service的执行是串行的。如果某个Server拥有两个Service，A和B。A的执行时间是100ms，B的执行时间是1000ms，也就是说执行一次B的时间可以执行十次A。那么当B在执行的时候，可能会有十个A在队列里面等待。这种情况会急剧降低该Server处理Service的吞吐率。因此很自然的一个原则是把执行时间相似的Service放在同一个Server里面。<br />
4、 具有相同执行频度的Service放在同一个Server里面<br />
在一个典型的Tuxedo应用系统中，并不是所有的Service的执行频率都是相同的。可能一些Service被频繁的执行，而另外一些Service只是偶尔才被执行几次。把这些SERVICE分开可以避免偶尔调用的SERVICE堵塞频繁调用的SERVICE。<br />
5、 避免死锁的情况发生<br />
在Tuxedo中的死锁情况有两种，第一种是一个Server中的Service A去调用同在一个Server中的Service B。这种死锁发生的原因是，对于单线程的Server来说，它其中的Service是串行执行的。Service A去调用Service B的时候，Service A还没有执行完，它等待Service B的返回结果。 但是Service B不能执行，因为该Server还处于执行Service A的状态。最终导致Service A超时而出错。<br />
第二种情况是两个Server中的Service互相调用。例如Server1和Server2，Server1中的Service A去调用Server2中的Service X。同时Server2中的Service Y去调用Server1中的Service B。这种情况发生的死锁和第一种情况非常类似，都是因为进程只能串行实行Service导致的。<br />
这两种死锁情况在应用设计时特别要注意避免。第一种情况是比较容易察觉的，但是第二种情况就不大容易察觉。<br />
1.3、中间件系统应用平台FAILOVER方式的选择在真实的生产运行环境中，运行平台的failover是一个必须考虑的问题。Tuxedo平台上的实现failover机制基本上有两种，一种是利用tuxedo自己的failover机制配合前台配两个WSNADDR地址来实现failover。一种是利用双机软件来实现。<br />
第一种方式是指使两台的中间件服务器处于MP工作模式下，在每一台都启动WSL进程，然后在中间件前台配置两个ip地址。通过自己实验发现利用tuxedo自己的failover机制只有如下好处即不需要额外的操作系统和软件的支持，但是其缺点确很多，主要缺点如下：<br />
1、两台中间件平台的MASTER切换必须要手工完成，无法自动完成。<br />
2、前台配置的两个WSNADDR地址，如果第一个地址失败，要重新连接到第二个地址需要很长的时间，并且在每次服务调用时都要等待同样的时间。<br />
通过双机软件来实现FAILOVER是指两台中间件服务器都配置在SHP模式下，然后利用双机软件的ip切换功能来实现failover。这种方法需要在各自的配置文件中加入另外一台主机的WSL的信息，在另外一台主机故障时，通过双机软件进行IP切换，再通过双机切换脚本将这台主机的备用WSL启动即可。采用这种方式有以下优点<br />
1、机器切换自动完成，不需要人工干预。<br />
2、前台业务不受影响，能保证业务开展的连续性。<br />
缺点主要有<br />
1、在正常情况下，每一台主机的启动中间件时，备用的WSL服务会启动失败，不过这不影响正常使用，备用的WSL只在另外一台主机故障后才起作用。<br />
2、需要额外的双机配置和脚本配置工作。<br />
经过这些比较，我们选定了采用双机软件的方案实现了中间件的failover机制。在以后的运行维护过程中起到了好的效果。<br />
1.4、中间件与数据库的连接方式的选择在TUXEDO中间件应用中连接数据库的方式有两种，一种为通过XA方式连接数据库，另外一种是在应用程序中自己连接数据库。<br />
通过XA方式连接数据库是指利用关系型数据库的XA接口，在tuxedo的配置文件中的OPENINFO段中加入连接信息，然后在server程序的初始化代码的中调用中tp_open（或xa_open），当SERVER启动时进行数据库连接。<br />
通过应用程序直接连接数据库，数据库的连接操作不一定是在SERVER启动时进行的。<br />
这两种方式的连接在BOSS系统中都会用到，其中的区别主要就在于如果业务操作的事务为分布式事务时，则必须要用XA方式。详细比较如下：<br />
1、通过XA连接的方式可以实现分布式事务，即能够保证事务在不同数据库中的一致性。但是正是因为如此，它对中间件系统和数据库系统都有额外的开销，有时候这种开销甚至会影响系统的性能。<br />
2、通过应用程序直连数据库的方法不能够实现分布式事务，但是同时也因此减少了对系统的压力。 <br />
综上，选择数据库的连接方式对整个系统的性能影响也是至关重要的，我们有个原则，凡是在不涉及到分布式事务的地方就不用XA连接。过多的依赖了XA接口，会给系统带来了许多额外的负担和压力，也会造成许多额外的故障。</p>
<p>二、中间件技术在系统维护方面的经验总结在中间件的日常维护中，我们了解了一些TUXEDO的基本知识，摸索了一套行之有效的故障排除方法，积累了一些常见故障的排除经验，现在与大家介绍如下：<br />
2.1、LICENSE数的问题tuxedo的license由文本文件lic.txt来控制，位于udataobj目录下，分为SDK/RTK两种，两种LICENSE不能合并使用。它控制的是并发用户数并且有10%的冗余，这里的并发用户数是指在某一时刻前台程序已经发起tpinit还没有作tpterm的连接数，所以在tuxedo中间件的使用中存在着长连接和短连接的问题。长连接是指tpinit后就开始一系列的服务调用，只在系统重启或系统非常空闲的时候才做tpterm，而短连接是指每次服务调用前作tpinit，调用结束后立即作tpterm调用。因为短连接下的服务调用需要额外的连接时间消耗，这对系统响应时间会有影响，而长连接又会占用系统的并发用户数。所以在系统设计时需要针对不同的应用情况做出不同的设计，比如针对接口类型的应用因为服务调用比较频繁，进行连接的时间就会占比较大的比重，这时就需要使用长连接，而对于前台应用类型的应用，连接过程的时间对于业务操作的时间来说是可以忽略的，这时就要用短连接来节约license资源。</p>
<p>2.2、客户端连接的问题当客户端无法连接中间件时，我们需要确认的是<br />
1、 客户端的WSNADDR是否设置或是否设置正确。<br />
2、 系统配置文件中的MAXWSCLIENTS和MAXACCESS是否正确设置。<br />
3、 WSL是否启动，WSH的个数是否足够。<br />
4、 是否有防火墙，如果有防火墙存在，则需要在WSL的配置中作相应的地址映射和端口指定。<br />
5、 操作系统是否有足够的SCOKET资源使用。<br />
解决了这些问题后，一般就可以解决客户端连接不上的问题了。<br />
在TUXEDO中，参数TMTRACE对故障的定位和排除很有作用，它是一个环境境变量。我们一般在系统监控的工作终端上将此参数设置为on，在前台报系统故障的时候，我们直接进入故障模块将故障重现，然后在终端机器的c:\或者tuxedo的安装目录下打开一个ULOG文件，在此文件中会发现tpcall服务的失败信息，根据这个信息查找对应的SERVER和SERVICE的对应表，很快就可以找到问题服务。采用这种方式，维护人员不需要了解程序的具体流程就可以定位错误解决故障。<br />
在TUXEDO的服务端，有几类文件需要关注，这些文件包括ULOG文件、XA接口的trc文件、数据库连接故障的sqlnet.log、标准输出文件stdout（也可以被应用程序自己定义）。在这些文件中包含着丰富的系统运行错误告警信息。ULOG记载关于中间件的启停记录和系统本身的一些配置运行告警信息。XA的trc文件记录的是XA接口方面的一些的错误信息，关于分布式事务的一些错误在这个文件中都有记录。sqlnet.log记录了应用程序和数据库连接故障的信息，只要有当前日期时间的这个文件存在，应用和数据库的连接就会存在问题。标准输出文件stdout记录了应用程序本身的运行信息。这些文件的跟踪检查对于及时主动的发现故障有着重要的意义。</p>
<p>2.3、事务控制的问题1、事务边界的问题：在这里我们要遵循谁发起发起事务，谁就结束的原则，这里的谁主要是指中间件的前台和后台。我们知道在TUXEDO中事务的发起既可以在前台程序中发起，也可以在后台程序中发起。无论放在前台还是放在后台都有其优缺点。事务放在前台增加了网络传输的流量，当时可以保证异常情况下前后台操作的一致性，事务放在后台可以减少网络流量，但是对于异常情况下前后台操作的一致性很难保证。我们采用的是事务放在前台程序中。但是无论放在前台还是后台，都要遵循谁发起，谁结束的原则。<br />
2、XA接口使用的注意事项：首先是XA资源文件的配置，在oracle数据库中一般用到的是libclntsh.a，我们可以先Make sample，提取其中用到的连接库加入到RM文件中即可。其次在oracle8i之前要对XA进行授权，要在oracle的DBA用户下执行grant select on dba_pending_transactions to public。<br />
3、事务挂起的问题：在使用XA的情况下，我们经常会遇到这种情况，SERVER进程还在，可就是不做事。在相关的日志文件中总是报&#8220;当前的进程已经在一个本地事务中了&#8221;的错误，这时只有重启该SERVER，才能排除故障。其实这是一个事务控制的问题，它产生的根本原因是在开启全局事务前，该SERVER执行了一个本地的事务并且没有提交或回滚。在程序代码上表现为如下三种原因：<br />
（1）、在调用该SERVER的某个带DML语句的service前没有加tpbegin。<br />
（2）、在调用tpbegin后没有判断返回值。<br />
（3）、tpbegin后的tpcall服务调用没有判断返回值，在全局事务超时后没有能够及时的退出后续的调用，导致下一个tpcall产生了一个本地事务。<br />
此外，还会有一类比较特殊的问题，那就是TMS服务挂起的问题，利用tmadmin中的pq命令发现TMS的队列中有很多请求存在，在这种情况下，一般只能等待其执行完成，情况严重时，则需要调整相应的数据库参数，在ORACLE中该参数应该设为max_commit_propagation_delay&gt;=90000。<br />
在实际的运行维护中，我们发现即使把数据库参数调整了，有时还会有TMS挂起的故障发生。针对这件事情我们专门作了研究，TMS之所以挂起是因为TMS在等待数据库中DX独占锁的释放，这种独占锁加锁的对象一般都是ORACLE的系统对象，而这种独占锁的产生一般是在全局事务中执行着DML语句，当这种DML语句执行比较慢时，就会引起TMS的锁等待现象。此外，我们还发现，一般的查询语句是不会产生锁的（OPS的lm_lock锁除外），但是如果将查询放入一个全局事务中时，它就会产生一个共享的DX锁，如果这个在全局事务中的查询的调用是通过ORACLE的工具包DBMS_SQL来进行的话，那就会产生一个DX的排他锁。基于这些结果，我们建议在程序的开发过程中要遵循能不用XA全局事务的情况下就不用，能将查询放到事务之外的就不要放到事务之内，能不用ORACLE工具包进行开发的就不要用。我们也按照这个原则要求我们的开发商，取得了比较好的效果。<br />
4、事务超时设置的问题<br />
中间件应用系统的事务超时控制很重要，不设置超时时间对系统来说简直就是一种灾难。我们曾经就有过因为超时时间的设置没设和设置不当造成了严重的系统故障，最直接的故障就是系统报全局事务数不够的错误，无法开启新的事务，从而导致前台业务的终止。TUXEDO的超时主要有三种，一个是在代码中的tpbegin超时（值为其参数）T1，他控制整个事务的完成时间，第二个为XA连接的超时（配置文件中的open_info中的SesTm ）T2，他控制同一连接中对于分布式事务锁的等待超时时间，还有一个为数据库中等待数据库对象非分布式事务锁释放的超时时间（_dirstributed_lock_timeout）T3。这三个超时共同作用并且有如下的关系 T1</p>
<p>2.4、服务不能正常启动的问题在实际的维护工作中，经常会出现服务不能正常启动的现象。明明所有的服务都已经关闭了，tmboot就是起不来。这种原因一般是因为系统的IPC资源没有释放。IPC资源是操作系统用来进行进程间通讯的系统资源，主要包括信号灯、共享内存、消息队列。在UNIX操作系统下通过IPCS命令可以清楚的看到IPC资源的使用情况。当服务无法启动的时观察IPCS就会发现tuxedo运行环境的用户下的ipc资源没有被释放，这时使用ipcrm命令清除相应的IPC资源，再启动服务就可以了。<br />
&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/278087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-26 21:13 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>config the jolt pool in your weblogic</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278060.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Tue, 26 May 2009 10:09:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278060.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/278060.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278060.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/278060.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/278060.html</trackback:ping><description><![CDATA[1)copy your jolt lib to the weblogic domain. and this jar lib will be appended to the end of the weblogic classpath<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="font-weight: bold; color: #800000">[</span><span style="color: #800000">root@rhelserver&nbsp;lib</span><span style="font-weight: bold; color: #800000">]</span><span style="color: #000000">#&nbsp;cp&nbsp;/home/oracle/tuxedo10gR3/udataobj/jolt/jolt.jar&nbsp;&nbsp;./<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="font-weight: bold; color: #800000">[</span><span style="color: #800000">root@rhelserver&nbsp;lib</span><span style="font-weight: bold; color: #800000">]</span><span style="color: #000000">#&nbsp;cp&nbsp;/home/oracle/tuxedo10gR3/udataobj/jolt/joltjse.jar&nbsp;&nbsp;./<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="font-weight: bold; color: #800000">[</span><span style="color: #800000">root@rhelserver&nbsp;lib</span><span style="font-weight: bold; color: #800000">]</span><span style="color: #000000">#&nbsp;cp&nbsp;/home/oracle/tuxedo10gR3/udataobj/jolt/joltwls.jar&nbsp;&nbsp;./</span></div>
<br />
<br />
2)add the startup and&nbsp;shutdown class in your domain.<br />
&nbsp; <br />
3)add the joltpool&nbsp;to your weblogic.&nbsp; <br />
<br />
4)write your servlet program to call the tuxedo service:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.IOException;<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletException;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServlet;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletResponse;<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.pool.SessionPoolManager;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.pool.servlet.ServletSessionPool;<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;bea.jolt.pool.servlet.ServletSessionPoolManager;<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #008000">&nbsp;*&nbsp;Servlet&nbsp;implementation&nbsp;class&nbsp;TestJolt<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #008000">&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestJolt&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;HttpServlet&nbsp;{<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">long</span><span style="color: #000000">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1L</span><span style="color: #000000">;<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Default&nbsp;constructor.<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TestJolt()&nbsp;{<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;constructor&nbsp;stub</span><span style="color: #008000"><br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">26</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@see</span><span style="color: #008000">&nbsp;HttpServlet#doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse<br />
</span><span style="color: #008080">27</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response)<br />
</span><span style="color: #008080">28</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doGet(HttpServletRequest&nbsp;request,<br />
</span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bea.jolt.pool.servlet.ServletResult&nbsp;result;<br />
</span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="color: #000000">"</span><span style="color: #000000">text/html;charset=UTF-8</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.io.PrintWriter&nbsp;out&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;response.getWriter();<br />
</span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&gt;begin</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">39</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletSessionPoolManager&nbsp;bool_mgr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(ServletSessionPoolManager)&nbsp;SessionPoolManager.poolmgr;<br />
</span><span style="color: #008080">40</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletSessionPool&nbsp;pool_session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(ServletSessionPool)&nbsp;bool_mgr<br />
</span><span style="color: #008080">41</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getSessionPool(</span><span style="color: #000000">"</span><span style="color: #000000">joltConnectionPool</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">set&nbsp;your&nbsp;weblogic's&nbsp;joltpool&nbsp;name</span><span style="color: #008000"><br />
</span><span style="color: #008080">42</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">43</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(pool_session&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;{<br />
</span><span style="color: #008080">44</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&gt;fail</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">45</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
</span><span style="color: #008080">46</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
</span><span style="color: #008080">47</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">48</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(pool_session);<br />
</span><span style="color: #008080">49</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">50</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sendvalue;<br />
</span><span style="color: #008080">51</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendvalue&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">STRING</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">this&nbsp;is&nbsp;your&nbsp;input&nbsp;parameter&nbsp;to&nbsp;the&nbsp;TOUPPER&nbsp;service.</span><span style="color: #008000"><br />
</span><span style="color: #008080">52</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sendvalue);<br />
</span><span style="color: #008080">53</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">54</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
</span><span style="color: #008080">55</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">OK!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">56</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">57</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;pool_session.call(</span><span style="color: #000000">"</span><span style="color: #000000">TOUPPER</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;request);<br />
</span><span style="color: #008080">58</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&gt;return&nbsp;val：</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;result.getValue(</span><span style="color: #000000">"</span><span style="color: #000000">STRING</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">));<br />
</span><span style="color: #008080">59</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(bea.jolt.pool.SessionPoolException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080">60</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">61</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000">"</span><span style="color: #000000">&lt;br&gt;busy</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">62</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(bea.jolt.pool.ServiceException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080">63</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">64</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">65</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(bea.jolt.pool.ApplicationException&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080">66</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">67</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(bea.jolt.pool.servlet.ServletResult)&nbsp;e.getResult();<br />
</span><span style="color: #008080">68</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">69</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">70</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
</span><span style="color: #008080">71</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
</span><span style="color: #008080">72</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">73</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">74</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000">"</span><span style="color: #000000">\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">75</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();<br />
</span><span style="color: #008080">76</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">77</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">78</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">79</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">80</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@see</span><span style="color: #008000">&nbsp;HttpServlet#doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse<br />
</span><span style="color: #008080">81</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response)<br />
</span><span style="color: #008080">82</span>&nbsp;<span style="color: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #008080">83</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doPost(HttpServletRequest&nbsp;request,<br />
</span><span style="color: #008080">84</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;response)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
</span><span style="color: #008080">85</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doGet(request,&nbsp;response);<br />
</span><span style="color: #008080">86</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">87</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">88</span>&nbsp;<span style="color: #000000">}<br />
</span><span style="color: #008080">89</span>&nbsp;</div>
<br />
<br />
5) deploy your web war to weblogic , and browser to access your servlet:<br />
&nbsp;&nbsp;&nbsp;&nbsp; URL :&nbsp; http://192.168.226.129:7001/TestJolt/TestJolt?STRING=aaaaaaaaaa
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/278060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-26 18:09 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>how to config jolt?</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278025.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Tue, 26 May 2009 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278025.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/278025.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/278025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/278025.html</trackback:ping><description><![CDATA[refer : http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277988.html<br />
<br />
1) edit the ubbconfig file:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*RESOURCES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />IPCKEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">69345</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#Example:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#IPCKEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">123456</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DOMAINID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simpapp<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MASTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simple<br />
<span style="color: red"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXACCESSERS&nbsp;&nbsp;&nbsp;&nbsp;100</span></span><span style="color: #000000"><br />
<span style="color: red"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXSERVERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXSERVICES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;40<br />
</span></span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MODEL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHM<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />LDBAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*MACHINES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DEFAULT:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;APPDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/test/atmi</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXCONFIG</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/test/atmi/tuxconfig</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/oracle/tuxedo10gR3</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#Example:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;APPDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/me/simpapp</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXCONFIG</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/me/simpapp/tuxconfig</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/usr/tuxedo</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />rhelserver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXWSCLIENTS</span><span style="color: #000000">=</span><span style="color: #000000">50</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*GROUPS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />GROUP1&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GRPNO</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;OPENINFO</span><span style="color: #000000">=</span><span style="color: #000000">NONE<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />WSGRP&nbsp;&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GRPNO</span><span style="color: #000000">=</span><span style="color: #000000">2</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />JSLGRP&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GRPNO</span><span style="color: #000000">=</span><span style="color: #000000">100</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />JREPGRP&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GRPNO</span><span style="color: #000000">=</span><span style="color: #000000">101</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*SERVERS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DEFAULT:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLOPT</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">-A</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />simpserv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRVGRP</span><span style="color: #000000">=</span><span style="color: #000000">GROUP1&nbsp;SRVID</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />WSL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRVGRP</span><span style="color: #000000">=</span><span style="color: #000000">WSGRP&nbsp;SRVID</span><span style="color: #000000">=</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;RESTART</span><span style="color: #000000">=</span><span style="color: #000000">Y&nbsp;MAXGEN</span><span style="color: #000000">=</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;GRACE</span><span style="color: #000000">=</span><span style="color: #000000">3600</span><span style="color: #000000">&nbsp;CLOPT</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">-A&nbsp;--&nbsp;-n//192.168.247.129:7110&nbsp;&nbsp;&nbsp;-m&nbsp;5&nbsp;-M&nbsp;10&nbsp;-x&nbsp;5</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<span style="color: red"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />JSL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRVGRP=JSLGRP&nbsp;&nbsp;SRVID=100&nbsp;CLOPT="-A&nbsp;--&nbsp;-n&nbsp;//192.168.247.129:9110&nbsp;-m&nbsp;3&nbsp;-M&nbsp;10&nbsp;-x5"<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />JREPSVR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRVGRP=JREPGRP&nbsp;SRVID=101&nbsp;CLOPT="-A&nbsp;&nbsp;--&nbsp;&nbsp;&nbsp;-W&nbsp;-P&nbsp;/home/oracle/tuxedo10gR3/udataobj/jolt/repository/jrepository"<br />
</span></span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*SERVICES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />TOUPPER</span></div>
<br />
<span style="color: red">&nbsp;&nbsp; now ,you must compile the ubbconfig file , and boot youre tuxedo server.&nbsp;<br />
</span><span style="color: red">&nbsp;&nbsp;&nbsp; $ tmloadcf&nbsp;&nbsp; ubbsimple<br />
&nbsp;&nbsp;&nbsp; $ tmboot</span><br />
2)edit the&nbsp; jolt respository file:<br />
&nbsp;&nbsp;&nbsp;&nbsp; a) edit and save&nbsp;simpapp.rep: (<span style="color: red"><strong>YOUR MUST REMVE ALL THE BLANKS IN THE HEAD AND TAIL OF THE LINE.</strong></span>)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">service</span><span style="color: #000000">=</span><span style="color: #000000">TOUPPER<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />inbuf</span><span style="color: #000000">=</span><span style="color: #000000">STRING<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />outbuf</span><span style="color: #000000">=</span><span style="color: #000000">STRING<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />export</span><span style="color: #000000">=</span><span style="color: #000000">true<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />param</span><span style="color: #000000">=</span><span style="color: #000000">STRING<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />type</span><span style="color: #000000">=</span><span style="color: #000000">string<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />access</span><span style="color: #000000">=</span><span style="color: #000000">inout</span></div>
<br />
&nbsp;&nbsp; b) config the JAVA's CLASSPATH and run jbld command and import the simpapp.rep to jolt respository<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ export&nbsp; CLASSPATH=.:/home/oracle/jrockit_160_05/lib/dt.jar:/home/oracle/jrockit_160_05/lib/tools.jar:/home/oracle/tuxedo10gR3/<br />
udataobj/jolt/jolt.jar:/home/oracle/tuxedo10gR3/udataobj/jolt/joltadmin.jar&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ <span style="color: red">java bea.jolt.admin.jbld -p SIMPSERV //192.168.247.129:9110&nbsp; simpapp.rep<br />
<br />
<br />
3)&nbsp;&nbsp; write your java code in your client. certarnly, you must config your classpath.<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">import&nbsp;bea.jolt.JoltRemoteService</span><span style="color: #008000">;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">import&nbsp;bea.jolt.JoltSession</span><span style="color: #008000">;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">import&nbsp;bea.jolt.JoltSessionAttributes</span><span style="color: #008000">;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />public&nbsp;class&nbsp;Test&nbsp;{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String</span><span style="font-weight: bold; color: #800000">[]</span><span style="color: #000000">&nbsp;args)&nbsp;{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JoltSession&nbsp;session</span><span style="color: #008000">;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JoltSessionAttributes&nbsp;sattr</span><span style="color: #008000">;<br />
</span><span style="color: #008080">10</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JoltRemoteService&nbsp;toupper</span><span style="color: #008000">;<br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sattr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;new&nbsp;JoltSessionAttributes()</span><span style="color: #008000">;<br />
</span><span style="color: #008080">13</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sattr.setString(JoltSessionAttributes.APPADDRESS</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">//192.168.247.129:9110</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #008000">;<br />
</span><span style="color: #008080">14</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sattr.setInt(JoltSessionAttributes.IDLETIMEOUT</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">300</span><span style="color: #000000">)</span><span style="color: #008000">;<br />
</span><span style="color: #008080">15</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;new&nbsp;JoltSession(sattr</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;null</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;null</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;null</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;null)</span><span style="color: #008000">;</span><span style="color: #008000">&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">16</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toupper&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;new&nbsp;JoltRemoteService(</span><span style="color: #000000">"</span><span style="color: #000000">TOUPPER</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;session)</span><span style="color: #008000">;<br />
</span><span style="color: #008080">18</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toupper.setString(</span><span style="color: #000000">"</span><span style="color: #000000">STRING</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">hello,wolrd!</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #008000">;<br />
</span><span style="color: #008080">19</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toupper.call(null)</span><span style="color: #008000">;<br />
</span><span style="color: #008080">20</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(toupper.getStringDef(</span><span style="color: #000000">"</span><span style="color: #000000">STRING</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">&nbsp;null))</span><span style="color: #008000">;<br />
</span><span style="color: #008080">21</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.endSession()</span><span style="color: #008000">;<br />
</span><span style="color: #008080">22</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}</span></div>
<br />
</span>&nbsp;&nbsp; 
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/278025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-26 16:03 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/278025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java通过Jolt调用Tuxedo服务 zz</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277993.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Tue, 26 May 2009 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277993.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277993.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277993.html</trackback:ping><description><![CDATA[<p>http://blog.csdn.net/liwei_cmg/archive/2006/06/02/769150.aspx<br />
<br />
http://blog.csdn.net/liwei_cmg/archive/2006/06/03/771906.aspx<br />
<br />
Java通过Jolt调用Tuxedo服务</p>
<p>草木瓜 2006-6-1</p>
<p>------------------------<br />
一、简介<br />
------------------------</p>
<p>外部应用访问Tuxedo服务是很经常的事，一般有两种方法WTC和Jolt,网上很多关于Jolt调用Tuxedo服务<br />
文章，描述的太多笼统，其实通过Jolt并不是很复杂的事情，这里使用Eclipse3.1+Jolt+WebLogic8.1<br />
+Tuxedo9.0环境描述调用服务的全过程。</p>
<p>Jolt是Bea Tuxedo自带的jar组件，在Tuxedo9.0的安装过程中可以看到安装的Jolt组件。</p>
<p>调用服务理论步骤是这样的：</p>
<p>1.先准备Tuxedo服务端代码<br />
2.在Tuxedo中配置Jolt相关文件<br />
3.启动Tuxedo服务<br />
4.配置WebLogic服务与Tuxedo Jolt相关的参数<br />
5.配置Eclipse3.1启动WebLogic服务<br />
6.编写Eclipse Servlet代码，运行调用服务。</p>
<p>本例使用了《Windows Tuxedo的安装配置-数据库补充》一文中的Tuxedo数据服务文件，所以在启动<br />
Tuxedo服务前，必须先启动数据库实例，因为在tpsvinit()里面就配置了数据连接。关于Tuxedo配置<br />
要点需参阅《Tuxedo的安装配置-...》的四篇文章。</p>
<p>------------------------<br />
二、Tuxedo服务文件全代码<br />
------------------------</p>
<p>这里把server.pc服务文件代码再次列出。其中包括三个服务DBREAD（读数据库）和TOUPPER（转换大写）。<br />
本例不使用TOUPPER，所以不用理会那段代码。</p>
<p>其中<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#105;&#119;&#101;&#105;&#47;&#108;&#105;&#119;&#101;&#105;&#64;&#119;&#105;&#110;&#100;&#98;">liwei/liwei@windb</a>连接的表tuxedo_test，结构如下：</p>
<p>CREATE TABLE TUXEDO_TEST(<br />
ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER(2),<br />
NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(10)<br />
)</p>
<p>ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NAME<br />
------------------------<br />
1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aaaaaaa<br />
2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bbbbbbb</p>
<p>#include &lt;stdio.h&gt;<br />
#include &lt;ctype.h&gt;<br />
#include &lt;atmi.h&gt;&nbsp;/* TUXEDO Header File */<br />
#include &lt;userlog.h&gt;&nbsp;/* TUXEDO Header File */</p>
<p>EXEC SQL BEGIN DECLARE SECTION;<br />
VARCHAR ora_no[2];<br />
int ora_id;<br />
VARCHAR ora_value[10];<br />
VARCHAR ora_cn[30];<br />
EXEC SQL END DECLARE SECTION;<br />
EXEC SQL INCLUDE sqlca;</p>
<p>tpsvrinit()<br />
{<br />
&nbsp;&nbsp;strcpy(ora_cn.arr,"<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#105;&#119;&#101;&#105;&#47;&#108;&#105;&#119;&#101;&#105;&#64;&#119;&#105;&#110;&#100;&#98;">liwei/liwei@windb</a>");<br />
&nbsp;&nbsp;ora_cn.len = strlen(ora_cn.arr);<br />
&nbsp;&nbsp;ora_cn.arr[ora_cn.len]='\0';</p>
<p>&nbsp;&nbsp;//EXEC SQL WHENEVER SQLERROR GOTO cnError;<br />
&nbsp;&nbsp;EXEC SQL CONNECT :ora_cn;<br />
&nbsp;&nbsp;return(0);<br />
}<br />
tpsrvdone()<br />
{<br />
&nbsp;&nbsp;EXEC SQL COMMIT WORK RELEASE;<br />
}</p>
<p>DBREAD(TPSVCINFO *rqst)<br />
{<br />
&nbsp;<br />
&nbsp;strcpy(ora_no.arr,(char *)rqst-&gt;data);<br />
&nbsp;ora_no.len=strlen(ora_no.arr);<br />
&nbsp;ora_no.arr[ora_no.len]='\0';</p>
<p>&nbsp;userlog("ERRSRV: %s",ora_no.arr);<br />
&nbsp;EXEC SQL select name into :ora_value from tuxedo_test where id=:ora_no;<br />
&nbsp;if(sqlca.sqlcode!=0)<br />
&nbsp;{<br />
&nbsp;&nbsp;userlog("ERRSRV: select name from tuxedo_test where id=, sqlcode=%ld , sqlerr=\n",sqlca.sqlcode);<br />
&nbsp;&nbsp;strcpy(rqst-&gt;data,sqlca.sqlerrm.sqlerrmc);<br />
&nbsp;&nbsp;tpreturn(TPFAIL, 0, rqst-&gt;data, 0L, 0);<br />
&nbsp;}</p>
<p>&nbsp;/* Return the transformed buffer to the requestor. */<br />
&nbsp;strset(rqst-&gt;data,"");<br />
&nbsp;strcpy(rqst-&gt;data,ora_value.arr);<br />
&nbsp;tpreturn(TPSUCCESS, 0, rqst-&gt;data, 0L, 0);<br />
}</p>
<p>TOUPPER(TPSVCINFO *rqst)<br />
{</p>
<p>&nbsp;int i;</p>
<p>&nbsp;for(i = 0; i &lt; rqst-&gt;len-1; i++)<br />
&nbsp;&nbsp;rqst-&gt;data[i] = toupper(rqst-&gt;data[i]);</p>
<p>&nbsp;/* Return the transformed buffer to the requestor. */<br />
&nbsp;tpreturn(TPSUCCESS, 0, rqst-&gt;data, 0L, 0);<br />
}</p>
<p>------------------------<br />
三、编译服务<br />
------------------------</p>
<p>编译命令的注意事项，以前Tuxedo系列文章都提过。</p>
<p>proc server.pc include=%TUXDIR%\include<br />
buildserver -o server -f server.c -s DBREAD -s TOUPPER -v -l orasql9.lib</p>
<p>------------------------<br />
四、配置Tuxedo服务的config文件<br />
------------------------</p>
<p>完全文件如下：</p>
<p>#Liwei</p>
<p>*RESOURCES<br />
IPCKEY&nbsp;&nbsp;123456<br />
DOMAINID&nbsp;liweiapp<br />
MASTER&nbsp;&nbsp;lw<br />
MAXACCESSERS&nbsp;150<br />
MAXSERVERS&nbsp;100<br />
MAXSERVICES&nbsp;100<br />
MODEL&nbsp;&nbsp;SHM<br />
LDBAL&nbsp;&nbsp;N</p>
<p>*MACHINES<br />
LWYM<br />
&nbsp;LMID = lw <br />
&nbsp;TUXDIR = "E:\bea\tuxedo9.0"<br />
&nbsp;TUXCONFIG = "G:\Liwei\Tuxedo\dbread\tuxconfig"<br />
&nbsp;APPDIR = "G:\Liwei\Tuxedo\dbread"<br />
&nbsp;MAXWSCLIENTS=1<br />
&nbsp;TLOGDEVICE = "G:\Liwei\Tuxedo\dbread\TLOG"<br />
&nbsp;TLOGNAME=TLOG<br />
&nbsp;TLOGSIZE = 100<br />
&nbsp;<br />
*GROUPS</p>
<p>APPGRP&nbsp;LMID=lw GRPNO = 1 </p>
<p>#OPENINFO="Oracle_XA:Oracle_XA+Acc=P/liwei/liwei+SqlNet=linux+SesTm=600+MaxCur=5+LogDir=." <br />
#TMSNAME="TMS_ORA9i" TMSCOUNT=2</p>
<p>JSLGRP&nbsp; LMID=lw GRPNO = 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
JREPGRP LMID=lw GRPNO = 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>*SERVERS<br />
server SRVGRP=APPGRP SRVID=1</p>
<p>#WSL&nbsp;SRVGRP=APPGRP SRVID =300 <br />
#CLOPT="-A -- -n //192.168.0.166:8888 -d/dev/tcp -m1 -M5 -x 10"</p>
<p>JSL SRVGRP=JSLGRP SRVID=301<br />
CLOPT="-A -- -n //192.168.0.166:9878 -M 10 -x 10 -m 2"</p>
<p>JREPSVR SRVGRP=JREPGRP SRVID=302<br />
CLOPT="-A -- -W -P E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository"</p>
<p>*SERVICES<br />
DBREAD<br />
TOUPPER</p>
<p>细心一看，这个config文件比在*GROUPS和*SERVERS各加了两项对应内容：</p>
<p>JSLGRP&nbsp; LMID=lw GRPNO = 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
JREPGRP LMID=lw GRPNO = 3&nbsp;&nbsp;&nbsp;&nbsp; <br />
和<br />
JSL SRVGRP=JSLGRP SRVID=301<br />
CLOPT="-A -- -n //192.168.0.166:9878 -M 10 -x 10 -m 2"<br />
JREPSVR SRVGRP=JREPGRP SRVID=302<br />
CLOPT="-A -- -W -P E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository"</p>
<p>这两项是用于jolt的访问接口。JSL和JREPSVR必须是独自的GROUP，由于外部调用通过JSL和JREPSVR直接于<br />
Tuxedo服务通信，WSL就没用了。JSL的主机地址是Tuxedo服务器地址，端口是随意指定的，不要与其他重复<br />
即可，一般设置的大一点。在config里面加入这此内容后，config文件就Ok了。</p>
<p>------------------------<br />
五、配置jrepository文件<br />
------------------------</p>
<p>直接打开E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository文件添加以下内容：</p>
<p>add SVC/DBREAD:vs=1:ex=1:bt=STRING:\<br />
&nbsp;bp:pn=STRING:pt=string:pf=167772161:pa=rw:ep:<br />
add PKG/SIMPSERV:DBREAD:</p>
<p>这个文件如果没有DBREAD配置，调用会提示DBREAD not avaliable，DBREAD配置错误，会提示DBREAD has<br />
been modifed ...</p>
<p>对这个文件操作还有以下两种方式：</p>
<p>方式一：在IE打开E:\bea\tuxedo9.0\udataobj\jolt\RE.html，是个java applet，里面是图形界面，添加<br />
&nbsp;完服务，设置好参数即可。具体方法可以查阅网上资料，有图文解说的。<br />
方式二：在命令行键入Java bea.jolt.admin.jbld //192.168.0.166:9878 services.rep，其中//192..要与<br />
JSL的设置一致。services.rep是随意的一个文件，不过文件内容绝对不随意，如下：</p>
<p>service=DBREAD<br />
inbuf=STRING<br />
outbuf=STRING<br />
export=true<br />
param=STRING<br />
type=string<br />
access=inout</p>
<p>要执行这个命令设置jdk环境变量是必不可少的，PATH，CLASSPATH。我的CLASSPATH加入了以下内容，<br />
E:\bea\tuxedo9.0\udataobj\jolt\joltwls.jar;<br />
E:\bea\tuxedo9.0\udataobj\jolt\joltjse.jar;<br />
E:\bea\tuxedo9.0\udataobj\jolt\jolt.jar;<br />
E:\bea\tuxedo9.0\udataobj\jolt\joltadmin.jar<br />
个人认为对于这个java命令joltadmin是必须的，其他三个没用，不过没有亲自尝试。</p>
<p>方式一，二修改后，jrepository文件会显得比较乱，所以我不喜欢！最好是自已手工修改。</p>
<p><br />
------------------------<br />
六、编译启动服务<br />
------------------------</p>
<p>当然，数据库必须要有了，编译config后，启动tuxedo服务。<br />
tmloadcf -y config<br />
tmboot -y</p>
<p>提示如下：</p>
<p>exec BBL -A :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; process id=3520 ... Started.</p>
<p>Booting server processes ...</p>
<p>exec server -A :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; process id=3812 ... Started.<br />
exec JSL -A -- -n //192.168.0.166:9878 -M 10 -x 10 -m 2 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; process id=252 ... Started.<br />
exec JREPSVR -A -- -W -P E:\bea\tuxedo9.0\udataobj\jolt\repository\jrepository :</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; process id=2920 ... Started.<br />
4 processes started.</p>
<p><br />
------------------------<br />
七、配置Eclipse3.1<br />
------------------------</p>
<p>我们要在Eclipse里面启动WebLogic服务，《Eclipse3.1 Web开发配置》一文中已经说明了，如何配置<br />
WebLogic8.1的服务器，这里对WebLogic的服务本身也要做此必要的配置。</p>
<p>打开选用的WebLogic8.1服务路径，编辑config.xml文件，本机位置G:\Liwei\WebLogic\WebServer\config.xml。<br />
加入如下内容：</p>
<p>&nbsp;&nbsp;&nbsp; &lt;JoltConnectionPool FailoverAddresses="//192.168.0.166:9878"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MaximumPoolSize="2" MinimumPoolSize="1" Name="JoltPool"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PrimaryAddresses="//192.168.0.166:9878"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SecurityContextEnabled="false" Targets="webServer"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;StartupClass<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClassName="bea.jolt.pool.servlet.weblogic.PoolManagerStartUp"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LoadBeforeAppActivation="true" Name="MyStartup" Targets="webServer"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ShutdownClass<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClassName="bea.jolt.pool.servlet.weblogic.PoolManagerShutDown"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name="MyShutdown" Targets="webServer"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
这里要说明一下：PrimaryAddresses，FailoverAddresses地址是前面Tuxedo配置文件指定的JSL地址和端口<br />
SecurityContextEnabled一定要是false!所有name是随意的，StartupClass和ShutdownClass的ClassName<br />
绝对不能错！</p>
<p>除此方法，还可以通过Weblogic服务的控制台进行管理。启动服务后，在<a href="http://localhost:7001/console/">http://localhost:7001/console/</a><br />
登陆后的主页面上选择 连接性-&gt;通过 JOLT 的 Tuxedo&nbsp; -&gt;配置新的Jolt 连接缓冲池...输入参数内容就是<br />
上面config.xml的参数。另外首页中 已部署的资源 -&gt;启动和关闭 需要设置两个Class，参数也同上。</p>
<p><br />
连接性-&gt;通过 JOLT 的 Tuxedo&nbsp; -&gt;配置新的Jolt 连接缓冲池...</p>
<p>①进入选项卡的General(常规),输入参数:<br />
Name:&nbsp;&nbsp; JoltPool<br />
Minimum Pool Size:&nbsp; 1 <br />
Maximum Pool Size:&nbsp;&nbsp; 2<br />
Recv Timeout:&nbsp; 0<br />
点击Apply应用按纽<br />
②进入选项卡的Addresses(地址),输入参数:<br />
Primary Addresses: //192.168.0.166:9878<br />
Failover Addresses: //192.168.0.166:9878<br />
点击Apply应用按纽<br />
③进入Targets栏：<br />
选中myserver<br />
点击Apply应用按纽.</p>
<p>已部署的资源 -&gt;启动和关闭 分别配置StartUp,ShutDown的Class</p>
<p>①进入Configuration(设置)<br />
在ClassName:中输入: bea.jolt.pool.servlet.weblogic.PoolManagerStartUp,<br />
其它采用默认值。<br />
②进入Targets(目标)栏：<br />
选中myserver,点击Apply应用按纽.</p>
<p>①进入Configuration(设置)<br />
在ClassName:中输入: bea.jolt.pool.servlet.weblogic.PoolManagerShutDown,<br />
其它采用默认值。<br />
②进入Targets(目标)：<br />
选中myserver,点击Apply应用按纽.</p>
<p>到这里config.xml文件就设置完了，下面需要编辑startWebLogic.cmd，加入对jolt jar的引用，否则jolt<br />
是启动失败的。在echo CLASSPATH=%CLASSPATH%前加入以下代码，设置CLASSPATH，这里classpath跟外部环境<br />
变量是两码事。</p>
<p>set CLASSPATH=%CLASSPATH%;E:\bea\tuxedo9.0\udataobj\jolt\jolt.jar;E:\bea\tuxedo9.0\udataobj\jolt\joltwls.jar;E:\bea\tuxedo9.0\udataobj\jolt\joltjse.jar</p>
<p>设置完后，重启服务，在Eclipse管理WebLogic服务时如果出现启动关闭不成功，多试几次就可以了。<br />
在启动的console界面里如果出现以下内容，就说明jolt pool启动成功！</p>
<p>&lt;2006-6-1 下午09时12分55秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000327&gt; &lt;Starting WebLogic Admin Server "webServer" for domain "WebServer"&gt; <br />
Jolt pool deployed for webServer<br />
&lt;2006-6-1 下午09时13分13秒 CST&gt; &lt;Notice&gt; &lt;Security&gt;...</p>
<p><br />
------------------------<br />
八、Eclipse3.1编写Servlet代码<br />
------------------------</p>
<p>首先需要在所建工程-&gt;右键-&gt;Properties-&gt;Java BuildPath -&gt;Library-&gt;Add External jars ..添加jolt的jar包<br />
这里需要三个jar包，如下：<br />
E:\bea\tuxedo9.0\udataobj\jolt\jolt.jar<br />
E:\bea\tuxedo9.0\udataobj\jolt\joltjse.jar<br />
E:\bea\tuxedo9.0\udataobj\jolt\joltwls.jar<br />
&nbsp;<br />
添加jar完后，建立一个主页面index.jsp和一个Servlet。关于Eclipse3.1配置Servlet在《Eclipse3.1 Web开发配置》<br />
一文也有说明。这里Servlet名为liwei.java,具体内容如下：</p>
<p>index.jsp</p>
<p>&lt;body&gt;<br />
&lt;form id=form1 name="form1" action=liwei method=post&gt;<br />
&lt;input type="text" name="STRING" value="1"&gt;<br />
&lt;input type=submit value=submit&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;</p>
<p>说明：name要是STRING,用来传递参数，action是liwei.java即Servlet。</p>
<p>liwei.java</p>
<p><br />
&nbsp;public class liwei extends javax.servlet.http.HttpServlet&nbsp; <br />
&nbsp;{<br />
&nbsp; <br />
&nbsp;//声明管理连接池的变量<br />
&nbsp;private bea.jolt.pool.servlet.ServletSessionPoolManager bool_mgr = (bea.jolt.pool.servlet.ServletSessionPoolManager) bea.jolt.pool.SessionPoolManager.poolmgr;</p>
<p>&nbsp;public void init(javax.servlet.ServletConfig config) throws javax.servlet.ServletException <br />
&nbsp;{<br />
&nbsp;&nbsp;//初始化servlet<br />
&nbsp;&nbsp;super.init(config);<br />
&nbsp;}<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;public void destroy() {<br />
&nbsp;&nbsp;//关闭servlet<br />
&nbsp;&nbsp;bool_mgr = null;<br />
&nbsp;}&nbsp;<br />
&nbsp;<br />
&nbsp;protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) <br />
&nbsp;throws javax.servlet.ServletException, java.io.IOException <br />
&nbsp;{<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;bea.jolt.pool.servlet.ServletResult result;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;//设置页面类型，如果没有charset，显示汉字会乱码<br />
&nbsp;&nbsp;response.setContentType("text/html;charset=UTF-8");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;java.io.PrintWriter out =response.getWriter();<br />
&nbsp;&nbsp;out.println("&lt;html&gt;");<br />
&nbsp;&nbsp;out.println("&lt;body&gt;");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;//System.out.println("TEST________________________1");</p>
<p>&nbsp;&nbsp; //获取在WebLogic服务定义好的连接池,JoltPool<br />
&nbsp;&nbsp; bea.jolt.pool.servlet.ServletSessionPool pool_session = (bea.jolt.pool.servlet.ServletSessionPool)<br />
&nbsp;&nbsp; bool_mgr.getSessionPool("JoltPool");</p>
<p>&nbsp;&nbsp;&nbsp; if (pool_session == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("获取Tuxedo服务失败。"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;br&gt;"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "确认Tuxedo服务已启动且配置正确。"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/font&gt;&lt;/body&gt;&lt;/html&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; System.out.println(pool_session);<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; String sendvalue;<br />
&nbsp;&nbsp;&nbsp; sendvalue=request.getParameter("STRING");<br />
&nbsp;&nbsp;&nbsp; System.out.println(sendvalue);<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; // 调用服务<br />
&nbsp;&nbsp;&nbsp; try <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;System.out.println("OK!");<br />
&nbsp;&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; &nbsp;//调用服务DBREAD<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = pool_session.call("DBREAD", request);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("传递的参数 = " + sendvalue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("Tuxedo服务成功调用。 ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //跟据传递的变量STRING值，获取返回值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("返回值："+result.getValue("STRING", ""));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (bea.jolt.pool.SessionPoolException e) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 连接池繁忙<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("此时请求不能被处理。\n"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "错误信息: "+e.getMessage()+"\n"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "可能的原因：1.无效的连接池 2.连接池已关闭");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (bea.jolt.pool.ServiceException e) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; // 服务出错，这里主要是Tuxedo的服务配置，jrepository文件出错<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("错误信息："+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Error message:"+e.getMessage()+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Error number:"+e.getErrno());<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (bea.jolt.pool.ApplicationException e) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 应用程序出错<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = (bea.jolt.pool.servlet.ServletResult) e.getResult();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("错误代码："+result.getApplicationCode());<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; catch (Exception e) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("意外错误："+e);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; out.println("&lt;/body&gt;&lt;/html&gt;\n");<br />
&nbsp;&nbsp;&nbsp; out.close();<br />
&nbsp;}&nbsp;<br />
&nbsp;<br />
&nbsp;protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) <br />
&nbsp;throws javax.servlet.ServletException, java.io.IOException <br />
&nbsp;{<br />
&nbsp;&nbsp;this.doGet(request,response);<br />
&nbsp;}&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <br />
}</p>
<p><br />
------------------------<br />
九、RUN<br />
------------------------</p>
<p>Run on server ，点击Submit，显示 传递的参数 = 1 Tuxedo服务成功调用。 返回值：aaaaaaa !<br />
<br />
<br />
=======================<br />
<br />
</p>
<p>Java通过Jolt访问Tuxedo服务-补充说明</p>
<p>草木瓜</p>
<p>2006-6-2</p>
<p>一、页面参数文件说明以及通过WebLogic调用Tuxedo服务</p>
<p>《Java通过Jolt访问Tuxedo服务》一文是在Eclipse环境下开发调用Tuxedo服务。</p>
<p>其中在index.asp和liwei.java中有这么几句语句：</p>
<p>index.asp</p>
<p>&lt;form id=form1 name="form1" action=liwei method=post&gt;<br />
&lt;input type="text" name="STRING" value="1"&gt;<br />
&lt;input type=submit value=submit&gt;</p>
<p>liwei.java</p>
<p>//跟据传递的变量STRING值，获取返回值<br />
out.println("返回值："+result.getValue("STRING", ""));</p>
<p>这两段的STRING是不可以随便替换的，这必须与E:\bea\tuxedo9.0\udataobj\jolt\repository<br />
下jrepository文件描述的服务参数相一致！且必须为大写！即：</p>
<p>add SVC/DBREAD:vs=1:ex=1:bt=STRING:\<br />
&nbsp;bp:pn=STRING:pt=string:pf=167772161:pa=rw:ep:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里面定义的参数就是STRING<br />
add PKG/SIMPSERV:DBREAD:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
下面用WebLogic对Tuxedo服务调用再详细的举例说明。</p>
<p>WebLogic通过jolt调用Tuxedo服务，有了上文的前提就显得很容易，说白了只是Servlet与Jsp的一点<br />
小转换。除了最后一步在Eclipse3.1编写Servlet代码，其他的前提步骤是必须的。WebLogic要使用<br />
Jolt接口，同样需要jolt,joltjse,joltwls三个jar包，将它们Copy到WEB-INF下的lib文件夹即可。</p>
<p>以下是完整的示例，参数名用大写的TEST。</p>
<p>index.jsp<br />
---------------------------------</p>
<p>&lt;form action="_test/testTuxedo.jsp" method="post"&gt;<br />
&lt;p&gt;<br />
&lt;input type="text" value="1" name="TEST" id="text1"&gt;&lt;input type="submit" value="tuxedo"&gt; <br />
&lt;/p&gt;<br />
&lt;/form&gt;</p>
<p>testTuxedo.jsp<br />
---------------------------------</p>
<p>&lt;body&gt;<br />
&lt;p&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;%<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bea.jolt.pool.servlet.ServletSessionPoolManager bool_mgr = (bea.jolt.pool.servlet.ServletSessionPoolManager) bea.jolt.pool.SessionPoolManager.poolmgr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bea.jolt.pool.servlet.ServletResult result;<br />
&nbsp;&nbsp;&nbsp;&nbsp; //获取在WebLogic服务定义好的连接池<br />
&nbsp;&nbsp;&nbsp;&nbsp; bea.jolt.pool.servlet.ServletSessionPool pool_session = (bea.jolt.pool.servlet.ServletSessionPool)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool_mgr.getSessionPool("JoltPool");<br />
&nbsp;&nbsp;&nbsp;&nbsp; if (pool_session == null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("获取Tuxedo服务失败。"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;br&gt;"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "确认Tuxedo服务已启动且配置正确。");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; // 调用服务<br />
&nbsp;&nbsp;&nbsp;&nbsp; try <br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = pool_session.call("DBREAD", request);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("OK!");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("传递的参数 = " + sendvalue);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("Tuxedo服务成功调用。 ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("返回值："+result.getValue("TEST", ""));<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; catch (bea.jolt.pool.SessionPoolException e) <br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 连接池繁忙<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("此时请求不能被处理。\n"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "错误信息: "+e.getMessage()+"\n"+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "可能的原因：1.无效的连接池 2.连接池已关闭");<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; catch (bea.jolt.pool.ServiceException e) <br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 服务出错<br />
&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("Error："+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Error message:"+e.getMessage()+<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "Error number:"+e.getErrno());<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; catch (bea.jolt.pool.ApplicationException e) <br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 应用程序出错<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = (bea.jolt.pool.servlet.ServletResult) e.getResult();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("错误代码："+result.getApplicationCode());<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception e) <br />
&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.println("意外错误："+e);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; %&gt;<br />
&lt;/p&gt;<br />
&lt;/body&gt;</p>
<p><br />
二、典型的服务应用</p>
<p>Oracle服务器&nbsp;&nbsp; 192.168.0.111<br />
Tuxedo服务器&nbsp;&nbsp; 192.168.0.66<br />
Web服务器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>通过Web客户端访问Web服务器，调用Tuxedo服务访问数据库</p>
<p>1.配置Tuxedo服务器的Oracle连接字符串(TNSNAME)。注意Oracle服务器的防火墙</p>
<p>WINDB =<br />
&nbsp; (DESCRIPTION =<br />
&nbsp;&nbsp;&nbsp; (ADDRESS_LIST =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.111)(PORT = 1521))<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp; (CONNECT_DATA =<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = wincn)<br />
&nbsp;&nbsp;&nbsp; )<br />
&nbsp; )<br />
&nbsp; <br />
2.配置Tuxedo的jrepository文件<br />
3.配置Tuxedo的Config文件,JSR服务的IP与端口要与本地IP一致。</p>
<p>JSL SRVGRP=JSLGRP SRVID=301<br />
CLOPT="-A -- -n //192.168.0.66:9988 -M 10 -x 10 -m 2"</p>
<p>4.配置Web服务器的WebServer，config.xml中ip与端口即为Tuxedo服务器的JSR服务IP与端口<br />
注意Tuxedo服务器的防火墙。</p>
<p>&lt;JoltConnectionPool FailoverAddresses="//192.168.0.66:9988"<br />
&nbsp;&nbsp;&nbsp; MaximumPoolSize="2" MinimumPoolSize="1" Name="JoltPool"<br />
&nbsp;&nbsp;&nbsp; PrimaryAddresses="//192.168.0.66:9988"<br />
&nbsp;&nbsp;&nbsp; SecurityContextEnabled="false" Targets="webServer"/&gt;</p>
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-26 14:01 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows下Tuxedo的安装与配置 zz</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277992.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Tue, 26 May 2009 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277992.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277992.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277992.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277992.html</trackback:ping><description><![CDATA[http://blog.csdn.net/liwei_cmg/archive/2006/05/28/759301.aspx<br />
<br />
<a href="http://blog.csdn.net/liwei_cmg/archive/2006/05/29/759803.aspx">http://blog.csdn.net/liwei_cmg/archive/2006/05/29/759803.aspx</a><br />
<br />
<br />
<p>Windows下Tuxedo的安装与配置-数据库</p>
<p>草木瓜 2005-5-18</p>
<p>一、准备数据库环境</p>
<p>&nbsp; 这里使用的是Linux+Oracle9的虚拟机数据库环境。本机配置Tuxedo服务器。在上篇无数据库配置<br />
&nbsp; 基础上，配置Tuxedo服务器连接Oracle理解起来就相对简单了。这里采用XA方式连接数据库。</p>
<p>二、准备客户端，服务端的应用程序 <br />
&nbsp; <br />
&nbsp; 这里是自已写的代码。<br />
&nbsp; <br />
&nbsp; client.c<br />
&nbsp; <br />
#include &lt;stdio.h&gt;<br />
#include &lt;atmi.h&gt;&nbsp;&nbsp;/* TUXEDO&nbsp; Header File */</p>
<p>main(int argc, char *argv[])<br />
{<br />
&nbsp;char *sendbuf;<br />
&nbsp;long sendlen=1024;<br />
&nbsp;int ret;</p>
<p>&nbsp;<br />
&nbsp;if(argc != 2) {<br />
&nbsp;&nbsp;(void) fprintf(stderr, "args not exist\n");<br />
&nbsp;&nbsp;exit(1);<br />
&nbsp;}</p>
<p>&nbsp;/* 与服务器建立连接 */<br />
&nbsp;if (tpinit((TPINIT *) NULL) == -1) <br />
&nbsp;{<br />
&nbsp;&nbsp;(void) fprintf(stderr, "Tpinit failed\n");<br />
&nbsp;&nbsp;exit(1);<br />
&nbsp;}</p>
<p>&nbsp;/* 分配发送缓冲 */<br />
&nbsp;sendbuf = (char *) tpalloc("STRING", NULL, sendlen);<br />
&nbsp;if (sendbuf== (char *)NULL) <br />
&nbsp;{<br />
&nbsp;&nbsp;(void) fprintf(stderr,"Error allocating send buffer\n");<br />
&nbsp;&nbsp;tpterm();<br />
&nbsp;&nbsp;exit(1);<br />
&nbsp;}</p>
<p>&nbsp;(void) strcpy(sendbuf, argv[1]);<br />
&nbsp;(void) fprintf(stdout, "InputValue: %s\n", argv[1]);</p>
<p>&nbsp;/* 向服务发送请求 */<br />
&nbsp;ret = tpcall("DBSERV", (char *)sendbuf, 0L, (char **)&amp;sendbuf, &amp;sendlen, 0L);<br />
&nbsp;if(ret == -1) {<br />
&nbsp;&nbsp;(void) fprintf(stderr, "Can't send request to service DBREAD\n");<br />
&nbsp;&nbsp;(void) fprintf(stderr, "Tperrno = %d\n", tperrno);<br />
&nbsp;&nbsp;tpfree(sendbuf);<br />
&nbsp;&nbsp;tpterm();<br />
&nbsp;&nbsp;exit(1);<br />
&nbsp;}</p>
<p>&nbsp;(void) fprintf(stdout, "Returned string is: %s\n", sendbuf);<br />
&nbsp;<br />
&nbsp;/* Free Buffers &amp; Detach from System/T */<br />
&nbsp;tpfree(sendbuf);<br />
&nbsp;tpterm();<br />
&nbsp;return(0);<br />
}</p>
<p>&nbsp; server.pc 这里用到了ProC的一些方法<br />
&nbsp;<br />
#include &lt;stdio.h&gt;<br />
#include &lt;ctype.h&gt;<br />
#include &lt;atmi.h&gt;&nbsp;/* TUXEDO Header File */<br />
#include &lt;userlog.h&gt;&nbsp;/* TUXEDO Header File */</p>
<p>EXEC SQL INCLUDE sqlca;</p>
<p>EXEC SQL BEGIN DECLARE SECTION;</p>
<p>VARCHAR ora_no[2];<br />
VARCHAR ora_value[10];<br />
EXEC SQL END DECLARE SECTION;</p>
<p>DBREAD(TPSVCINFO *rqst)<br />
{</p>
<p>&nbsp;strcpy(ora_no.arr,(char *)rqst-&gt;data);<br />
&nbsp;ora_no.len=strlen(ora_no.arr);<br />
&nbsp;ora_no.arr[ora_no.len]='\0';<br />
&nbsp;<br />
&nbsp;userlog("ERRSRV: %s",ora_no.arr);<br />
&nbsp;EXEC SQL select name into :ora_value from tuxedo_test where id=:ora_no;<br />
&nbsp;if(sqlca.sqlcode!=0)<br />
&nbsp;{<br />
&nbsp;&nbsp;userlog("ERRSRV: select name from tuxedo_test where id=, sqlcode=%ld \n",sqlca.sqlcode);<br />
&nbsp;&nbsp;tpreturn(TPFAIL, 0, rqst-&gt;data, 0L, 0);<br />
&nbsp;}</p>
<p>&nbsp;strcpy(rqst-&gt;data,ora_value.arr);<br />
&nbsp;tpreturn(TPSUCCESS, 0, rqst-&gt;data, 0L, 0);<br />
}</p>
<p>三、编译客户端，服务端代码</p>
<p>&nbsp; buildclient -o client -f client.c -v<br />
&nbsp; <br />
&nbsp; 对pc文件，须首先编译为c，然后再编译为服务。在proc编译的过程，会出现link错误，这是因为tuxedo本身<br />
&nbsp; 带的sqlca.h与oracle proc冲突，将C:\bea\tuxedo9.0\include\sqlca.h改名即可。<br />
&nbsp; proc server.pc include=%TUXDIR%/include<br />
&nbsp; buildserver -o server -f server.c -r Oracle_XA -s DBREAD -v</p>
<p>&nbsp;<br />
四、配置Tuxedo的RM文件</p>
<p>&nbsp; 本地Tuxedo9.0安装路径为C:\bea\tuxedo9.0。<br />
&nbsp; 打开C:\bea\tuxedo9.0\udataobj路径下的rm文件。找到Oracle_XA:这句，可以注释掉，然后增加下面内容。<br />
&nbsp; Oracle_XA;xaosw;E:\oracle\ora92\rdbms\XA\ORAXA9.LIB E:\oracle\ora92\precomp\lib\orasql9.lib<br />
&nbsp; 注：本机如果没有装服务版的Oracle,可能找不到对应库文件，可从服务器端复制过来即可。<br />
&nbsp; <br />
&nbsp; 这两个lib是用于编译tms文件的，tuxedo通过TMS_ORA9i与Oracle数据库进行XA通讯。<br />
&nbsp; 修改完rm文件，运行命令buildtms -o C:\bea\tuxedo9.0\bin\TMS_ORA9i -r Oracle_XA编译生成TMS_ORA9i。<br />
&nbsp; <br />
&nbsp; <br />
五、修改ubbconfig文件</p>
<p>&nbsp; 在*GROUP下添加下面语句。<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#105;&#119;&#101;&#105;&#47;&#108;&#105;&#119;&#101;&#105;&#64;&#108;&#105;&#110;&#117;&#120;">liwei/liwei@linux</a>是连接数据库的tns配置。TMSCOUNT=2表示启动两个TMS服务。<br />
&nbsp; <br />
&nbsp; OPENINFO="Oracle_XA:Oracle_XA+Acc=P/liwei/liwei+SqlNet=linux+SesTm=600+MaxCur=5+LogDir=." <br />
&nbsp; TMSNAME="TMS_ORA9i" TMSCOUNT=2<br />
&nbsp; <br />
&nbsp; 另外在*MACHINES添加日志的处理，语句如下。<br />
&nbsp; TLOGDEVICE = "F:\Liwei\Tuxedo\dbread\TLOG"<br />
&nbsp;TLOGNAME = TLOG<br />
&nbsp;TLOGSIZE = 100<br />
&nbsp;<br />
&nbsp;因为编译的服务文件名是server,*SERVERS下改为server<br />
&nbsp;因为生成的服务是DBREAD，所以*SERVICES下也要改成DBREAD。<br />
&nbsp;<br />
&nbsp;修改后文件如下：<br />
&nbsp;&nbsp;<br />
#Liwei</p>
<p>*RESOURCES<br />
IPCKEY&nbsp;&nbsp;123456<br />
DOMAINID&nbsp;liweiapp<br />
MASTER&nbsp;&nbsp;lw<br />
MAXACCESSERS&nbsp;5<br />
MAXSERVERS&nbsp;5<br />
MAXSERVICES&nbsp;5<br />
MODEL&nbsp;&nbsp;SHM<br />
LDBAL&nbsp;&nbsp;N</p>
<p>*MACHINES<br />
LWYM<br />
&nbsp;LMID = lw <br />
&nbsp;TUXDIR = "C:\bea\tuxedo9.0"<br />
&nbsp;TUXCONFIG = "F:\Liwei\Tuxedo\dbread\tuxconfig"<br />
&nbsp;APPDIR = "F:\Liwei\Tuxedo\dbread"<br />
&nbsp;<br />
&nbsp;TLOGDEVICE = "F:\Liwei\Tuxedo\dbread\TLOG"<br />
&nbsp;TLOGNAME=TLOG<br />
&nbsp;TLOGSIZE = 100<br />
&nbsp;#ULOGPFX = "F:\Liwei\Tuxedo\dbread\ULOG"<br />
&nbsp;<br />
*GROUPS<br />
GROUP1&nbsp;LMID=lw GRPNO = 1 <br />
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/liwei/liwei+SqlNet=linux+SesTm=600+MaxCur=5+LogDir=." <br />
TMSNAME="TMS_ORA9i" TMSCOUNT=2</p>
<p>*SERVERS<br />
DEFAULT:<br />
&nbsp;&nbsp;CLOPT="-A"<br />
server SRVGRP=GROUP1 SRVID=1<br />
*SERVICES<br />
DBREAD</p>
<p>&nbsp; 编译日志后不能立刻tmboot运行，需要先用tmadmin创建TLOG。方法如下：<br />
&nbsp; <br />
&nbsp; C:\&gt;tmadmin<br />
&nbsp; &gt;crdl -b 500 -z F:\Liwei\Tuxedo\dbread\TLOG<br />
&nbsp; &gt;crlog -m lw</p>
<p>&nbsp; 注：lw是ubbconfig里面的LMID。<br />
&nbsp; <br />
六、Oracle的设置<br />
&nbsp; <br />
&nbsp; Linux：<br />
&nbsp; <br />
&nbsp; sqlplus /nolog <br />
&nbsp; conn sys/*** as sysdba<br />
&nbsp; <br />
&nbsp; 执行xaview.sql 创建v$xatrans$和 v$pending_xatrans$两个视图<br />
&nbsp; @...../rdbms/admin/xaview.sql<br />
&nbsp; <br />
&nbsp; 并把两个视图的select权限授给连接用户如liwei。<br />
&nbsp; <br />
&nbsp; grant select on v$xatrans$ to liwei with grant option;<br />
&nbsp; grant select on v$pending_xatrans$ to liwei with grant option;<br />
&nbsp; <br />
&nbsp; 最后<br />
&nbsp; <br />
&nbsp; grant select any table to liwei;<br />
&nbsp; <br />
&nbsp; <br />
七、运行tmboot</p>
<p>&nbsp; 你会发现有个TMS_ORA9i启动不起来，没关系，将*RESOURCES max系列的设大点，tmshutdown,并且<br />
&nbsp; 结束掉tuxipc，重新编译config然后tmboot就ok了。<br />
&nbsp; <br />
&nbsp; client 1<br />
&nbsp; 执行就会返回数据库结果了。</p>
=========================<br />
<br />
<p>Windows下Tuxedo的安装配置-数据库补充</p>
<p>草木瓜 2006-5-28</p>
<p>一、序</p>
<p>《Windows下Tuxedo的安装配置-数据库》一文中介绍了通过XA方法连接数据库，步骤比较多，当然也可以采<br />
用另一种方法，在服务程序里面直接写入连接数据库的命令。</p>
<p>二、服务端程序</p>
<p>小作修改</p>
<p>EXEC SQL BEGIN DECLARE SECTION;<br />
VARCHAR ora_no[2];<br />
VARCHAR ora_value[10];<br />
VARCHAR ora_cn[30];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //新增<br />
EXEC SQL END DECLARE SECTION;</p>
<p>EXEC SQL INCLUDE sqlca;</p>
<p><br />
//新增以下内容，tpsvinit,tpsrdone是tuxedo默认构造和析构函数。<br />
tpsvrinit()<br />
{<br />
&nbsp;&nbsp;strcpy(ora_cn.arr,"<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#108;&#105;&#119;&#101;&#105;&#47;&#108;&#105;&#119;&#101;&#105;&#64;&#119;&#105;&#110;&#100;&#98;">liwei/liwei@windb</a>");<br />
&nbsp;&nbsp;ora_cn.len = strlen(ora_cn.arr);<br />
&nbsp;&nbsp;ora_cn.arr[ora_cn.len]='\0';<br />
&nbsp;&nbsp;EXEC SQL CONNECT :ora_cn;<br />
&nbsp;&nbsp;return(0);<br />
}<br />
tpsrvdone()<br />
{<br />
&nbsp;&nbsp;EXEC SQL COMMIT WORK RELEASE;<br />
}</p>
<p>三、配置文件</p>
<p>注释掉与XA相关项，由于客户端与服务器是同一台机器，WSL要不要无所谓。这里也注释掉。</p>
<p>*GROUPS</p>
<p>GROUP1&nbsp;LMID=lw GRPNO = 1 </p>
<p>#OPENINFO="Oracle_XA:Oracle_XA+Acc=P/liwei/liwei+SqlNet=linux+SesTm=600+MaxCur=5+LogDir=." <br />
#TMSNAME="TMS_ORA9i" TMSCOUNT=2</p>
<p><br />
*SERVERS<br />
server SRVGRP=GROUP1 SRVID=1</p>
<p>#WSL&nbsp;SRVGRP=GROUP1 &nbsp;SRVID =300 <br />
#CLOPT="-A -- -n //192.168.98.166:5898 -d/dev/tcp -m1 -M5 -x 10"</p>
<p>*SERVICES<br />
DBREAD</p>
<p>四、编译服务端的命令</p>
<p>修改如下：</p>
<p>proc server.pc include=%TUXDIR%\include<br />
buildserver -o server -f server.c -s DBREAD -v </p>
<p>如果在编译过程中出现error LNK2001: unresolved external symbol _sqlcxt类似的错误，那是因为<br />
找不到orasql9.lib文件。设置环境变量lib,加上e:\oracle\ora92\precomp\lib，修改命令：</p>
<p>buildserver -o server -f server.c -s DBREAD -v -l orasql9.lib</p>
<p>五、编译config文件，运行tmboot</p>
<p>六、补充说明</p>
<p>Tuxedo配置一般如下步骤：</p>
<p>1 设置环境变量。<br />
2 准备服务端客户端程序。<br />
3 服务端客户端编译（buildclient buildserver）。<br />
4 准备tuxedo的config文件。<br />
5 编译config文件（tmload）。<br />
6 如果config文件包含日志，必须通过tmadmin生成日志文件(crdl,crlog)，如出错须将原日志文件删除。<br />
7 启动tuxedo服务（tmboot）。</p>
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-26 14:00 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rhel: how to run simpapp?</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277988.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Tue, 26 May 2009 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277988.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277988.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277988.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277988.html</trackback:ping><description><![CDATA[<strong><span style="color: red"><strong></strong></span>I. Native Client MODE</strong><br />
1)edit env var file, and load env:<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">TUXDIR</span><span style="color: #000000">=</span><span style="color: #000000">/home/oracle/tuxedo10gR3<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />APPDIR</span><span style="color: #000000">=</span><span style="color: #000000">/home/test/atmi<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />TUXCONFIG</span><span style="color: #000000">=</span><span style="color: #000000">$APPDIR/tuxconfig<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />PATH</span><span style="color: #000000">=</span><span style="color: #000000">$PATH:$TUXDIR/bin<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />LD_LIBRARY_PATH</span><span style="color: #000000">=</span><span style="color: #000000">$LD_LIBRARY_PATH:$TUXDIR/lib<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />export&nbsp;TUXDIR&nbsp;TUXCONFIG&nbsp;PATH&nbsp;LD_LIBRARY_PATH</span></div>
<br />
&nbsp;&nbsp; $source var<br />
<br />
2)build server:<br />
&nbsp;&nbsp;&nbsp;$buildserver -o simpserv -f simpserv.c -s TOUPPER<br />
<br />
3 build client:<br />
&nbsp; $buildclient -o simpcl -f simpcl.c<br />
<br />
4)edit ubbconfig file:<br />
&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">*RESOURCES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />IPCKEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">69345</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#Example:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#IPCKEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">123456</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DOMAINID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simpapp<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MASTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simple<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXACCESSERS&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXSERVERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXSERVICES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MODEL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHM<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />LDBAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*MACHINES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DEFAULT:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;APPDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/test/atmi</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXCONFIG</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/test/atmi/tuxconfig</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/oracle/tuxedo10gR3</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#Example:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;APPDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/me/simpapp</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXCONFIG</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/me/simpapp/tuxconfig</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/usr/tuxedo</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />rhelserver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#Example:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#beatux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*GROUPS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />GROUP1<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GRPNO</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;OPENINFO</span><span style="color: #000000">=</span><span style="color: #000000">NONE<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*SERVERS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DEFAULT:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLOPT</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">-A</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />simpserv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRVGRP</span><span style="color: #000000">=</span><span style="color: #000000">GROUP1&nbsp;SRVID</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*SERVICES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />TOUPPER</span></div>
<br />
5) start tuxedo server:<br />
&nbsp; $tmboot<br />
<br />
6) execute the client:<br />
&nbsp; $simpcl "hello, world"<br />
<br />
<br />
<br />
<strong>II) TUXEDO/WS&nbsp; MODE<br />
</strong>A)&nbsp; SERVER<br />
1) env var (as the upper)<br />
2) build server(as the upper)<br />
3) edit ubbconfig file:<br />
&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">*RESOURCES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />IPCKEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">69345</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#Example:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#IPCKEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">123456</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DOMAINID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simpapp<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MASTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;simple<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXACCESSERS&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXSERVERS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">5</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXSERVICES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MODEL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SHM<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />LDBAL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;N<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*MACHINES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DEFAULT:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;APPDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/test/atmi</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXCONFIG</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/test/atmi/tuxconfig</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/oracle/tuxedo10gR3</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#Example:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;APPDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/me/simpapp</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXCONFIG</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/home/me/simpapp/tuxconfig</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TUXDIR</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">/usr/tuxedo</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />rhelserver&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />MAXWSCLIENTS</span><span style="color: #000000">=</span><span style="color: #000000">50</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*GROUPS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />GROUP1&nbsp;&nbsp;LMID</span><span style="color: #000000">=</span><span style="color: #000000">simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GRPNO</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;OPENINFO</span><span style="color: #000000">=</span><span style="color: #000000">NONE<br />
<span style="color: red"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />WSGRP&nbsp;&nbsp;&nbsp;LMID=simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GRPNO=2</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*SERVERS<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />DEFAULT:<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLOPT</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">-A</span><span style="color: #000000">"</span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />simpserv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRVGRP</span><span style="color: #000000">=</span><span style="color: #000000">GROUP1&nbsp;SRVID</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000"><br />
<span style="color: red"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />WSL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SRVGRP=WSGRP&nbsp;SRVID=10&nbsp;RESTART=Y&nbsp;MAXGEN=10&nbsp;GRACE=3600&nbsp;CLOPT="-A&nbsp;--&nbsp;-n//192.168.247.12<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />9:7110&nbsp;&nbsp;&nbsp;-m&nbsp;5&nbsp;-M&nbsp;10&nbsp;-x&nbsp;5"</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />*SERVICES<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />TOUPPER</span></div>
<br />
4) start server :<br />
&nbsp;&nbsp;&nbsp; $tmboot<br />
<br />
B) CLIENT<br />
1)editenv var file, and load env file:<br />
&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">TUXDIR</span><span style="color: #000000">=</span><span style="color: #000000">/home/oracle/tuxedo10gR3<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />APPDIR</span><span style="color: #000000">=</span><span style="color: #000000">/home/test/simpapp<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />TUXCONFIG</span><span style="color: #000000">=</span><span style="color: #000000">$APPDIR/tuxconfig<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />PATH</span><span style="color: #000000">=</span><span style="color: #000000">$PATH:$TUXDIR/bin<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />LD_LIBRARY_PATH</span><span style="color: #000000">=</span><span style="color: #000000">$LD_LIBRARY_PATH:$TUXDIR/lib<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<span style="color: red"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />WSNADDR=//192.168.247.129:7110<br />
</span></span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />export&nbsp;TUXDIR&nbsp;APPDIR&nbsp;TUXCONFIG&nbsp;PATH&nbsp;LD_LIBRARY_PATH&nbsp;WSNADDR</span></div>
<br />
&nbsp;&nbsp; $source var<br />
<br />
2)build client:<br />
&nbsp;&nbsp; $buildclient -o wsimpcl -f simpcl.c -w<br />
<br />
3)run client<br />
&nbsp;&nbsp;&nbsp;&nbsp; $./wsimpcl<br />
&nbsp; 
<img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277988.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-26 13:44 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/26/277988.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TUXEDO应用系统的配置 zz</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/25/277918.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Mon, 25 May 2009 15:19:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/25/277918.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277918.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/25/277918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277918.html</trackback:ping><description><![CDATA[<div class="t_msgfont" id="message18926"><a onclick="javascript:tagshow(event, 'TUXEDO');" href="javascript:;" target="_self"><u><strong>TUXEDO</strong></u></a>应用系统的配置<br />
<br />
3.1 TUXEDO应用系统的常见配置<br />
<br />
配置文件UBBCONFIG介绍<br />
一个TUXEDO应用系统的所有资源都在一个文本文件中进行定义，该文件称为UBBCONFIG，在配置完成后，UBBCONFIG被编译成一个二进制的文件TUXCONFIG.在TUXEDO系统启动时,从该文件中读取系统的配置信息。 UBBCONFIG文件类似WINDOWS下的*.INI文件。它包括以下9大部分, 我们称之为节,RESOURCES，MACHIENS，GROUPS<br />
这三个节必须的，<a onclick="javascript:tagshow(event, '%C6%E4%CB%FB');" href="javascript:;" target="_self"><u><strong>其他</strong></u></a>的节是可选的。<br />
<br />
RESOURCES(必需): 与整个系统有关的配置信息<br />
MACHINES(必需): 一个TUXEDO应用系统可以跨越多台服务器,在该节中配置与每台服务<br />
器有关的信息<br />
GROUPS(必需): TUXEDO中的服务可被分为多个组,在该节中配置与组有关的信息<br />
SERVERS(可选): 与SERVER有关的信息在该节配置<br />
SERVICES(可选): 与SERVICES有关的信息在该节配置<br />
NETWORK(可选):与网络有关的信息在该节配置<br />
ROUTING(可选) :路由规则在该节配置<br />
NETGROUPS(可选):与网络分组有关的信息在该节配置<br />
<br />
名称解释：<br />
TUXEDO应用系统<br />
一个TUXEDO应用系统包括服务端，客户端，服务端安装在服务器上，客户端一般安装在PC机上，从开发角度看，一个TUXEDO应用系统包括服务端程序，客户端程序，一个配置文件。此外，一个TUXEDO应用系统可以部署在一台服务器上，也可以部署在多台服务器上。<br />
SERVER：<br />
服务端程序用C或COBAL编写，每一个程序文件编译成一个相应可执行文件，该可执行文件在运行时称为SERVER，它实际上就是一个进程。每个 SERVER都有一个名字，也就是该进程的名字。为与TUXEDO应用系统的服务端区分，我们在本书中，我们用SERVER表示该进程，用服务端表示 TUXEDO应用系统的服务端。<br />
SERVICE：<br />
在每个服务端程序中，主要是一个个的函数，在TUXEDO中称这些函数为SERVICE，一般<br />
也称之为服务。在该SERVICE中实现业务逻辑，在客户端中调用这些SERVICE来实现各<br />
种操作，如在前面的例子simpapp中， 服务端程序为simpserv.c，它编译成可执行文件<br />
simperv, simpserv就是一个SERVER，该SERVER包括SERVICE：TOUPPER。<br />
<br />
<br />
下面我们给出一个配置文件的例子：<br />
*RESOURCES<br />
IPCKEY 123456<br />
MASTER simple<br />
UID 0<br />
GID 0<br />
PERM 0666<br />
MAXACCESSERS 100<br />
DOMAINID simpapp<br />
MODEL SHM<br />
LDBAL Y<br />
SCANUNIT 10<br />
SANITYSCAN 12<br />
BLOCKTIME 6<br />
NOTIFY DIPIN<br />
MAXCONV 10<br />
<br />
*MACHINES<br />
"MYSYS" LMID="simple"<br />
TUXCONFIG="d:\tuxdemo\pbdemo\tuxconfig"<br />
TUXDIR="d:\tuxedo65"<br />
APPDIR="d:\tuxdemo\pbdemo"<br />
TLOGDEVICE="d:\tuxdemo\pbdemo\TLOG"<br />
TLOGNAME="TLOG"<br />
TLOGSIZE=100<br />
MAXWSCLIENTS=5<br />
CMPLIMIT="MAXLONG,MAXLONG"<br />
NETLOAD=0<br />
SPINCOUNT=0<br />
MAXACLCACHE=100<br />
<br />
*GROUPS<br />
"GROUP1" LMID="simple" GRPNO=1<br />
OPENINFO="Oracle_XA:Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+LogDir=."<br />
TMSNAME="TMS_ORA8i"<br />
TMSCOUNT=2<br />
<br />
*SERVERS<br />
DEFAULT:<br />
CLOPT="-A"<br />
"simpserv" SRVGRP="GROUP1" SRVID=1<br />
CLOPT="-A"<br />
RQADDR="simpserv"<br />
RQPERM=0660 REPLYQ=Y RPPERM=0660 MIN=5 MAX=5 CONV=N<br />
MAXGEN=1 GRACE=86400 RESTART=N<br />
"WSL" SRVGRP="GROUP1" SRVID=1116<br />
CLOPT="-A -- -n //MYSERVER:8888 -m 2 -M 5 -x 6"<br />
*SERVICES<br />
"TOUPPER"<br />
LOAD=50 PRIO=50<br />
BUFTYPE="ALL"<br />
TRANTIME=30<br />
AUTOTRAN=N<br />
<br />
*ROUTING<br />
<br />
各节之间的包含关系：<br />
从上到下，是一对多的关系，即：一个TUXEDO系统可以跨越多台服务器，一台服务器上可以有多个GROUP，但一个GROUP只能在一台服务器上，一个GROUP中可以有多个SERVER，一个SERVER中可以有多个SERVICE。<br />
<br />
<br />
下面我们分别对每个节种具体的常见配置进行说明，NETWORK,NETGROUP,ROUTING三节及其他比较高级的配置我们在后面的内容中说明<br />
<br />
RESOURCES(必需):<br />
该节是必须的，在这里配置与整个TUXEDO应用系统有关的信息，主要包括：<br />
IPCKEY: TUXEDO使用它标识公告板及其他的IPC资源。它不能与该服务器上其他的IPC资源的ID号冲突范围：32,769-262,142<br />
MASTER: 指定该TUXEDO应用系统的MASTER服务器,在该服务器上对整个TUXEDO系<br />
统进行管理配置,可以为该MASTER服务器指定一台备份服务器,当该MASTER<br />
服务器当机时,可从BACKUP服务器上进行管理。在进行系统迁移时,也要指定<br />
BACKUP服务器。<br />
DOMAINID：该TUXEDO应用系统的唯一标识<br />
<br />
UID, GID, PERM:这三个参数控制对系统IPC资源的存取权限<br />
UID: 可对该TUXEDO应用系统进行管理的TUXEDO系统管理员的用户ID,在UNIX下<br />
就是UNIX系统的用户ID,默认为执行TMLOADCF的用户的ID。在NT下该设置<br />
没有用,要设为0。<br />
GID: 在UNIX下为UID中所指定的用户所在的组ID,在NT下该设置没有用,要设为0<br />
PERM: 指定对TUXEDO系统IPC资源的存取权限。默认值为0666,即任何人都可以对该IPC资源进行存取。<br />
<br />
MAXACCESSERS,MAXSERVERS,MAXSERVICES:这三个参数控制该TUXEDO应用系统对IPC资源的使用情况。<br />
<br />
MAXACCESSERS: 在本系统的一个节点(一台服务器)上,同时可以有多少个进程可以访问<br />
该TUXEDO系统的公告板,默认值为50,它包括本地客户端进<br />
程,SERVER进程,但不包括管理进程如:BBL,DBBL等<br />
MAXSERVERS: 在本系统中,总共可以有多少个SERVER存在,包括进行管理的SERVER,<br />
如:BBL,TMS等。默认值为50。<br />
MAXSERVICES: 在本系统中,总共可以有多少个SEVICE存在, 默认值为100。<br />
<br />
<br />
<br />
TUXEDO应用系统的部署方式：<br />
一个TUXEDO应用系统可能部署在一台服务器上或多台服务器上,也可能是部署在共用一块全局共享内存的几台服务器上,可在MODEL,OPTIONAS中配置该TUXEDO应用系统的部署模式。<br />
MODLE:<br />
SHM: 单机或多台服务器但共用一个全局共享内存<br />
MP: 多台服务器但没有共用一个全局共享内存<br />
<br />
OPTION: LAN: 是多机（MP）部署模式<br />
MIGRATE: 可对该系统进行迁移<br />
<br />
<br />
TUXEDO的管理进程BBL定时对它所在的服务器上的TUXEDO系统进行检查,检查超时的事务,超时的客户端连接等。<br />
SCANUNIT: 指定检查的最小时间单位,它单位为秒,必须是5的倍数。 默认值为10,即10<br />
秒。<br />
SANTIYSCAN: 每隔多少个SCANUNIT检查一次, SANITYSCAN*SCANUNIT不能大于<br />
300秒。默认值为12,即120秒<br />
BLOCKTIME: 指定一个消息可以阻塞多长时间,如果过了SANITYSCAN*SCANUNIT秒该<br />
消息还没有发送出去,将超时出错。 SANITYSCAN*SCANUNIT不能大于<br />
32767秒。默认值为6,即60秒。<br />
<br />
同步调用的超时说明<br />
对同步调用TPCALL,指从TPCALL()开始调用,到SERVER端的返回结果到到该客户端并写到输入缓冲区这一段时间。包括:<br />
客户端开始调用TPCALL()<br />
把数据通过网络发送到SERVER端<br />
SERVER端的处理时间<br />
SERVER端把处理结果通过网络返回给客户端<br />
客户端TPCALL()调用返回<br />
<br />
异步调用和会话方式的超时说明<br />
对异步调用和会话方式,当一个进程调用TPACALL(),TPCONNECT(),TPSEND()时,超时时间只包括如果接收队列满时,这些调用的等待时间,如在TPACALL()中,所调用的SERVICE的接收队列如果满了,那么TPACALL()可阻塞在那里,直到该队列不满,可以接收该 TPACALL()发送的请求。从TPACALL()开始阻塞到TPACALL()返回这段时间为它的超时时间。<br />
对TPGETRPLY(),TPRECV()的超时时间是指如果要接收的队列为空时,它们应该阻塞在那里等待有消息到来的时间。<br />
如:超时时间为60秒, 一点整调用TPGETRPLY()从接收的队列取消息,这时接收队列为空,如果到了一点零一分该接受队列还为空,那么TPGETRPLY()将超时出错。<br />
<br />
LDBAL： 要不要进行负载均衡,Y:要,N:不要,默认值为不要<br />
<br />
MAXCONV: 在一台服务器上最多可以有多少个会话同时存在。范围:0-32768,默认值为10<br />
<br />
NOTIFY : 设置消息的通知方式,有以下3种:默认为DIPIN<br />
IGNORE: 该TUXEDO系统中的CLIENT不接收任何消息<br />
SIGNAL: 用SIGUSR1,SIGUSR2信号通知CLIENT有消息到来，如果在非UNIX平台上设<br />
置采用该方式，那么会被自动转化为DIPIN方式。<br />
DIPIN: 当CLIENT调用ATMI函数时,顺便检查看是否有消息,如果有就发送给该<br />
CLIENT默认值为DIPIN<br />
<br />
<br />
*MACHINES(必需):<br />
该TUXEDO应用系统所包含的每台服务器都要在该节中进行配置<br />
LMID:　在TUXEDO，要为该应用系统中的每台服务器指定一个逻辑服务器名。如在上面的例子中，TUXEDO应用服务器MYSYS对应的逻辑服务器名为：simple，<br />
TUXEDO应用服务器名的查看方法：<br />
1. 在UNIX下用uname -n 查看SERVER的名字,<br />
2. 在NT,WIN2000下用ECHO %COMPUTERNAME$查看SERVER的名字<br />
注意：如果SERVER的名字太长(&gt;8)或含有&#8220;.&#8221;等可以" "引起来,如: "DEMOSERVER.COM"<br />
<br />
TUXCONFIG: 配置文件TUXCONFIG所在的路径<br />
TUXDIR: TUXEDO的安装目录<br />
APPDIR: TUXEDO应用系统所在的目录<br />
注意：TUXCONFIG，TUXDIR，APPDIR的值要与它们在环境变量中的设置的值一样<br />
ENVFILE: 该服务器上与TUXEDO有关的环境变量(如FIELDTBLS等)可以放到一个文件中,在ENVFILE中指定该文件名。<br />
TYPE: 指定该服务器的类型,当两台服务器的TYPE不一样时,在它们之间传送数据时要进行<br />
编码/解码<a onclick="javascript:tagshow(event, '%B9%A4%D7%F7');" href="javascript:;" target="_self"><u><strong>工作</strong></u></a><br />
ULOGPFX: 指定ULOG文件所在的目录及前缀。默认目录为$APPDIR,前缀为ULOG。<br />
<br />
UID,GID,PERM,MAXACCESSERS,MAXCONV这些在RESOURCES中的配置,在MACHINES中可以被重新配置,并且这些新的配置值会覆盖在RESOURCES中的配置值。<br />
<br />
<br />
*GROUPS(必需):<br />
在TUXEDO中,要对SERVER进行分组,配置GROUP主要有三个目的,<br />
1． 因为GROUP与<a onclick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" href="javascript:;" target="_self"><u><strong>数据库</strong></u></a>之间是一对一的关系,在一TUXEDO应用系统中,如果有多个数据库,就要配置多个GROUP,在该GROUP中配置TUXEDO与数据库的连接参数等。<br />
2． 数据依赖路由是以GROUP为单位的。<br />
3． 进行系统迁移时也时以GROUP为单位的一个GROUP有一个名字,还有一个GROUP<br />
ID,GROUP的名字和GROUP ID在一个TUXEDO系统中必须唯一。<br />
每个GROUP要指定该GROUP所在的服务器，及它的ID号，如果该GROUP中的SERVER<br />
要与数据库或其他的资源管理器相连，那么要在OPENINFO中设置连接的参数。具体的配置我们在讲数据库编程时再说明。<br />
*SERVERS:<br />
该系统所包含的所有的SERVER都在该节进行配置。<br />
在DEFAULT中的设置对所有的SERVER起作用。<br />
SRVGRP: 该SERVER所在的GROUP<br />
SRVID: 该SERVER所对应的ID,在一个GROUP中必须唯一<br />
MIN: 该SERVER最少启动的进程数<br />
MAX: 该SERVER最多可启动的进程数<br />
<br />
RESTART,RCMD,MAXGEN,GRACE: 在TUXEDO系统了,当一个SERVER进程因某中原因死掉时,可设置它可以自动重起,这4个参数指定TUXEDO的重起信息。<br />
RESTART 该进程死掉时是否可以自动重起,默认为N(不可以)<br />
GRACE，MAXGEN：在GRACE秒内，该进程最多可以重启MAXGEN次。<br />
RCMD： 指定该SERVER重启时,要执行的一个可执行文件名<br />
注意：<br />
1． 为了使一个SERVER可以自动重起,光设置了RESTART=Y还不够,还要设置<br />
GRACE,MAXGEN才能在该SERVER死掉时,自动重起,<br />
2． 该SERVER能够被自动重起的一个前提条件时它还没有被从BULLITION BOARD中清<br />
除。<br />
例子:<br />
<a onclick="javascript:tagshow(event, 'test');" href="javascript:;" target="_self"><u><strong>test</strong></u></a> SRVGRP=GROUP1 SRVID=1 RESTART=Y GRACE=100000 MAXGEN=255<br />
该设置指定在100000秒的时间内,SERVER进程:test可以启动255次。<br />
在缺省情况下，TUXEDEO的每一个SERVER对应一个请求队列，该SERVER从该请求队列中取客户端发来的请求，并把处理的结果通过该请求队列返回给客户端，TUXEDO的SERVER可以配置成多个SERVER对应一个请求队列，即MSSQ方式，以提高响应的速度。<br />
与MSSQ有关的参数是：<br />
RQADDR：该请求队列的名字，一般设成与该SERVER的名字一样<br />
RAPERM：该请求队列的存取权限，默认为0666<br />
REPLYQ：该SERVER中的某个SERVICE调用其他的SERVICE，并有返回结果，则应设置<br />
REPLYQ=Y，即把其他SERVICE的应答放到该队列中<br />
<br />
CONV: 该SERVER是否采用会话(CONVERSATION)通讯方式,注意采用会话通讯方式的SERVICE要单独在一个SERVER中,不能与采用其他通讯方式的SERVICE在同一个SERVER中,并且该SERVER要设置CONV=Y<br />
CLOPT: 指定该SERVER的启动参数。默认为-A,即再该SERVER启动时，发布该SERVER<br />
包含的所有的SERVICE。通用的有:<br />
-e: 指定错误输出文件,默认为$APPDIR下的stderr<br />
-o: 指定标准输出文件,默认为$APPDIR下的stdout<br />
-r: 记录该SERVER中SERVICE每次调用的处理时间,并记录在错误输出文件中,然后可采用<br />
TUXEDO的性能分析工具txrpt对该SERVER进行性能分析。<br />
-A: 发布该SERVER包含的所有的SERVICE<br />
<br />
<br />
<br />
*SERVICES:<br />
在SERVICES中可针对每个SERVICE进行配置，主要有：<br />
AUTOTRAN: 调用该SERVICE时是否自动启一个全局事务。默认为N<br />
LOAD:如果采用负载均衡,指定该SERVICE的负载因子，默认为50<br />
PRIO: 指定该SERVICE的优先级，默认为50<br />
DDR: 指定数据依赖路由规则<br />
<br />
与远程客户端有关的配置：<br />
1． 在MACHINES中要配置MAXWSCLIENTS，即最多可以有多少个远程客户端同时连接<br />
到该服务器上，在上面的例子中为5个<br />
2． 在SERVERS中要配置SERVER：WSL<br />
WSL SRVGRP="GROUP1" SRVID=1116 CLOPT="-A -- -n //192.168.120.113:8888 -m 2 -M 5 -x 6"<br />
说明：<br />
-n //192.168.120.113:8888: 远程客户端通过该端口与服务器建立连接<br />
-m 2 :最少启动多少个WSH进程<br />
-M 5：:最多启动多少个WSH进程，默认值为MAXWSCLIENTS/m<br />
-x 6：每个WSH进程可同时处理多少个远程客户端<br />
3． 程客户端所在的服务器上要配置WSNADDR环境变量，它的值为-n参数的值，如在上面的配置中为：<br />
SET WSNADDR= //192.168.120.113:8888<br />
<br />
配置文件UBBCONFIG的编译:<br />
用下面的命令进行编译:<br />
tmloadcf &#8211;y UBBCONFIG文件名<br />
如:下面的命令编译名为ubbsimple的TUXEDO配置文件,生成二进制的配置文件<br />
TUXCONFIG<br />
tmloadcf &#8211;y ubbsimple<br />
<br />
有时候在改变了TUXCONFIG的目录后，执行tmloadcf，会出现类似下面的错误，可把原来的TUXCONFIG文件删除，然后再编译。<br />
D:\simpdb&gt;tmloadcf -y ubb<br />
CMDTUX_CAT:1601: ERROR: TUXCONFIG,TUXOFFSET d:\simpdb\tuxconfig 0 doesn't match first device entry on configuration d:\tuxdemo\simpdb\tuxconfig 0<br />
D:\simpdb&gt;del tuxconfig<br />
D:\simpdb&gt;tmloadcf -y ubb<br />
D:\simpdb&gt;<br />
用tmunloadcf命令可对二进制的配置文件TUXCONFIG的进行反编译<br />
如下面的命令反编译TUXCONFIG,并把结果输出到文件myubb中。通过反编译TUXCONFIG可查看该TUXEDO应用系统的一些属性默认值。<br />
Tmunloadcf &gt;myubb<br />
<br />
<br />
<br />
<br />
3.2 多机（MP）模式的配置<br />
<br />
一个TUXEDO应用系统可以部署在多台服务器上，这些服务器通过网络连接，这种部署方式称为MP方式，在这些服务器中要选择一台服务器做MASTER服务器,在该服务器上有一个DBBL进程,负责整个TUXEDO应用系统的管理工作。在每台服务器上都有一个BBL进程，它与DBBL进程进行通信，管理各自服务器上的配置。每台服务器上还有一个名为BRIDGE的进程和一个名为TLISTEN的进程，他们负责服务器之间的通讯。MP模式的结构如图：<br />
<br />
<br />
<br />
<br />
如果配置了MP方式，那么在这些服务器之间可以做负载均衡和容错，客户端可以和其中的任何一台服务器建立连接，如果该服务器上没有该客户端所要调用的服务（SERVICE），TUXEDO可以自动把请求发送到别的有该服务的机器取处理，并把结果返回个客户端，如图，SITE1上的客户端调用了 TRANSFER，当在SITE1上没有该SERVICE，在SITE3上有，<br />
那么SITE1通过BRIDGE把请求发送到SITE3上，SITE3把处理结果也通过BRIDGE发送到SITE1上，通过SITE1把结果返回给该客户端。这些对客户端时透明的。<br />
如果SITE1，STIE2，SITE3上都有TRANSFER，并且设置了负载均衡（LDBAL =Y），那么TUXEDO将根据他们的负载情况把请求发送到负载较小的服务器上。<br />
如果SITE1，SITE2，SITE3中的某一台或两台服务器出故障了，那么正常的机器仍然能够继续运行，如果时他们之间的网络连接断了，BRIDGE进程会自动进行重试，并且在这些服务器之间可以配置多个网络连接通路，当其中的一个出现故障时，会自动采用别的连接通路。<br />
所以MP方式提供了一个高可靠性的分布式应用系统。<br />
<br />
配置成MP方式的步骤：<br />
1. 这些服务器之间可以通过网络互相访问<br />
2. 在每台服务器上都正确安装了TUXEDO SERVER<br />
3. 应用已发布到这些服务器上<br />
4. 选择一台服务器做MASTER机,<br />
6. 在RESOURCES,MACHINES,NETWORK,NETGROUPS中做相应的配置<br />
<br />
RESOURCE:<br />
MODEL要设为MP<br />
OPTIONS中要有LAN<br />
<br />
MASTER服务器上的DBBL负责与其他服务器上的服务器BBL进行通讯,<br />
BBLQUERY: 每台服务器上的BBL每隔SCANUNIT*BBLQUERY秒,向MASTER机上的<br />
DBBL发送一次状态信息。默认为300秒<br />
DBBLWAIT: 如果MASTER机没有收到某台服务器发送的状态信息,它将等待<br />
SCANUNIT*DBBLWAIT秒,如果还没有收到该服务器发送的状态信息,这台服务<br />
器将被分离出去(PARTITIONED)，默认为20秒<br />
<br />
MACHIENS：<br />
在MACHINES中要配置该TUXEDO应用系统包括的每台服务器，如果该服务器时UNIX服务器，那么要配置UID，GID，UID，GID为TUXEDO用户所对应的UID，GID，在UNIX下可以用ID命令查看。<br />
<br />
<br />
NETWORK:<br />
在该节中配置服务器之间通讯的IP地址及BRIDGE进程,<br />
在一个MP方式的TUXEDO应用系统中，不同的服务器之间通过BRIDGE进程进行通讯，该BRIDGE的侦听IP地址及端口<br />
在NADDR中指定。如果是在UNIX下要指定该BRIDGE所用的网络设备，如果是在NT下则不要。<br />
<br />
在TUXEDO系统启动前，不同服务器之间的通讯是通过tlisten进程来进行的，因为这时还没有BRIDGE进程。<br />
NLSADDR为tlisten进程侦听的IP地址及端口。<br />
<br />
一个MP方式的配置例子。<br />
<br />
环境：WIN2000服务器一台，安装TUXEDO6.5, 服务器名WIN,IP地址:10.13.1.124<br />
SUN5.8服务器一台，安装TUXEDO6.5, 服务器名SUN,IP地址:12.22.32.35<br />
MASTER机为WIN2000服务器,BACKUP机为SUN。<br />
<br />
在WIN2000服务器上的UBBCONFIG的内容如下,在SUN服务器上不用编写UBBCONFIG文件。当启动时DBBL会自动<br />
把WIN2000服务器上的TUXCONFIG文件发送到SUN服务器上。<br />
<br />
*RESOURCES<br />
IPCKEY 87656<br />
MASTER site1,site2<br />
MAXACCESSERS 40<br />
MAXSERVERS 40<br />
MAXSERVICES 40<br />
MODEL MP<br />
OPTIONS LAN<br />
<br />
*MACHINES<br />
WIN LMID=site1<br />
APPDIR="d:\tuxdemo\mp"<br />
TUXCONFIG="d:\tuxdemo\mp\tuxconfig"<br />
TYPE="win2000"<br />
TUXDIR="d:\tuxedo65"<br />
<br />
SUN LMID=site2<br />
UID=1006<br />
GID=30<br />
APPDIR="/export/home/simpapp"<br />
TUXCONFIG="/export/home/simpapp/tuxconfig"<br />
TYPE="sun"<br />
TUXDIR="/export/home/tuxedo"<br />
<br />
*GROUPS<br />
GROUP1<br />
LMID=site1 GRPNO=1 ōPENINFO=NONE<br />
GROUP2<br />
LMID=site2 GRPNO=2 ōPENINFO=NONE<br />
<br />
<br />
*NETWORK<br />
site1 NADDR="//10.13.1.124:6000"<br />
NLSADDR="//10.13.1.124:6001"<br />
<br />
<br />
site2 NADDR="//12.22.32.35:6000"<br />
NLSADDR="//12.22.32.35:6001"<br />
BRIDGE="/dev/tcp"<br />
<br />
<br />
<br />
*SERVERS<br />
DEFAULT:<br />
CLOPT="-A"<br />
<br />
simpserv SRVGRP=GROUP2 SRVID=3<br />
<br />
*SERVICES<br />
TOUPPER<br />
<br />
<br />
1. 在WIN2000服务器上把该UBBCONFIG编译成TUXCONFIG<br />
tmloadcf -y ubbmp<br />
2. 在WIN2000服务器上启动tlisten进程<br />
tlisten -l //10.13.1.124:6001<br />
3. 在SUN服务器上启动tlisten进程<br />
tlisten -d /dev/tcp -l /12.22.32.35:6001<br />
4. 在WIN2000服务器上启动该TUXEDO应用系统<br />
tmboot -y<br />
TUXEDO会先启动WIN2000服务器上的进程,然后再启动SUN服务器上的进程。<br />
5. 在WIN2000服务器上执行<br />
simpcl mp test<br />
因为WIN2000服务器上没有TOUPPER服务,TUXEDO会自动调用SUN服务器上的TOUPPER服务,并把结果返回给客户端,这一切对客户端来说是透明的。</div>
 <img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-25 23:19 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/25/277918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TUXEDO监视系统运行tmadmin命令</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/25/277916.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Mon, 25 May 2009 15:17:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/25/277916.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277916.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/25/277916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277916.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277916.html</trackback:ping><description><![CDATA[<p>TUXEDO监视系统运行</p>
<p>进入linux系统，在linux系统dos输入页面中输入tmadmin</p>
<p>进入tmadmin的监管环境，输入下面的命令即可</p>
<p>启动tmadmin<br />
tmboot&nbsp; -y</p>
<p>1查看服务信息psr<br />
(1) 命令: printserver 简写 psr<br />
(2)&nbsp; psr [-m machine] [-g groupname] [-i srvid] [-q qaddress]<br />
-m machine LMID为 machine的所有服务进程<br />
-g groupname 组名为groupname的所有服务进程<br />
-I srvid SRVID为srvid的服务进程<br />
-q qaddress 消息队列为qaddress的所有SERVERS查看<a onclick="javascript:tagshow(event, 'server');" href="javascript:;" target="_self"><u><strong>server</strong></u></a>的信息<br />
(3) 结果示例:<br />
Prog Name&nbsp;&nbsp;&nbsp;&nbsp; Queue Name&nbsp;&nbsp; Grp Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID&nbsp;&nbsp; RqDone&nbsp; Load Done&nbsp; Current Service<br />
---------&nbsp;&nbsp;&nbsp; ----------&nbsp;&nbsp;&nbsp; --------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&nbsp;&nbsp;&nbsp; ------&nbsp; ---------&nbsp; ---------------<br />
rz_Ecsb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00004.04000&nbsp;&nbsp; APGP2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4000&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&nbsp; IDLE )<br />
BBL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 70020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&nbsp; IDLE )<br />
IFMTMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; APGP2_TMS&nbsp;&nbsp;&nbsp; APGP2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30001&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&nbsp; IDLE )<br />
ftpserv32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00002.00001&nbsp; FTPGP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp; 60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3000&nbsp;&nbsp;&nbsp;&nbsp; (&nbsp; IDLE )<br />
结果说明:<br />
列号&nbsp; 描述<br />
1. 服务的可执行文件名<br />
2. 服务连接的队列名<br />
3. 组名<br />
4. 服务的数字id<br />
5. 服务已经处理的请求数(该SERVER的所有service的负载因子总和)<br />
6. 服务处理的全部请求的参数和，如果当前没有service被调用，则为IDLE<br />
2查看交易信息psc<br />
(1)&nbsp; 命令: printservice&nbsp; 简写: psc<br />
psc [-m machine] [-g groupname] [-I srvid] [-q qaddress]<br />
[-s service] [-a {0|1|2}]<br />
-s service 显示名为sevice的service信息<br />
-a {0|1|2} 显示系统的隐含的service<br />
<a onclick="javascript:tagshow(event, '%C6%E4%CB%FB');" href="javascript:;" target="_self"><u><strong>其他</strong></u></a>参数与psr命令相同<br />
(2)&nbsp; 结果示例:<br />
Service Name&nbsp;&nbsp; Routine Name&nbsp;&nbsp; Prog Name&nbsp; Grp Name&nbsp;&nbsp; ID&nbsp;&nbsp; Machine&nbsp;&nbsp; # Done&nbsp;&nbsp; Status<br />
------------&nbsp;&nbsp; ------------&nbsp;&nbsp;&nbsp;&nbsp; -------&nbsp;&nbsp;&nbsp; --------&nbsp;&nbsp; --&nbsp;&nbsp; -------&nbsp;&nbsp; ------&nbsp;&nbsp; ------<br />
416701&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rz_Ecsb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rz_Ecsb&nbsp;&nbsp;&nbsp;&nbsp; APGP2&nbsp;&nbsp;&nbsp;&nbsp; 4000&nbsp;&nbsp;&nbsp; simple&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AVAIL<br />
416601&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rz_Ecsb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rz_Ecsb&nbsp;&nbsp;&nbsp;&nbsp; APGP2&nbsp;&nbsp;&nbsp;&nbsp; 4000&nbsp;&nbsp;&nbsp; simple&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AVAIL<br />
416501&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rz_Ecsb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rz_Ecsb&nbsp;&nbsp;&nbsp;&nbsp; APGP2&nbsp;&nbsp;&nbsp;&nbsp; 4000&nbsp;&nbsp;&nbsp; simple&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AVAIL<br />
(3)&nbsp; 结果说明:<br />
列号&nbsp;&nbsp;&nbsp; 描述<br />
1. Service Name :服务名<br />
2. Routine Name :函数名(采用TUXEDO服务的别名机制,一个函数可以对应多个服务名)<br />
3. Prog Name :service 所在的SERVER名<br />
4. Grp Name :组名<br />
5. ID ：server的ID号<br />
6. Machine :server所在的LMID<br />
7. # Done ：service被调用的次数<br />
8. Status :service的状态。AVAIL表示可用<br />
3查看队列信息pq<br />
(1) 命令: printqueue 简写:pq [PADRESS]<br />
(2) 结果示例:<br />
pq 00004.05062<br />
Prog Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Queue Name&nbsp; # Serve&nbsp; Wk Queued&nbsp; # Queued&nbsp; Ave. Len&nbsp;&nbsp;&nbsp; Machine<br />
---------&nbsp;&nbsp;&nbsp; ------------&nbsp; ------&nbsp;&nbsp; ---------&nbsp; --------&nbsp; --------&nbsp;&nbsp;&nbsp; -------<br />
CCS_GEDAIPC_50 00004.05062&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; simple<br />
(3) 结果说明:<br />
列号&nbsp;&nbsp;&nbsp; 描述<br />
1. Prog Name :队列连接的服务的可执行文件名<br />
2. Queue Name :字符队列名，是RQADDR参数或一个随机值<br />
3. #Serve :连接的服务数<br />
4. Wk Queued :当前队列的所有请求的参数和<br />
5. #Queued :实际请求数<br />
6. Ave.Len :平均队列长度<br />
7. Machine :队列所在机器的LMID<br />
4查看客户端信息pclt<br />
(1) 命令: printclient 简写:pclt<br />
-m machine 显示LMID号为machine上的客户端连接<br />
-u username 显示用户名为username 的客户端连接<br />
-c ctlname 显示用户进程为ctlname的客户端连接<br />
(2) 结果示例:<br />
&nbsp; LMID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Client Name&nbsp;&nbsp;&nbsp; Time&nbsp;&nbsp;&nbsp; Status&nbsp; Bgn/Cmmt/Abrt<br />
---------- --------------- --------------- -------- ------- -------------<br />
simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ccsmis&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WSH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17:42:47&nbsp;&nbsp; IDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/0/0<br />
simple&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ccsmis&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmadmin&nbsp;&nbsp;&nbsp; 0:44:28&nbsp;&nbsp;&nbsp; IDLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0/0/0<br />
(3) 结果说明:<br />
列号&nbsp; 描述<br />
1. 已经登录的客户端机器的LMID<br />
2. 用户名，由tpinit()提供的<br />
3. 客户端名，由tpinit()提供的<br />
4. 客户端连接后经过的时间<br />
5. 客户端状态<br />
6. IDLE——表示客户端目前没有任何交易在<a onclick="javascript:tagshow(event, '%B9%A4%D7%F7');" href="javascript:;" target="_self"><u><strong>工作</strong></u></a><br />
7. IDLET——表示客户端启动了一个交易<br />
8. BUSY——表示客户端在工作中<br />
9. BUSYT——表示客户端正在交易控制下工作<br />
10. 启动/提交/中断的交易数</p>
<p>5查看部分统计信息bbs<br />
(4) 命令: bbstats&nbsp; 简写：bbs<br />
&gt; bbs<br />
Current Bulletin Board Status:<br />
Current number of servers: 335<br />
Current number of services: 2324<br />
Current number of request queues: 27<br />
Current number of server groups: 11<br />
Current number of interfaces: 0</p>
<p>6观察某个节点的进程信息default<br />
(5) 命令：default &#8211;m<br />
&gt; default -m SITE13</p>
<p>SITE13&gt; psr<br />
Prog Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Queue Name&nbsp; Grp Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ID RqDone Load Done Current Service<br />
---------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ----------&nbsp; --------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- ------ --------- ---------------<br />
BBL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30004.00000 SITE13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 22827&nbsp;&nbsp; 1141350 ..ADJUNCTBB<br />
BRIDGE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 836437&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SITE13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 (&nbsp; IDLE )<br />
GWADM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00021.00019 BGWGRP1+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 (&nbsp; IDLE )<br />
GWTDOMAIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00021.00020 BGWGRP1+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 123826&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br />
GWADM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00022.00021 BGWGRP2+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 (&nbsp; IDLE )<br />
GWTDOMAIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00022.00022 BGWGRP2+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 (&nbsp; IDLE )<br />
GWADM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00025.00027 GWGRP1_+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200 (&nbsp; IDLE )</p>
<p>7查看消息发送状态pnw<br />
(6) 命令：printnetwork 简写 pnw<br />
&gt; pnw SITE12</p>
<p>SITE12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Connected To:&nbsp; msgs sent&nbsp;&nbsp;&nbsp; msgs received<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SITE14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 61904&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 62319<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SITE13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 61890&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 62288<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SITE11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15972&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13564<br />
8退出管理模式q<br />
(7) 命令: quit&nbsp; 简写：q<br />
</p>
 <img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-25 23:17 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/25/277916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tuxedo bankapp</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277621.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Sat, 23 May 2009 15:33:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277621.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277621.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277621.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277621.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Normal0falsefalsefalseMicrosoftInternetExplorer4st1\:*{behavior:url(#ieooui) }/* Style Definitions */table.MsoNormalTable{mso-style-name:標準の...&nbsp;&nbsp;<a href='http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277621.html'>阅读全文</a><img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-23 23:33 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rhel :how to run bankapp?</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277620.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Sat, 23 May 2009 15:28:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277620.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277620.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277620.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277620.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277620.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1)edit the bankvar file:&nbsp;&nbsp; Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(c)&nbsp;20...&nbsp;&nbsp;<a href='http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277620.html'>阅读全文</a><img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277620.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-23 23:28 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/23/277620.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tuxedo : Using C++'s  Constructors and Destructors</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/22/277360.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Fri, 22 May 2009 08:20:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/22/277360.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277360.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/22/277360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277360.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277360.html</trackback:ping><description><![CDATA[<a name="1390181">&nbsp;
<p>C++ constructors are called to initialize class objects when those objects are created, and destructors are invoked when class objects are destroyed. For automatic (that is, local, non-static) variables that contain constructors and destructors, the constructor is called when the variable comes into scope and the destructor is called when the variable goes out of scope. However,<span style="color: red">&nbsp;when you call the <a href="file:///C:/beadocs/beatux81doc/pgc/pgserv.htm#1167965">tpreturn()</a><a name="1390181"> or <a href="file:///C:/beadocs/beatux81doc/pgc/pgserv.htm#1168061">tpforward()</a><a name="1390181"> function, the compiler performs a non-local goto (using <font class="code">longjmp</font>(3)) such that destructors for automatic variables are not called. </span></a>To avoid this problem, write the application so that you call <font class="code">tpreturn()</font> or <font class="code">tpforward()</font> from the service routine directly (instead of from any functions that are called from the service routine). In addition, one of the following should be true:</p>
</a>
<ul type="square"><a name="1390184">
    <p>
    <li type="square">The <span style="color: red">service routine should not have any automatic variables with destructors </span>(they should be declared and used in a function called by the service routine).</a> <a name="1390185">
    <p>&nbsp;</p>
    <li type="square"><span style="color: red">Automatic variables should be declared and used in a nested scope (contained within curly brackets {}) </span>in such a way that the scope ends before calling the <a href="file:///C:/beadocs/beatux81doc/pgc/pgserv.htm#1167965">tpreturn()</a> or <a href="file:///C:/beadocs/beatux81doc/pgc/pgserv.htm#1168061">tpforward()</a> function. </a></li>
</ul>
 <img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-22 16:20 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/22/277360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tuxedo  config the Tuxedo Administration Console</title><link>http://www.blogjava.net/jinfeng_wang/archive/2009/05/22/277251.html</link><dc:creator>jinfeng_wang</dc:creator><author>jinfeng_wang</author><pubDate>Fri, 22 May 2009 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/jinfeng_wang/archive/2009/05/22/277251.html</guid><wfw:comment>http://www.blogjava.net/jinfeng_wang/comments/277251.html</wfw:comment><comments>http://www.blogjava.net/jinfeng_wang/archive/2009/05/22/277251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jinfeng_wang/comments/commentRss/277251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jinfeng_wang/services/trackbacks/277251.html</trackback:ping><description><![CDATA[1) start&nbsp; tuxwsvr
<p class="table"><font class="code">tuxwsvr -l //</font><em><font class="code">machine</font></em><font class="code">:</font><em><font class="code"><span style="color: red"><em><font class="code">port1</font></em><font class="code"> </font></span></font></em><font class="code">-i $TUXDIR/udataobj/tuxwsvr.ini<br />
Example : tuxwsvr -l //192.168.122.128:4003 -i $TUXDIR/udataobj/tuxwsvr.ini<br />
<br />
2)Starting wlisten<br />
&nbsp;&nbsp;&nbsp; a) edit the file &nbsp;<font class="code">$TUXDIR/udataobj/webgui/webgui.ini</font> , and config the <font class="code">NADDR</font> parameter as follows:<br />
&nbsp;&nbsp;&nbsp;&nbsp;Example&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font class="code">NADDR=//192.168.122.128:<span style="color: red">6060</span></font><br />
&nbsp;&nbsp;&nbsp; b) run cmd : <font class="code">wlisten</font></font></p>
<br />
<br />
3) open your client browser and enter into the administrator console page:<br />
&nbsp;&nbsp; Example: http://192.168.122.128:4003/webguitop.html <br />
<br />
<br />
Reference :&nbsp; http://forums.oracle.com/forums/thread.jspa?threadID=883934&amp;tstart=30<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://peoplesofttipster.com/2007/04/02/get-up-and-running-with-the-tuxedo-administration-console/
 <img src ="http://www.blogjava.net/jinfeng_wang/aggbug/277251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jinfeng_wang/" target="_blank">jinfeng_wang</a> 2009-05-22 11:02 <a href="http://www.blogjava.net/jinfeng_wang/archive/2009/05/22/277251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>