﻿<?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-LightUpHeaven</title><link>http://www.blogjava.net/LightUpHeaven/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 06:02:42 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 06:02:42 GMT</pubDate><ttl>60</ttl><item><title>无尽的传输欲望 OpenAdaptor大型专题 菜鸟版第四弹</title><link>http://www.blogjava.net/LightUpHeaven/archive/2010/11/03/336927.html</link><dc:creator>Vigoss</dc:creator><author>Vigoss</author><pubDate>Wed, 03 Nov 2010 05:54:00 GMT</pubDate><guid>http://www.blogjava.net/LightUpHeaven/archive/2010/11/03/336927.html</guid><wfw:comment>http://www.blogjava.net/LightUpHeaven/comments/336927.html</wfw:comment><comments>http://www.blogjava.net/LightUpHeaven/archive/2010/11/03/336927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LightUpHeaven/comments/commentRss/336927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LightUpHeaven/services/trackbacks/336927.html</trackback:ping><description><![CDATA[<p><font style="background-color: #cfe0e2">这里LZ再做最后一次冲刺，如果能找到线索，就继续，找不到，就找华生。<br />
今天问了Leader，To be Cruel<br />
因为populateMap作用域是private，所以它只能在本地被调用。<br />
我们看看都有谁调用了它！</font></p>
<p><font style="background-color: #cfe0e2">1,&nbsp; public void setProcessMap(Map map) {<br />
&nbsp;&nbsp;&nbsp; processMap.clear();<br />
&nbsp;&nbsp;&nbsp; populateMap(map, processMap);<br />
&nbsp; }</font></p>
<p><font style="background-color: #cfe0e2">2,&nbsp; public void setDiscardMap(Map map) {<br />
&nbsp;&nbsp;&nbsp; discardMap.clear();<br />
&nbsp;&nbsp;&nbsp; populateMap(map, discardMap);<br />
&nbsp; }<br />
从前面大家知道这个populateMap是将它的第一个参数里面值传给它第二个参数里面的Map里面。<br />
我们的线索就是我们的数据传到了哪里，我们就找哪里。<br />
现在传到了Map里，那我们就找Map看谁和它有联系。<br />
有三个方法和processMap有关系：</font></p>
<p><font style="background-color: #cfe0e2">1，public List getProcessDestinations(IMessageProcessor processor) {<br />
&nbsp;&nbsp;&nbsp; List l = (List) processMap.get(processor);<br />
&nbsp;&nbsp;&nbsp; return l != null ? l : Collections.EMPTY_LIST;<br />
&nbsp; }<br />
注意它返回的是一个list，它将传进来的参数作为key，然后返回一个MessageProcessor的List。</font></p>
<p><font style="background-color: #cfe0e2">2，&nbsp; protected IMessageProcessor getIfAlreadyAutoboxed(Object processor){<br />
&nbsp;&nbsp;&nbsp; Object boxed = null;<br />
&nbsp;&nbsp;&nbsp; Iterator ite = processMap.keySet().iterator();<br />
&nbsp;&nbsp;&nbsp; while(ite.hasNext()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object key = ite.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(! (key instanceof Node)) continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Node node = (Node) key;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(node.getProcessor().equals(processor)){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boxed = node;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return (IMessageProcessor) boxed;&nbsp; <br />
&nbsp; }<br />
作用是得到如果已经封装过了。<br />
得到processMap的key集合，然后迭代，如果key是Node（第一次出场）的实例，就继续下一次迭代，否则</font></p>
<p><font style="background-color: #cfe0e2">将key（强制）转化为Node。如果node.getProcessor()==processor,那就把node赋值给boxed。中断迭代</font></p>
<p><font style="background-color: #cfe0e2">。返回的是一个IMessageProcessor。<br />
3， public Object clone() throws CloneNotSupportedException {<br />
&nbsp;&nbsp;&nbsp; RoutingMap obj = (RoutingMap) super.clone();<br />
&nbsp;&nbsp;&nbsp; obj.processors = Collections.unmodifiableSet(processors);<br />
&nbsp;&nbsp;&nbsp; obj.processMap = Collections.unmodifiableMap(processMap);<br />
&nbsp;&nbsp;&nbsp; obj.discardMap = Collections.unmodifiableMap(discardMap);<br />
&nbsp;&nbsp;&nbsp; obj.exceptionMap = Collections.unmodifiableMap(exceptionMap);<br />
&nbsp;&nbsp;&nbsp; return obj;<br />
&nbsp; }<br />
这个先不详细描述了</font></p>
<p><font style="background-color: #cfe0e2">我们可以试着把重点放在第一个方法上，选中第一个方法，CTRL+ALT+H<br />
发现出现了一个新的view，call hierarchy.<br />
一共有4个调用。<br />
先看第一个方法 在新类TopologyAnalyser中<br />
&nbsp; private void buildTopology(IRoutingMap map) {<br />
&nbsp;&nbsp;&nbsp; topology=new HashMap();<br />
&nbsp;&nbsp;&nbsp; Collection processors=map.getMessageProcessors();</font></p>
<p><font style="background-color: #cfe0e2">&nbsp;&nbsp;&nbsp; Iterator it=processors.iterator();<br />
&nbsp;&nbsp;&nbsp; //Get the direct connections<br />
&nbsp;&nbsp;&nbsp; while (it.hasNext()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMessageProcessor processor=(IMessageProcessor)it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; link(processor,map.getProcessDestinations(processor));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; link(processor,map.getDiscardDestinations(processor));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; //Now get the indirect ones<br />
&nbsp;&nbsp;&nbsp; it=processors.iterator();<br />
&nbsp; }<br />
调用了ＲｏｕｔｉｎｇＭａｐ里面的&nbsp; <br />
　public Collection getMessageProcessors() {<br />
&nbsp;&nbsp;&nbsp; return Collections.unmodifiableCollection(processors);<br />
&nbsp; }<br />
这里面的<br />
Collections.unmodifiableCollection返回指定 collection 的不可修改视图,此方法允许模块为用户提</font></p>
<p><font style="background-color: #cfe0e2">供对内部 collection 的&#8220;只读&#8221;访问。在返回的 collection 上执行的查询操作将&#8220;读完&#8221;指定的 </font></p>
<p><font style="background-color: #cfe0e2">collection。试图修改返回的 collection（不管是直接修改还是通过其迭代器进行修改）将导致抛出 </font></p>
<p><font style="background-color: #cfe0e2">UnsupportedOperationException</font></p>
<p><font style="background-color: #cfe0e2">processors值是xml传来的所有的IMessageProcessor。<br />
迭代出所有的IMessageProcessor，<br />
根据提供的IMessageProcessor key得到value List&lt;IMessageProcessor&gt;。</font></p>
<p><font style="background-color: #cfe0e2">link(processor,map.getProcessDestinations(processor));将源处理器和目标处理器连接起来。<br />
查找link（）的源<br />
private void link(IMessageProcessor src,List destinations) {<br />
&nbsp;&nbsp;&nbsp; TopologyInfo srcTi=getTopologyInfo(src);<br />
&nbsp;&nbsp;&nbsp; srcTi.addOutputs(destinations);<br />
&nbsp;&nbsp;&nbsp; Iterator it=destinations.iterator();<br />
&nbsp;&nbsp;&nbsp; while(it.hasNext()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMessageProcessor destination=(IMessageProcessor)it.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TopologyInfo dstTi=getTopologyInfo(destination);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dstTi.addInput(src);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</font></p>
<p><font style="background-color: #cfe0e2">TopololyInfo 是类TopologyAnalyser中一个内部类，作用就是得到输入和输出，并将输入和输出</font></p>
<p><font style="background-color: #cfe0e2">的IMessageProcessor放入list中。<br />
&nbsp;class TopologyInfo {<br />
&nbsp;&nbsp;&nbsp; private List inputs=new ArrayList();<br />
&nbsp;&nbsp;&nbsp; private List outputs=new ArrayList();<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; public List getInputs() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return inputs;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public List getOutputs(){return outputs;}<br />
&nbsp;&nbsp;&nbsp; public void addInput(IMessageProcessor input) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inputs.add(input);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; public void addOutput(IMessageProcessor output) {outputs.add(output);}<br />
&nbsp;&nbsp;&nbsp; //public void addInputs(Collection inputs) {this.inputs.addAll(inputs);}<br />
&nbsp;&nbsp;&nbsp; public void addOutputs(Collection outputs) {this.outputs.addAll(outputs);}&nbsp;<br />
&nbsp; }<br />
我们再回头看link（）的源,将目的处理器给了srcTi的outputs List.源处理器给了inputs List。<br />
在这里源和目的终于连接上了。</font></p>
<p><font style="background-color: #cfe0e2">那么这个类TopologyAnalyser，在link（）中要初始化，<br />
首先调用<br />
&nbsp; private TopologyInfo getTopologyInfo(IMessageProcessor processor) {<br />
&nbsp;&nbsp;&nbsp; TopologyInfo topologyInfo;<br />
&nbsp;&nbsp;&nbsp; if (!topology.containsKey(processor)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; topologyInfo=new TopologyInfo();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; topology.put(processor, topologyInfo);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; topologyInfo=(TopologyInfo)topology.get(processor);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return topologyInfo;<br />
&nbsp; }<br />
如果在Map topology中包含源IMessageProcessor，则将topology中的目标IMessageProcessor放</font></p>
<p><font style="background-color: #cfe0e2">入topologyInfo中，如果不包含IMessageProcessor，则创建一个新的TopologyInfo实例，然后将空</font></p>
<p><font style="background-color: #cfe0e2">的topologyInfo和源ImessageProcessor一起放入topology Map。返回topologyInfo.<br />
</font></p>
  <img src ="http://www.blogjava.net/LightUpHeaven/aggbug/336927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LightUpHeaven/" target="_blank">Vigoss</a> 2010-11-03 13:54 <a href="http://www.blogjava.net/LightUpHeaven/archive/2010/11/03/336927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无尽的传输欲望 OpenAdaptor大型专题 菜鸟版第三弹</title><link>http://www.blogjava.net/LightUpHeaven/archive/2010/11/02/336831.html</link><dc:creator>Vigoss</dc:creator><author>Vigoss</author><pubDate>Tue, 02 Nov 2010 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/LightUpHeaven/archive/2010/11/02/336831.html</guid><wfw:comment>http://www.blogjava.net/LightUpHeaven/comments/336831.html</wfw:comment><comments>http://www.blogjava.net/LightUpHeaven/archive/2010/11/02/336831.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LightUpHeaven/comments/commentRss/336831.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LightUpHeaven/services/trackbacks/336831.html</trackback:ping><description><![CDATA[<p><font style="background-color: #cfe0e2"><img border="0" src="http://www.blogjava.net/Emoticons/QQ/12.gif" width="20" height="20"  alt="" />好了，老子不废话了，真金不怕卖钱。<br />
Router bean下有property 名叫processors，所以应该也有个set方法，不然没有办法设置值。我们找到<br />
org.openadaptor.core.router.Router类。<br />
不负众望<br />
&nbsp; public void setProcessors(List processorList){<br />
&nbsp;&nbsp;&nbsp; // create process map from list of processors<br />
&nbsp;&nbsp;&nbsp; if ((processorList==null) || (processorList.isEmpty())) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new RuntimeException("Null or empty processorList is not permitted");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; Object[] processors=processorList.toArray(new Object[processorList.size()]);<br />
&nbsp;&nbsp;&nbsp; Map processMap = new HashMap();<br />
&nbsp;&nbsp;&nbsp; for (int i=1;i&lt;processors.length;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processMap.put(processors[i-1],processors[i]);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; setProcessMap(processMap);<br />
&nbsp; }<br />
果然有，大家通过简单阅读代码可以看到这就是个将List设置到Map的过程，那么Map有什么用呢？大家再</font></p>
<p><font style="background-color: #cfe0e2">仔细看看，不要着急，对了，看到了吧，那个for（；；），它是将一个处理器接着一个处理器塞</font></p>
<p><font style="background-color: #cfe0e2">到HashMap里面，前面的是顺序用个鲜明的矩阵图来形容吧<br />
&nbsp;&nbsp;1&nbsp;&nbsp;2<br />
&nbsp;&nbsp;2&nbsp;&nbsp;3<br />
&nbsp;&nbsp;3&nbsp;&nbsp;4<br />
&nbsp;&nbsp;4&nbsp;&nbsp;5<br />
发现什么规律？右边的减左边的等于1，- -，你真不是盖的。<br />
大家想想HashMap的结构是什么样的？&lt;key,value&gt;！<br />
对！<br />
当它循着这个Map的key找的时候会找到value，然后又以这个value为key接着找下一个value，循环直到这</font></p>
<p><font style="background-color: #cfe0e2">个Map的最后一个值。这样就会把每个processor都执行一遍。<br />
那么有人会问- -！为什么说会这样执行，你怎么知道啊？<br />
好的，来看<br />
setProcessors()里最后一行是什么？<br />
setProcessMap()<br />
好，继续找它,对,还在Router里<br />
&nbsp; public void setProcessMap(Map map) {<br />
&nbsp;&nbsp;&nbsp; if (processMapConfigured) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new RuntimeException("Only one of processMap and processors properties may be </font></p>
<p><font style="background-color: #cfe0e2">configured");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; processMapConfigured=true;<br />
&nbsp;&nbsp;&nbsp; routingMap.setProcessMap(map);<br />
&nbsp; }<br />
对，继续<br />
这里设置了processMapConfigured=true;这是为什么呢？LZ下次为你揭开这个神秘的擦脚布。<br />
先把注意力放在routingMap里，它的本类是RoutingMap<br />
好，找到<br />
&nbsp; RoutingMap，找到setProcessMap()<br />
&nbsp; public void setProcessMap(Map map) {<br />
&nbsp;&nbsp;&nbsp; processMap.clear();<br />
&nbsp;&nbsp;&nbsp; populateMap(map, processMap);<br />
&nbsp; }<br />
注意populateMap(map,processMap)在执行前，processMap是空的<br />
在这里我们发现了processMap的定义，Sets the processMap which defines how to route output from </font></p>
<p><font style="background-color: #cfe0e2">one adaptor component to anothers. <br />
是一个定义怎样将一个适配器组件的输出转发到另外一个的集合<br />
首先它把processMap清空了，然后populateMap(map,processMap)<br />
哇擦，天长地久有时尽 程序绵绵无绝期<br />
找到populateMap(map,processMap)</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; private void populateMap(Map map, Map checkedMap) {<br />
&nbsp;&nbsp;&nbsp; map = autoboxer.autobox(map);<br />
&nbsp;&nbsp;&nbsp; for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map.Entry entry = (Map.Entry) iter.next();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; verifyEntryKeyIsIMessageProcessor(entry);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IMessageProcessor fromProcessor = (IMessageProcessor) entry.getKey();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List processorList = autoboxIMessageProcessorList(entry.getValue());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processors.add(fromProcessor);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processors.addAll(processorList);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; checkedMap.put(fromProcessor, processorList);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
大家仔细阅读代码发现这就是个将map中的数据先verifyEntryKeyIsIMessageProcessor(entry);<br />
确定map的key是否是MessageProcessor，不是就报错退出了，是就将他强制转换为IMessageProcessor，</font></p>
<p><font style="background-color: #cfe0e2">然后自动封装，这里真j8操淡，TMD前面设置到Map里面的时候就可以了，现在还要设置到set中，还来个</font></p>
<p><font style="background-color: #cfe0e2">什么自动封箱，封你妈啊，不过他们也有道理，如果list里面嵌套了另外一个list就把第二</font></p>
<p><font style="background-color: #cfe0e2">个list的MessageProcessor给漏掉了。现在checkMap里面已经有了所有的MessageProcessor，LZ就要看看</font></p>
<p><font style="background-color: #cfe0e2">他们要干什吗？<br />
</font></p>
  <img src ="http://www.blogjava.net/LightUpHeaven/aggbug/336831.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LightUpHeaven/" target="_blank">Vigoss</a> 2010-11-02 17:39 <a href="http://www.blogjava.net/LightUpHeaven/archive/2010/11/02/336831.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无尽的传输欲望  OpenAdaptor大型专题 菜鸟版第二弹 </title><link>http://www.blogjava.net/LightUpHeaven/archive/2010/11/01/Vigoss.html</link><dc:creator>Vigoss</dc:creator><author>Vigoss</author><pubDate>Mon, 01 Nov 2010 10:00:00 GMT</pubDate><guid>http://www.blogjava.net/LightUpHeaven/archive/2010/11/01/Vigoss.html</guid><wfw:comment>http://www.blogjava.net/LightUpHeaven/comments/336716.html</wfw:comment><comments>http://www.blogjava.net/LightUpHeaven/archive/2010/11/01/Vigoss.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LightUpHeaven/comments/commentRss/336716.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LightUpHeaven/services/trackbacks/336716.html</trackback:ping><description><![CDATA[<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"></span><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">OpenAdaptor是为达到快速构建数据集成功能的适配器框架，用Java实现，抽象数据迁移的过程，用3类组</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">件完成数据迁移，通过对组件的连接和配置达到快速构建、高度复用的目的，快速地满足企业数据集成的</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">要求，具有标准化、快速开发、灵活、易于定制，高度复用特点。<br />
OpenAdaptor原理<br />
&nbsp; 在2个不同的业务数据库之间进行数据迁移的时候，经历三个过程：数据抽象，数据转换，数据加</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">载。OpenAdaptor框架将3个阶段抽象为3类不同的组件：sources，pipes，sinks，通过这3类内置的组件</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">分别完成各阶段工作。<br />
在数据抽取阶段，对应sources组件，完成与源端的协议连接，读取数据并将数据转化为DataObject数组</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">，根据需要对数据加密/压缩；<br />
数据转化阶段，对应pipes组件，完成数据过滤、数据转化、异常处理等作业；<br />
数据加载对应sinks组件，完成建立与目的端的协议连接，将数据转化为目的端的数据格式，数据解压/解</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">密，将数据写入目的端。</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">source类型有3种：<br />
callback类型是指数据到来时间触发source读取数据；<br />
listen类型表示source监听数据，例如source从socket读数据。<br />
poll类型表示每隔一段时间久读取数据。</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">在run()方法中不同类型的source分别调用runCallback（）、runListen（）、runPoll。</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">sourceProcess（）方法对读取到的DataObject[]进行处理，并调用processMessage（），该方法会循环</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">调用管道线里下游组件的processMessage（）。</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">AbstractWriter将DataObject[]转化为字符串的一个Writer类，如果sink制定了一个DoStringWriter，则</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">用改writer的实例根据DataObject[]产生字符串，否则产生默认的XML格式字符串。</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">OpenAdaptor采用的是Spring的技术，所以建议你在学习OpenAdaptor前，先学习Spring，至少要了</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">解Spring的AOP和IOC，知道Spring的工作原理，你就明白了一半OpenAdaptor的调用过程。<br />
受限我们先看一个OpeanAdaptor的一个XML文件，为什么它要使用XML文件，而不是txt或者doc呢？这是因</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">为，XML文件是用来存储数据的，重在数据本身。而且她使用标签来存储数据，每个标签必须同时有结束</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">可开始标签。并且标签必须按照合适的顺序进行嵌套，这就使得它可以用来表示一些有层次的数据类型，</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">例如java中的类。还有一个重要原因是，Spring的特性（Service层，DAO层独立出现，在编码时既没有实</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">例化对象，也没有设置依赖关系，而把它交给Spring，由Spring在运行阶段实例化、组装对象）决定它必</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">须要使用到XML文件，在XML文件中配置各个组件。</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">首先，我们看一下OpenAdaptor的XML文件中的内容：<br />
先看&lt;beans&gt;，yes，你很聪明，那是一个标准的Spring XML文件开头，好了这下你更确信了，所</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">谓OpenAdaptor不过是建立在Spring基础上的一个有特定功能的Java功能组件包。</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">好了，我们接着看，大家发现了么？LZ是个天才。</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">下面第一个组件式Adaptor 注意有很多Adaptor，这个是org.openadaptor.core.adaptor.Adaptor,那么我</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">们可以发现（当然LZ是在看了很多个XML文件后发现的），每个XML文件都有这个Adaptor，那么这</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">个Adaptor究竟是个神马东东？<br />
&nbsp; &lt;bean id="Adaptor" class="org.openadaptor.core.adaptor.Adaptor"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="messageProcessor" ref="Router" /&gt; <br />
&nbsp; &lt;/bean&gt;</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">&nbsp; 1。LZ发现这个Adaptor里面有个property属性，那么我们就想吧，什么里面有属性这一说，大家不知道 </span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">&nbsp;&nbsp;&nbsp; 学习Java有多深入，但是我可以告诉大家，属性绝对是个抽象的东西，因为具体的不叫属性，叫 值&nbsp; </span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">&nbsp;&nbsp;&nbsp; 。(⊙o⊙)哦！到这里你发现原来是这啊，那不就是个类吗？类里面有属性，当类生成具体对象 的&nbsp;&nbsp; </span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">&nbsp; 时候，可以给属性赋值，对头，LZ说。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 那么既然是属性，肯定有设置它的方法啊？楼主决定给这么问的童鞋奖励一个臭豆腐，属性如果不&nbsp; </span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">&nbsp;&nbsp; 能设置，就好比你只是说我有臭豆腐，可是没法吃。LZ郁闷。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 好，我们就打开这个类，看看谁掉泪。注意这个臭豆腐名叫messageProcessor。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 当当当当<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void setMessageProcessor(final IMessageProcessor processor) {<br />
&nbsp;&nbsp;&nbsp; if (this.processor != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new RuntimeException("message processor has already been set");<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; this.processor = processor;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /* if the processor has metrics treat them as 'global' Adaptor ones */<br />
&nbsp;&nbsp;&nbsp; if(processor instanceof IRecordableComponent){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.metrics = ((IRecordableComponent) processor).getMetrics();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String enabled =&nbsp; metrics.isMetricsEnabled() ? "on" : "off";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log.info("Metrics are " + enabled);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; 瓦擦<br />
&nbsp;这不是我编的。真的有这个嘞。好，如果你翻开看这个setMessageProcessor，行了，别吐。所&nbsp; </span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">&nbsp;&nbsp; 以我们不看丫的。那么我们知道就行了，它初始化的第一&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">个Bean是org.openadaptor.core.adaptor.Adaptor,它的一个属性是messageProcessor，它&#8230;&#8230;等等&nbsp;&nbsp;&nbsp; </span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">，有值，是的有值。值是多少？Router！Router？好的，Router是什么？我靠，Ruter是另外一&nbsp;&nbsp; 个Bean</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">，傻狗答道。<br />
2。Router<br />
介于傻狗同学的成就，我们今天请他作为特邀嘉宾，你好，傻狗！你好，楼猪！- -，啊，那个你向大家</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">介绍一下自己吧！(⊙_⊙)，大家好，我是Router。大家 ⊙﹏⊙b汗</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">- &lt;bean id="Router" class="org.openadaptor.core.router.Router"&gt;<br />
- &lt;property name="processors"&gt;<br />
- &lt;list&gt;<br />
&nbsp; &lt;ref bean="Servlet" /&gt; <br />
&nbsp; &lt;ref bean="TickerFilter" /&gt; <br />
&nbsp; &lt;ref bean="XMLConverter" /&gt; <br />
&nbsp; &lt;ref bean="Validator" /&gt; <br />
&nbsp; &lt;ref bean="Writer" /&gt; <br />
&nbsp; &lt;/list&gt;<br />
&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;property name="exceptionProcessor" ref="ExceptionHandler" /&gt; <br />
&nbsp; &lt;/bean&gt;</span></span></span></span></span></span></p>
<p align="justify"><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">哇，大家一阵狂吐！</span></span></span></span></span></span></p>
<p align="justify"><font style="background-color: #cfe0e2"></font><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">&nbsp;待续</span></span></span></span></span></span></p>
<p align="justify"><font style="background-color: #cfe0e2"></font><span style="font-family: 宋体"><span style="font-size: 12pt"><span style="background-color: #99ccff"><span style="background-color: #ccffff"><span style="background-color: #ccffcc"><span style="background-color: #ffff99">&nbsp;</span></span></span></span></span></span></p>
<img src ="http://www.blogjava.net/LightUpHeaven/aggbug/336716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LightUpHeaven/" target="_blank">Vigoss</a> 2010-11-01 18:00 <a href="http://www.blogjava.net/LightUpHeaven/archive/2010/11/01/Vigoss.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无尽的传输欲望 OpenAdaptor大型专题 菜鸟版第一弹</title><link>http://www.blogjava.net/LightUpHeaven/archive/2010/10/13/334990.html</link><dc:creator>Vigoss</dc:creator><author>Vigoss</author><pubDate>Wed, 13 Oct 2010 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/LightUpHeaven/archive/2010/10/13/334990.html</guid><wfw:comment>http://www.blogjava.net/LightUpHeaven/comments/334990.html</wfw:comment><comments>http://www.blogjava.net/LightUpHeaven/archive/2010/10/13/334990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/LightUpHeaven/comments/commentRss/334990.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/LightUpHeaven/services/trackbacks/334990.html</trackback:ping><description><![CDATA[<font style="background-color: #cfe0e2">OpenAdaptor是一个基于Java/XML的<span style="color: red">软件平台</span>，允许用少量的或非常规的编程进行快速地商业系统集成。它具有高扩展性并已经为JMS,LDAP,Mail,MQSeries,Oracle,Sybase,MSSQL Server和作为数据交换格式的XML构建接口组件。OpenAdaptor为开发人员提供了大量接口组件，通过Source、Pipe、Sink组件链的形式实现系统和系统间的连接，从而完成数据的交换。</font><br />
<br />
<br />
<font style="background-color: #cfe0e2">OpenAdaptor是Dresdner Kleinwort Wasserstein 开发的一款open source的产品，主要面向不同系统中的数据传递。 它可以很富方便地将一个系统中的数据输出（Source），经过一定的转化（Pipe），输出到其他系统（Sink）。<br />
<br />
<br />
Source 数据获取对象，是一个接口，可以根据数据获取来源不同，实现很多子类，比如：FileSource、JMSSource等。它本身并没有定义任何方法，但是扩展了线程，所以它的核心方法应该就是线程的run方法。
<p>Pipe&nbsp;&nbsp; 对source获取的数据进行处理，比如过滤、重新组织等，比如：FilterPipe。最上层是一个抽象类，核心方法是processMessage()</p>
<p>Sink&nbsp; 数据发布，将整合后的数据，根据配置文件，发布出去，比如：FileSink、JMSSink等。定义了一个接口，核心方法是processMessage()</p>
<p>Controller 整个消息传递的控制类，是一个线程，负责对上面所说的三个对象的调用，完成一次消息的传递，每一次消息的传递都会新建一个线程实例。定义了一个接口。</p>
<p>DataObject 传递消息数据的对象，定义了一个接口。</p>
<p>Message 对DataObject对象集合的封装，用来传递消息。</p>
</font>
<p><br />
LDAP是轻量目录访问<span style="color: red">协议</span>，英文全称是Lightweight Directory Access Protocol，一般都简称为LDAP。它是基于X.500标准的，但是简单多了并且可以根据需要定制。与X.500不同，LDAP支持TCP/IP，这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义，所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。<br />
详细简单说来，LDAP是一个得到关于人或者资源的集中、静态数据的快速方式、LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用，不过根据组织者的需要，它可以做得更加强大。详细信息参照<font style="background-color: #cfe0e2"><a href="http://baike.baidu.com/view/159263.htm"><font style="background-color: #cfe0e2">http://baike.baidu.com/view/159263.htm</font></a><br />
下面是几个例子<br />
<br />
<br />
eg1:csv to&nbsp; database <br />
<br />
<br />
</p>
<p><font style="background-color: #cfe0e2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!-- <br />
&nbsp; $Id: step07.xml 1285 2008-03-05 14:31:22Z higginse $<br />
&nbsp; $HeadURL: https://openadaptor3.openadaptor.org/svn/openadaptor3/tags/3.4.5/example/tutorial/step07.xml $<br />
&nbsp;--&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;description&gt;<br />
&nbsp; Adaptor for csv to database.<br />
&nbsp; &lt;/description&gt;<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;bean id="Adaptor" class="org.openadaptor.core.adaptor.Adaptor"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="messageProcessor" ref="Router"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;bean id="Router" class="org.openadaptor.core.router.Router"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="processMap"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;map&gt;<br />
&nbsp;&nbsp;&lt;entry key-ref="ReaderA" value-ref="MapConverter"/&gt;<br />
&nbsp;&nbsp;&lt;entry key-ref="MapConverter" value-ref="Writer"/&gt;<br />
&nbsp;&nbsp; &lt;/map&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&lt;bean id="ReaderA" class="org.openadaptor.auxil.connector.iostream.reader.FileReadConnector"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="filename" value="input/inputA.csv" /&gt;&nbsp; <br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp; &lt;bean id="MapConverter" class="org.openadaptor.auxil.convertor.delimited.DelimitedStringToOrderedMapConvertor"&gt;&nbsp;&nbsp;&nbsp; &nbsp;&lt;description&gt;将读取csv文件的数据转换成map类型;以下对应的行属性值，是和数据库中表trade1中相对应的。&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以下三个属性name，number，text分别和数据库中的字段一致，且和下面的outputColumns的数值一致，反之，报错！&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/description&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;property name="fieldNames"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;SIDE&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;STOCK&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;PRICE&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/list&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;/property&gt;&nbsp; <br />
&nbsp;&lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&lt;bean id="JdbcConnection" class="org.openadaptor.auxil.connector.jdbc.JDBCConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="oracle.jdbc.driver.OracleDriver"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="url" value="jdbc:oracle:thin:@192.168.1.121:1521:orcl"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="username" value="ti1_user"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="password" value="ti1_user"/&gt;<br />
&nbsp; &lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp;&lt;bean id="Writer"&nbsp; class="org.openadaptor.auxil.connector.jdbc.writer.JDBCWriteConnector"&gt; <br />
&nbsp;&lt;property name="jdbcConnection" ref="JdbcConnection" /&gt;&nbsp; <br />
&nbsp;&lt;property name="writer"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;bean&nbsp;&nbsp;&nbsp; class="org.openadaptor.auxil.connector.jdbc.writer.map.MapTableWriter"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="tableName" value="TRADE" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="outputColumns"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;description&gt;以下对应的行属性值，是和数据库中表trade1中相对应的。以下三个属性name，number，text分别和数据库中的字段一致，且和上面的map的key值一致，反之，报错！<br />
&nbsp;&nbsp;&lt;/description&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;SIDE&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;STOCK&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;PRICE&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;/list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;&nbsp; <br />
&nbsp;&lt;/property&gt; <br />
&nbsp;&lt;/bean&gt;<br />
&lt;/beans&gt;<br />
&nbsp;</font><font style="background-color: #cfe0e2"><br />
</font></p>
<p>eg2:database to database<br />
<br />
<br />
</p>
<p><font style="background-color: #cfe0e2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!-- <br />
&nbsp; $Id: step09.xml 1508 2008-06-02 14:06:48Z cawthorng $<br />
&nbsp; $HeadURL: https://openadaptor3.openadaptor.org/svn/openadaptor3/tags/3.4.5/example/tutorial/step09.xml $<br />
&nbsp;--&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Adaptor for database1 to database2<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/description&gt;<br />
&nbsp; <br />
&nbsp;&lt;bean id="Adaptor" class="org.openadaptor.core.adaptor.Adaptor"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="messageProcessor" ref="Router"/&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp;&nbsp; &lt;bean id="Router" class="org.openadaptor.core.router.Router"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="processors"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="readerConnector"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="writerConnector"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;bean id="sourceJdbcConnection" class="org.openadaptor.auxil.connector.jdbc.JDBCConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="oracle.jdbc.driver.OracleDriver"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="url" value="jdbc:oracle:thin:@192.168.1.121:1521:orcl"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="username" value="ti1_user"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="password" value="ti1_user"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="targetJdbcConnection" class="org.openadaptor.auxil.connector.jdbc.JDBCConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="oracle.jdbc.driver.OracleDriver"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="url" value="jdbc:oracle:thin:@192.168.1.121:1521:orcl"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="username" value="ti1_user"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="password" value="ti1_user"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="readerConnector" class="org.openadaptor.auxil.connector.jdbc.reader.JDBCReadConnector"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;Reader which polls database using configured SQL.&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jdbcConnection" ref="sourceJdbcConnection"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="sql"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT side as BUYSELL,stock as TICKER,price as PRICE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM TRADE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp;&nbsp;&nbsp; &lt;bean id="writerConnector" class="org.openadaptor.auxil.connector.jdbc.writer.JDBCWriteConnector"&gt;<br />
&nbsp;&nbsp; &lt;property name="jdbcConnection" ref="targetJdbcConnection" /&gt;<br />
&nbsp;&nbsp; &lt;property name="writer"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean class="org.openadaptor.auxil.connector.jdbc.writer.map.MapTableWriter"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="tableName" value="TRADE2" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp;&nbsp; &lt;bean id="writer" class="org.openadaptor.auxil.connector.jdbc.writer.map.MapTableWriter"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="tableName" value="trade2"/&gt;&nbsp; &lt;!--&nbsp;&nbsp; --&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="outputColumns"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;side&lt;/value&gt;&lt;!--ݿֶ&nbsp;&nbsp; --&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;price&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;stock&lt;/value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/list&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/bean&gt;&nbsp; </font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;bean id="ExceptionHandler" class="org.openadaptor.auxil.connector.iostream.writer.FileWriteConnector"&gt;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&lt;property name="filename" value="output/print.txt"/&gt;&nbsp;&nbsp; <br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; &lt;/beans&gt;</font></p>
<p><font style="background-color: #cfe0e2"></font>&nbsp;</p>
<p>eg3:xml to csv<br />
<br />
<br />
</p>
<p><font style="background-color: #cfe0e2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!-- <br />
&nbsp; $Id: step07.xml 1285 2008-03-05 14:31:22Z higginse $<br />
&nbsp; $HeadURL: https://openadaptor3.openadaptor.org/svn/openadaptor3/tags/3.4.5/example/tutorial/step07.xml $<br />
&nbsp;--&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;<br />
&nbsp;<br />
&nbsp; &lt;description&gt;<br />
&nbsp; Adaptor for xml to csv<br />
&nbsp; &lt;/description&gt;<br />
&nbsp; <br />
&nbsp;&nbsp; &lt;bean id="Adaptor" class="org.openadaptor.core.adaptor.Adaptor"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="messageProcessor" ref="Router"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;/property&gt;&nbsp; <br />
&nbsp; &lt;/bean&gt; <br />
&nbsp; <br />
&nbsp; &lt;bean id="Router" class="org.openadaptor.core.router.Router"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;property name="processors"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="Reader"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="XmlToMap"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="FormatterScript"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="maptostring"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="Writer"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;/bean&gt;&nbsp;&nbsp;&nbsp; </font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;bean id="Reader" class="org.openadaptor.auxil.connector.iostream.reader.FileReadConnector"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="filename" value="input/trades.xml"/&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;property name="dataReader"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;bean class="org.openadaptor.auxil.connector.iostream.reader.string.StringReader"/&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;/property&gt;&nbsp; <br />
&nbsp; &lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&lt;bean id="XmlToMap" class="org.openadaptor.auxil.convertor.xml.XmlToOrderedMapConvertor"/&gt;<br />
&lt;bean id="maptostring" class="org.openadaptor.auxil.convertor.delimited.OrderedMapToDelimitedStringConvertor"/&gt;&nbsp; <br />
&lt;bean id="FormatterScript" class="org.openadaptor.auxil.processor.script.ScriptProcessor"&gt;<br />
&nbsp;&nbsp;&lt;description&gt;Convert Dom4j Document inton org.w3c.dom.Document&lt;/description&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="script"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;var trade=oa_data.get('Trade');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oa_data.put('SIDE',trade.get('buySell'));&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;&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; oa_data.put('STOCK',trade.get('ticker'));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oa_data.put('PRICE',trade.get('price'));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oa_data.remove('Trade'); //No longer needed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/value&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;/property&gt;&nbsp; <br />
&lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;bean id="Writer" class="org.openadaptor.auxil.connector.iostream.writer.FileWriteConnector"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="filename" value="output/dengjianli.csv"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; &lt;/bean&gt;<br />
&lt;/beans&gt;</font></p>
<p><br />
eg4:xml to database<br />
<br />
<br />
</p>
<p><font style="background-color: #cfe0e2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!-- <br />
&nbsp; $Id: step07.xml 1285 2008-03-05 14:31:22Z higginse $<br />
&nbsp; $HeadURL: https://openadaptor3.openadaptor.org/svn/openadaptor3/tags/3.4.5/example/tutorial/step07.xml $<br />
&nbsp;--&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;<br />
&nbsp;<br />
&nbsp; &lt;description&gt;<br />
&nbsp; Adaptor for xml to database<br />
&nbsp; &lt;/description&gt;<br />
&nbsp; <br />
&nbsp;&nbsp; &lt;bean id="Adaptor" class="org.openadaptor.core.adaptor.Adaptor"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="messageProcessor" ref="Router"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;/property&gt;&nbsp; <br />
&nbsp; &lt;/bean&gt; <br />
&nbsp; <br />
&nbsp; &lt;bean id="Router" class="org.openadaptor.core.router.Router"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="processors"&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;list&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="Reader" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="xmltomap" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="FormatterScript" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref bean="writer" /&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;/list&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;/property&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;<br />
&nbsp; &lt;bean id="Reader"&nbsp; class="org.openadaptor.auxil.connector.iostream.reader.FileReadConnector"&gt;&nbsp; <br />
&nbsp;&nbsp;&lt;description&gt;Read entire contents of input file&lt;/description&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;property name="filename" value="input/trades.xml" /&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;property name="dataReader"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;bean&nbsp;&nbsp;&nbsp; class="org.openadaptor.auxil.connector.iostream.reader.string.StringReader" /&gt;&nbsp; <br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&lt;bean id="xmltomap"&nbsp; class="org.openadaptor.auxil.convertor.xml.XmlToOrderedMapConvertor" /&gt;<br />
&lt;bean id="maptostring"&nbsp; class="org.openadaptor.auxil.convertor.delimited.OrderedMapToDelimitedStringConvertor" /&gt;</font></p>
<p><font style="background-color: #cfe0e2">&lt;bean id="FormatterScript"&nbsp; class="org.openadaptor.auxil.processor.script.ScriptProcessor"&gt;&nbsp; <br />
&nbsp;&lt;property name="script"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;value&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;var trade=oa_data.get('Trade');&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;oa_data.put('SIDE',trade.get('buySell'));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;oa_data.put('STOCK',trade.get('ticker'));&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;oa_data.put('PRICE',trade.get('price'));&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;oa_data.remove('Trade');&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;/value&gt;&nbsp; <br />
&nbsp;&lt;/property&gt;<br />
&lt;/bean&gt;</font></p>
<font style="background-color: #cfe0e2">
<p><br />
&nbsp; &lt;bean id="JdbcConnection" class="org.openadaptor.auxil.connector.jdbc.JDBCConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="oracle.jdbc.driver.OracleDriver"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="url" value="jdbc:oracle:thin:@192.168.1.121:1521:orcl"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="username" value="ti1_user"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="password" value="ti1_user"/&gt;<br />
&nbsp; &lt;/bean&gt;</p>
<p>&lt;bean id="writer" class="org.openadaptor.auxil.connector.jdbc.writer.JDBCWriteConnector"&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;property name="jdbcConnection" ref="JdbcConnection" /&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;property name="writer"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;bean class="org.openadaptor.auxil.connector.jdbc.writer.map.MapTableWriter"&gt;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="tableName" value="TRADE" /&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;/bean&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;/property&gt;&nbsp; <br />
&lt;/bean&gt;<br />
&lt;/beans&gt;<br />
</font><font style="background-color: #cfe0e2"><br />
</font><font style="background-color: #cfe0e2"><br />
</font></p>
<p>eg5:txt to database<br />
<br />
<br />
</p>
<p><font style="background-color: #cfe0e2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!-- <br />
&nbsp; $Id: step07.xml 1285 2008-03-05 14:31:22Z higginse $<br />
&nbsp; $HeadURL: https://openadaptor3.openadaptor.org/svn/openadaptor3/tags/3.4.5/example/tutorial/step07.xml $<br />
&nbsp;--&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;<br />
&nbsp;<br />
&nbsp; &lt;description&gt;<br />
&nbsp; Adaptor for xml to database<br />
&nbsp; &lt;/description&gt;<br />
&nbsp; <br />
&nbsp;&nbsp; &lt;bean id="Adaptor" class="org.openadaptor.core.adaptor.Adaptor"&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;property name="messageProcessor" ref="Router"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; &lt;/property&gt;&nbsp; <br />
&nbsp; &lt;/bean&gt; <br />
&nbsp; <br />
&lt;bean id="Router" class="org.openadaptor.core.router.Router"&gt;&nbsp; <br />
&nbsp;&lt;property name="processors"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;list&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;ref bean="FileReader" /&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;ref bean="writerConnector" /&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;/list&gt; <br />
&nbsp;&lt;/property&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;property name="exceptionProcessor" ref="ExceptionHandler" /&gt; <br />
&lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp;&lt;bean id="FileReader" class="org.openadaptor.core.node.ReadNode"&gt;&nbsp; <br />
&nbsp;&lt;property name="connector"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;ref bean="readerConnector" /&gt;&nbsp; <br />
&nbsp;&lt;/property&gt;&nbsp; <br />
&nbsp;&lt;property name="processor"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;ref bean="mapconverter" /&gt;&nbsp; <br />
&nbsp;&lt;/property&gt; <br />
&lt;/bean&gt; </font></p>
<p><font style="background-color: #cfe0e2">&lt;bean id="readerConnector"&nbsp; class="org.openadaptor.auxil.connector.iostream.reader.FileReadConnector"&gt; <br />
&nbsp;&lt;property name="filename" value="input/data.txt" /&gt;&nbsp; <br />
&nbsp;&lt;property name="dataReader"&gt;&nbsp; <br />
&nbsp;&nbsp;&lt;bean&nbsp;&nbsp;&nbsp; class="org.openadaptor.auxil.connector.iostream.reader.string.LineReader" /&gt;&nbsp; <br />
&nbsp;&lt;/property&gt; <br />
&lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&lt;bean id="mapconverter"&nbsp; class="org.openadaptor.auxil.convertor.delimited.DelimitedStringToOrderedMapConvertor"&gt;&nbsp; &nbsp;&nbsp;&nbsp;&lt;property name="delimiter" value="," /&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;property name="fieldNames"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;list&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;SIDE&lt;/value&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;STOCK&lt;/value&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;value&gt;PRICE&lt;/value&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;/list&gt;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&lt;/property&gt; <br />
&lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;bean id="targetJdbcConnection" class="org.openadaptor.auxil.connector.jdbc.JDBCConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="oracle.jdbc.driver.OracleDriver"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="url" value="jdbc:oracle:thin:@192.168.1.121:1521:orcl"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="username" value="ti1_user"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="password" value="ti1_user"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="writerConnector"&nbsp; class="org.openadaptor.auxil.connector.jdbc.writer.JDBCWriteConnector"&gt;&nbsp; <br />
&nbsp;&lt;property name="jdbcConnection" ref="targetJdbcConnection" /&gt;&nbsp; <br />
&nbsp;&lt;property name="writer"&gt;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;ref bean="writer" /&gt;&nbsp; <br />
&nbsp;&lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="writer"&nbsp; class="org.openadaptor.auxil.connector.jdbc.writer.map.MapTableWriter"&gt;&nbsp; <br />
&nbsp;&lt;property name="tableName" value="TRADE1" /&gt; <br />
&nbsp; &lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;bean id="ExceptionHandler"&nbsp; class="org.openadaptor.auxil.connector.iostream.writer.FileWriteConnector"&gt;&nbsp; <br />
&nbsp;&lt;property name="filename" value="output/puberror.txt" /&gt; <br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; &lt;/beans&gt;</font></p>
<p><br />
以上例子 都可以选择同一个用户 在同一个用户下创建3个结构相同的表 sql如下<br />
<br />
<br />
<font style="background-color: #cfe0e2">create table TRADE<br />
(<br />
&nbsp; SIDE&nbsp; VARCHAR2(50),<br />
&nbsp; STOCK VARCHAR2(50),<br />
&nbsp; PRICE NUMBER(20)<br />
)<br />
tablespace TI_DATA<br />
&nbsp; pctfree 10<br />
&nbsp; initrans 1<br />
&nbsp; maxtrans 255<br />
&nbsp; storage<br />
&nbsp; (<br />
&nbsp;&nbsp;&nbsp; initial 64K<br />
&nbsp;&nbsp;&nbsp; minextents 1<br />
&nbsp;&nbsp;&nbsp; maxextents unlimited<br />
&nbsp; );<br />
</font><font style="background-color: #cfe0e2"><br />
<br />
</font>在运行以上实例的时候请参照如下目录下的 说明<br />
<font style="background-color: #cfe0e2">D:\openadaptor-3.4.5-bin\openadaptor-3.4.5\example\tutorial\index.htm只需创建需要的xml文件并以 index.htm里面说的创建好环境后使用&nbsp; java org.openadaptor.spring.SpringAdaptor -config step01.xml&nbsp;在命令行模式下运行，注意以上都与队列无关，所以如果要使用队列的话，提供下面一个实例，<br />
<br />
<br />
队列牵涉到发送端和接收端，所以需要配置两个xml文件，开两个cmd窗口运行，值得注意的是要在setclasspath.bat中添加一些需要的jar包，并且在运行前，在命令行下运行 setclasspath.bat文件，我的是这样的</font></font></p>
<font style="background-color: #cfe0e2">@echo off<br />
set CLASSPATH=.<br />
set CLASSPATH=%CLASSPATH%;..\..\lib\openadaptor.jar<br />
set CLASSPATH=%CLASSPATH%;..\..\lib\openadaptor-spring.jar<br />
set CLASSPATH=%CLASSPATH%;..\..\lib\openadaptor-depends.jar<br />
set CLASSPATH=%CLASSPATH%;..\..\lib\3rdparty\hsqldb.jar<br />
set CLASSPATH=%CLASSPATH%;..\..\lib\3rdparty\jbossall-client.jar<br />
set CLASSPATH=%CLASSPATH%;..\..\lib\3rdparty\ojdbc14.jar<br />
set CLASSPATH=%CLASSPATH%;..\..\lib\3rdparty\sqljdbc.jar<br />
@echo on<br />
<br />
<br />
使用两个xml文件从 database to database<br />
，xml文件名自己取<br />
<br />
<p><font style="background-color: #cfe0e2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!-- <br />
&nbsp; $Id: step07.xml 1285 2008-03-05 14:31:22Z higginse $<br />
&nbsp; $HeadURL: https://openadaptor3.openadaptor.org/svn/openadaptor3/tags/3.4.5/example/tutorial/step07.xml $<br />
&nbsp;--&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;<br />
&nbsp;<br />
&nbsp; &lt;description&gt;<br />
&nbsp; Adaptor for step 7 of the tutorial.<br />
&nbsp; &lt;/description&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="Adaptor" class="org.openadaptor.core.adaptor.Adaptor"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="messageProcessor" ref="Router"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="Router" class="org.openadaptor.core.router.Router"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="processors"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="Reader"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="Writer"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp; <br />
&nbsp; &lt;bean id="JndiConnection" class="org.openadaptor.auxil.connector.jndi.JNDIConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="initialContextFactory" value="org.jnp.interfaces.NamingContextFactory"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="providerUrl" value="jnp://localhost:1099"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="JmsConnection" class="org.openadaptor.auxil.connector.jms.JMSConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="jndiConnection" ref="JndiConnection"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="connectionFactoryName" value="ConnectionFactory"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;bean id="JdbcConnection" class="org.openadaptor.auxil.connector.jdbc.JDBCConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="oracle.jdbc.driver.OracleDriver"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="url" value="jdbc:oracle:thin:@192.168.1.121:1521:orcl"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="username" value="ti1_user"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="password" value="ti1_user"/&gt;<br />
&nbsp; &lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;!--&lt;bean id="Reader" class="org.openadaptor.auxil.connector.jms.JMSReadConnector"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="destinationName" value="queue/testQueue"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="jmsConnection" ref="JmsConnection"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="transacted" value="true"/&gt;<br />
&nbsp; &lt;/bean&gt;--&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean id="Reader" class="org.openadaptor.auxil.connector.jdbc.reader.JDBCReadConnector"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;Reader which polls database using configured SQL.&lt;/description&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="jdbcConnection" ref="JdbcConnection"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- batch size of 0 or less means process all rows in one message batch. --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- batch size of one means process one row per message and so on --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="batchSize" value="0"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="resultSetConverter"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean class="org.openadaptor.auxil.connector.jdbc.reader.xml.ResultSetToXMLConverter"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="sql"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT side as BUYSELL,stock as TICKER,price as PRICE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM TRADE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&lt;bean id="Writer" class="org.openadaptor.auxil.connector.jms.JMSWriteConnector"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="destinationName" value="queue/testQueue"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="jmsConnection" ref="JmsConnection"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; &lt;!--&lt;bean id="Writer" class="org.openadaptor.auxil.connector.iostream.writer.FileWriteConnector"/&gt;--&gt;<br />
&nbsp; <br />
&lt;/beans&gt;<br />
</font></p>
另外一个xml文件<br />
<br />
<br />
<p><font style="background-color: #cfe0e2">&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;!-- <br />
&nbsp; $Id: step09.xml 1508 2008-06-02 14:06:48Z cawthorng $<br />
&nbsp; $HeadURL: https://openadaptor3.openadaptor.org/svn/openadaptor3/tags/3.4.5/example/tutorial/step09.xml $<br />
&nbsp;--&gt;<br />
&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"&gt;<br />
&nbsp;<br />
&nbsp; &lt;description&gt;<br />
&nbsp; Adaptor for step 9 of the tutorial.<br />
&nbsp; &lt;/description&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="Adaptor" class="org.openadaptor.core.adaptor.Adaptor"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="messageProcessor" ref="Router"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="Router" class="org.openadaptor.core.router.Router"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="processors"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="Reader"/&gt;<br />
&nbsp;&nbsp;&lt;ref bean="XmlToMap"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="FormatterScript"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ref bean="Writer"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp; <br />
&nbsp; &lt;bean id="JndiConnection" class="org.openadaptor.auxil.connector.jndi.JNDIConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="initialContextFactory" value="org.jnp.interfaces.NamingContextFactory"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="providerUrl" value="jnp://localhost:1099"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="JmsConnection" class="org.openadaptor.auxil.connector.jms.JMSConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="jndiConnection" ref="JndiConnection"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="connectionFactoryName" value="ConnectionFactory"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="Reader" class="org.openadaptor.auxil.connector.jms.JMSReadConnector"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="destinationName" value="queue/testQueue"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="jmsConnection" ref="JmsConnection"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="transacted" value="true"/&gt;<br />
&nbsp; &lt;/bean&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="XmlToMap" class="org.openadaptor.auxil.convertor.xml.XmlToOrderedMapConvertor"/&gt;<br />
&nbsp; <br />
&nbsp; &lt;bean id="FormatterScript" class="org.openadaptor.auxil.processor.script.ScriptProcessor"&gt;<br />
&nbsp;&nbsp; &lt;property name="script"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;![CDATA[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var trade=oa_data.get('row');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oa_data.put('SIDE',trade.get('BUYSELL'));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oa_data.put('STOCK',trade.get('TICKER'));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oa_data.put('PRICE',trade.get('PRICE'));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oa_data.remove('row'); //No longer needed<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]]&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/value&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;bean id="JdbcConnection" class="org.openadaptor.auxil.connector.jdbc.JDBCConnection"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="driver" value="oracle.jdbc.driver.OracleDriver"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="url" value="jdbc:oracle:thin:@192.168.1.121:1521:orcl"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="username" value="ti2_user"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;property name="password" value="ti2_user"/&gt;<br />
&nbsp; &lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&nbsp; &lt;bean id="Writer" class="org.openadaptor.auxil.connector.jdbc.writer.JDBCWriteConnector"&gt;<br />
&nbsp;&nbsp; &lt;property name="jdbcConnection" ref="JdbcConnection" /&gt;<br />
&nbsp;&nbsp; &lt;property name="writer"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;bean class="org.openadaptor.auxil.connector.jdbc.writer.map.MapTableWriter"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="tableName" value="TRADE" /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp; &lt;/property&gt;<br />
&nbsp; &lt;/bean&gt;</font></p>
<p><font style="background-color: #cfe0e2">&lt;/beans&gt;<br />
</font></p>
<p>有问题欢迎讨论<font style="background-color: #cfe0e2"><br />
</font><font style="background-color: #cfe0e2"><br />
</font></p>
</font>
 <img src ="http://www.blogjava.net/LightUpHeaven/aggbug/334990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/LightUpHeaven/" target="_blank">Vigoss</a> 2010-10-13 10:44 <a href="http://www.blogjava.net/LightUpHeaven/archive/2010/10/13/334990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>