﻿<?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-重剑无锋-文章分类-windchill</title><link>http://www.blogjava.net/morgan/category/52604.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 13 Sep 2012 16:31:56 GMT</lastBuildDate><pubDate>Thu, 13 Sep 2012 16:31:56 GMT</pubDate><ttl>60</ttl><item><title>windchill 10.0 性能优化</title><link>http://www.blogjava.net/morgan/articles/387673.html</link><dc:creator>morgan</dc:creator><author>morgan</author><pubDate>Thu, 13 Sep 2012 11:23:00 GMT</pubDate><guid>http://www.blogjava.net/morgan/articles/387673.html</guid><wfw:comment>http://www.blogjava.net/morgan/comments/387673.html</wfw:comment><comments>http://www.blogjava.net/morgan/articles/387673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/morgan/comments/commentRss/387673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/morgan/services/trackbacks/387673.html</trackback:ping><description><![CDATA[&nbsp; &nbsp; &nbsp; &nbsp; 目前的项目需要做windchill10.0系统的优化工作，经过整理，现在罗列如下<br />&nbsp; &nbsp; &nbsp; &nbsp; 一 在site.xconf文件中添加如下内容：<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 &lt;Property name="wt.org.services.userPasswordChangeEnabled" overridable="true" targetFile="codebase/wt.properties" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value="true"/&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 允许用户修改密码的功能<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2 &nbsp;&lt;Property name="wt.manager.monitor.services" overridable="true" targetFile="codebase/wt.properties" value="MethodServer &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BackgroundMethodServer"/&gt;<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Property name="wt.queue.executeQueues" overridable="true" targetFile="codebase/wt.properties" value="false"/&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Property name="wt.manager.monitor.start.MethodServer" overridable="true" targetFile="codebase/wt.properties" value="3"/&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Property name="wt.manager.monitor.start.BackgroundMethodServer" overridable="true" targetFile="codebase/wt.properties" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value="2"/&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 定义后台方法服务器，并将队列的执行转移到后台方法服务器上。同时定义了方法服务器和后台方法服务器的个数。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3&nbsp;&nbsp;&lt;Property name="wt.method.maxHeap" overridable="true" targetFile="codebase/wt.properties" value="3072"/&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Property name="wt.method.minHeap" overridable="true" targetFile="codebase/wt.properties" value="3072"/&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Property name="wt.manager.maxHeap" overridable="true" targetFile="codebase/wt.properties" value="512"/&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;Property name="wt.manager.minHeap" overridable="true" targetFile="codebase/wt.properties" value="512"/&gt;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 定义了后台方法服务器最大堆大小，最小堆大小，服务器管理器最大堆大小和最小堆大小。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4 &nbsp;保存site.xconf文件，在windchill shell中执行 xconfmanager -p 命令。<br />&nbsp; &nbsp; &nbsp; &nbsp; 二 &nbsp;tomcat内存优化<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 使用编辑器打开&lt;WT_HOME&gt;\tomcat\bin\wttomcat_start.bat文件。修改-Xms和-Xmx参数值为-Xms4096M -Xmx4096M<br />&nbsp; &nbsp; &nbsp; &nbsp; 三 &nbsp;重新启动windchill服务器，在windchill shell中输入windchill stop &amp; windchill start。<br /><br /><br /></div><img src ="http://www.blogjava.net/morgan/aggbug/387673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/morgan/" target="_blank">morgan</a> 2012-09-13 19:23 <a href="http://www.blogjava.net/morgan/articles/387673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windchill 中实现获取带有层级记录的BOM功能</title><link>http://www.blogjava.net/morgan/articles/BOM.html</link><dc:creator>morgan</dc:creator><author>morgan</author><pubDate>Wed, 12 Sep 2012 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/morgan/articles/BOM.html</guid><wfw:comment>http://www.blogjava.net/morgan/comments/387558.html</wfw:comment><comments>http://www.blogjava.net/morgan/articles/BOM.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/morgan/comments/commentRss/387558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/morgan/services/trackbacks/387558.html</trackback:ping><description><![CDATA[&nbsp; &nbsp; &nbsp; 在windchill中，BOM管理作为一种核心的业务功能存在，但是在windchill10.0版本的系统OOTB功能中，BOM无法提取零件的分类属性，因此一般情况下，都会进行克制化开发，获取BOM结构以及零件的层级是导出BOM报表的关键代码。获取BOM一般通过递归进行处理，往往都是传入顶层的部件，通过深度优先遍历，即可获取BOM结构，但是零件的层级，在系统的数据库中并没有进行记录，因此需要我们通过代码来计算。其实，零件的层级计算可以转换成递归算法的深度，因此实现BOM报表功能的核心代码就是要实现递归，以及计算递归深度。<br /><br />&nbsp; &nbsp; &nbsp; 1 先定义一个类，记录部件，部件的使用关系，部件层级。定义如下：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;BOMElement&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">index&nbsp;部件在BOM中的层数</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;index;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">part&nbsp;BOM中的部件</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;WTPart&nbsp;part;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">link&nbsp;部件的link(link&nbsp;描述当前部件)</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;WTPartUsageLink&nbsp;link;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">根节点元素的初始化</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;BOMElement(WTPart&nbsp;part){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.index&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.part&nbsp;=&nbsp;part;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.link&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">所有子节点元素的初始化</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;BOMElement(<span style="color: #0000FF; ">int</span>&nbsp;index,WTPart&nbsp;part,WTPartUsageLink&nbsp;link){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.index&nbsp;=&nbsp;index;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.part&nbsp;=&nbsp;part;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.link&nbsp;=&nbsp;link;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getIndex()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;index;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setIndex(<span style="color: #0000FF; ">int</span>&nbsp;index)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.index&nbsp;=&nbsp;index;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;WTPart&nbsp;getPart()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;part;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setPart(WTPart&nbsp;part)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.part&nbsp;=&nbsp;part;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;WTPartUsageLink&nbsp;getLink()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;link;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setLink(WTPartUsageLink&nbsp;link)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.link&nbsp;=&nbsp;link;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br />&nbsp; &nbsp; &nbsp; 2 传入顶层部件，实现递归查询子部件，并定义变量，记录递归深度：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;List&lt;BOMElement&gt;&nbsp;queryBOM(WTPart&nbsp;part)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;WTException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOMElement&nbsp;root&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;BOMElement(part);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;BOMElement&gt;&nbsp;list&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ArrayList&lt;BOMElement&gt;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConfigSpec&nbsp;configSpec&nbsp;=&nbsp;WTPartHelper.service.findWTPartConfigSpec();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;index&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&nbsp;=&nbsp;querySubBOMList(root,configSpec,list,index);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;list;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;List&lt;BOMElement&gt;&nbsp;querySubBOMList(BOMElement&nbsp;element,ConfigSpec&nbsp;configSpec,List&lt;BOMElement&gt;&nbsp;list,<span style="color: #0000FF; ">int</span>&nbsp;index)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;WTException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(element);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QueryResult&nbsp;qr&nbsp;=&nbsp;WTPartHelper.service.getUsesWTParts(element.getPart(),configSpec);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vector&lt;Object&gt;&nbsp;vector&nbsp;=&nbsp;qr.getObjectVectorIfc().getVector();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;i&lt;vector.size();i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Persistable[]&nbsp;persist&nbsp;=&nbsp;(Persistable[])&nbsp;vector.get(i);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOMElement&nbsp;subElement&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;BOMElement(index,(WTPart)persist[1],(WTPartUsageLink)persist[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;querySubBOMList(subElement,configSpec,list,index);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;list;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div>&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp;3 上面定义中，index变量记录递归深度，在递归调用之前，该变量自增1，表示递归调用一次，递归调用后，该变量自减1，表示递归调用减少一次。以此来记录递归调用的次数。并在构造BOMElement中，以此来记录零件的层级。&nbsp;<br /><br />&nbsp;<img src ="http://www.blogjava.net/morgan/aggbug/387558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/morgan/" target="_blank">morgan</a> 2012-09-12 16:14 <a href="http://www.blogjava.net/morgan/articles/BOM.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>