??xml version="1.0" encoding="utf-8" standalone="yes"?>www.黄在线观看,欧美日本久久,欧美日韩一区在线http://www.aygfsteel.com/lingy/category/40074.htmlzh-cnFri, 05 Jun 2009 12:00:57 GMTFri, 05 Jun 2009 12:00:57 GMT60Lingo, 讓JMS來做RPC http://www.aygfsteel.com/lingy/archive/2009/06/05/280257.html林光?/dc:creator>林光?/author>Fri, 05 Jun 2009 11:08:00 GMThttp://www.aygfsteel.com/lingy/archive/2009/06/05/280257.htmlJava programmer到RPC(Romote Procedure Call), 多半會想?RMI,
用RMI, 可以讓我們很Ҏ的呼叫遠端的 mothod.

但是, RMI 有一些缺? 其中每一個method都要 throw RemoteException, 不過最q我都用Spring framework, 他已E讓我們處理掉了這個麻?..

另外一個RMI的缺? 也就市本文章的重點, 是method的呼叫者與被呼叫者的關係太緊密了,
也就是說, client必須指定我所要呼叫的server是在E\的哪一個位址...

JMS,則提供了一個方?讓client (producer)送出message, 但不指定C攉一個message,
這種 loosely coupling 的方? 讓我們的E式更有彈? 但是用JMS來做RPC還是有一些麻煩的地方

* procedure送出的是message而不?呼叫method
* 基本?JMS?asynchronous, 也就是說 proceudre送出message? message還沒被處? procedureqU執行下?這與我們一般RMI 的用法不一?


然而Lingo q我們解Z這兩個問? 透過Lingo, 我們可以讓client直接呼叫server的method (而不是發送message, 在server這端 也不用去接受message), 但是並不指定是哪一個serverq我們處理這一個method call. 這對multiple server和load-balance很有q助.

Lingo的範? 可以看下面這個網址, 相當單明瞭

http://lingo.codehaus.org/Example

附帶一提的? lingo不但可以?synchronous呼叫method, 另外也可以用synchronous呼叫method.

好用?....

參考資?: http://lingo.codehaus.org/Home


]]>
反编译jad的命令?/title><link>http://www.aygfsteel.com/lingy/archive/2009/06/05/280180.html</link><dc:creator>林光?/dc:creator><author>林光?/author><pubDate>Fri, 05 Jun 2009 03:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/06/05/280180.html</guid><description><![CDATA[<p>首先,看一下jad的帮助提C?/p> <p>-a - 用JVM字节格式来注解输?<br /> -af - ?-a,但是注解的时候用全名U?<br /> -clear - 清除所有的前缀 <br /> -b - 输出多于的括?(e.g., if(a) { b(); }, default: no) <br /> -d <dir> - 指定输出文g的文件目?<br /> -dead -试图反编译代码的dead 部分(default: no) <br /> -disass - 不用用字节码的方式反~译 (no JAVA source generated) <br /> -f - 输出整个的名?无论是类q是Ҏ <br /> -ff -输出cȝ成员在方法之?(default: after methods) <br /> -i - 输出所有的变量的缺省的最初?<br /> -l<num> - strings分割成指定数目的块的字符 (default: no) <br /> -lnc - 输出文件用行号来注?(default: no) <br /> -nl - 分割strings用新行字W?newline character (default: no) <br /> -nodos -不要L查class文g是否以dos方式?(CR before NL, default: check) <br /> -nocast - 不要生成辅助文g <br /> -nocode -不要生成Ҏ的源代码 <br /> -noconv - 不要转换java的定义符 (default: do) <br /> -noctor - 不允许空的构造器存在 <br /> -noinner -x对内部类的支?(default: turn on) <br /> -nolvt - 忽略局部变量的表信?<br /> -nonlb - 不要输出一个新行在打开一个括号之?(default: do) <br /> -o - 无需认直接覆盖输出 (default: no) <br /> -p - 发送反~译代码到标准输?STDOUT (e.g., for piping) </p> <p>其次.常用命o</p> <p>jad -o -r -sjava -dsrc test.class</p> <p>tree目录下的所?.class文g<br />     jad -o -r -sjava -dsrc tree/**/*.class</p> <p>    unix可以表示为:jad -o -r -sjava -dsrc 'tree/**/*.class'</p> <p>指定输出文g的名字的话,用以下的转移命o</p> <p>jad -p example1.class > myexm1.java</p> <p><br /> 文章出处QDIY部落(http://www.diybl.com/course/3_program/java/javajs/20090305/158191.html)</p> <img src ="http://www.aygfsteel.com/lingy/aggbug/280180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">林光?/a> 2009-06-05 11:49 <a href="http://www.aygfsteel.com/lingy/archive/2009/06/05/280180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring与ActiveMQ(JMS)的整合说?/title><link>http://www.aygfsteel.com/lingy/archive/2009/06/04/280065.html</link><dc:creator>林光?/dc:creator><author>林光?/author><pubDate>Thu, 04 Jun 2009 12:13:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/06/04/280065.html</guid><description><![CDATA[ActiveMQ是完全支持JMS1.1和J2EE 1.4规范?JMS Provider实现,也是Apache Geronimo默认的JMS provider? <p>  ActiveMQ的网站:<a target="_blank">http://www.activemq.org</a></p> <p>  使用ActiveMQ后,可以在普通Web服务器用JMS功能Q不依赖于特定的应用服务器?/p> <ol> <h2>1. ActiveMQ 4.1-incubator-SNAPSHOT 与Spring 2.0 集成</h2> <p>ActiveMQ4.1 响应Spring 2.0号召Q支持了引入XML Schema namespace的简单配|语法,化了配置的语句?/p> <h2>1.1 引入ActiveMQ的XSD</h2> <p>在ApplicationContext.xml(Spring的配|文?中引入ActiveMQ的XML Scheam 配置文g),如下:<br /> (说明:׃ActiveMQ的那个XSD有部分错?因此使用的是自行修改q的XSD,?#8221;配置ClassPath中的scheam”节)</p> <pre><textarea style="width: 502px; height: 183px" class="Xml" rows="1" cols="60" name="code"><beans xmlns="http://www.springframework.org/schema/beans" xmlns:amq="http://activemq.org/config/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.org/config/1.0 http://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd"> </beans> </textarea></pre> <h2>1.2 配置ClassPath中的schema</h2> <p>在ClassPath 下面建立META-INF\spring.schemas 内容如下</p> <pre><textarea style="width: 502px; height: 116px" class="Xml" rows="1" cols="60" name="code">http\://people.apache.org/repository/org.apache.activemq/xsds/activemq-core-4.1-incubator-SNAPSHOT.xsd=/activemq-core-4.1-incubator-SNAPSHOT.xsd q个spring.schemas是spring自定义scheam的配|文? h?http:\://"部分写法 </textarea></pre> <h2>1.3 配置ActiveMQ embedded ActiveMQ Broker</h2> <pre><textarea style="width: 502px; height: 148px" class="Xml" rows="1" cols="60" name="code"><!-- lets create an embedded ActiveMQ Broker --> <amq :broker useJmx="false" persistent="false"></amq> <amq :transportConnectors> <amq :transportConnector uri="tcp://localhost:0"/> </amq> </textarea></pre> <p>当spring初始化时?ActiveMQ embedded Broker ׃启动?/p> <h2>1.4 配置BookStore MDP</h2> <p>配置ConnectionFactory,׃是embedded 所以URL?vm://localhost</p> <pre><textarea style="width: 502px; height: 124px" class="Xml" rows="1" cols="60" name="code"><!-- ActiveMQ connectionFactory to use --> <amq :connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost"/> </textarea></pre> <p>配置Queue名字</p> <pre><textarea style="width: 502px; height: 103px" class="Xml" rows="1" cols="60" name="code"><!-- ActiveMQ destinations to use --> <amq :queue name="destination" physicalName="org.apache.activemq.spring.Test.spring.embedded"/> </textarea></pre> <p>配置JmsTemplate</p> <pre><textarea style="width: 502px; height: 163px" class="Xml" rows="1" cols="60" name="code"><!-- Spring JmsTemplate config --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory"> <!-- lets wrap in a pool to avoid creating a connection per send --> <bean class="org.springframework.jms.connection.SingleConnectionFactory"> <property name="targetConnectionFactory"> <ref local="jmsConnectionFactory"/> </property> </bean> </property> <!-- custom MessageConverter define --> <property name="messageConverter" ref="orderMessageConverter"/> </bean> </textarea></pre> <p>配置MDP POJO</p> <pre><textarea style="width: 502px; height: 127px" class="Xml" rows="1" cols="60" name="code"><!-- a sample POJO which uses a Spring JmsTemplate --> <bean id="orderMessageProducer" class="org.springside.bookstore.components.activemq.OrderMessageProducer"> <property name="template"> <ref bean="jmsTemplate"/> </property> <property name="destination"> <ref bean="destination"/> </property> </bean> <!-- this is the Message Driven POJO (MDP) --> <!-- define MessageListenerAdapter --> <bean id="messageListener" class="org.springframework.jms.listener.adapter.MessageListenerAdapter"> <constructor -arg> <bean class="org.springside.bookstore.components.activemq.OrderMessageConsumer"> <property name="mailService" ref="mailService"></property> </bean> </constructor> <!-- mey be other method --> <property name="defaultListenerMethod" value="sendEmail"/> <!-- custom MessageConverter define --> <property name="messageConverter" ref="orderMessageConverter"/> </bean> <!-- and this is the attendant message listener container --> <bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsConnectionFactory"/> <property name="destination" ref="destination"/> <property name="messageListener" ref="messageListener"/> </bean> </textarea></pre> <h2>补充说明</h2> <li>采用了自定义的MessageConverter,Producer能够直接发送POJO? <li>使用了Spring的DefaultMessageListenerContainer,MessageListenerAdapter, Consumer 不用实现MessageListener 接口?/li> </ol> <img src ="http://www.aygfsteel.com/lingy/aggbug/280065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">林光?/a> 2009-06-04 20:13 <a href="http://www.aygfsteel.com/lingy/archive/2009/06/04/280065.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Activemq和Lingo实现JMS和异步调?/title><link>http://www.aygfsteel.com/lingy/archive/2009/06/04/280064.html</link><dc:creator>林光?/dc:creator><author>林光?/author><pubDate>Thu, 04 Jun 2009 12:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/lingy/archive/2009/06/04/280064.html</guid><description><![CDATA[jms是大家在目中经常用到的技术,而activemq又是开源的jms产品中比较优U的。在应用JMS处理相关业务Ӟ大家都是构造消息,然后发送到队列Q最后用message监听器监听到消息Q对消息q行分析处理。在q个q程中,有两步是比较ȝ和重复的Q那是构造消息和拆解消息。ƈ且这样与面向对象的思想很是q背。如果这样做昄是面向消息数据的Q而不是面向对象的。基于以上原因,我向大家介绍一个我在项目中l过实践的开源框Ӟlingo.<br />   lingo在JMS中v的主要作用就是对消息的封装,它让你可以不必关心消息的构造和拆解Q而只需兛_你本w的业务逻辑。我D一个例子,分别用activemq直接实现和用lingo实现。在q个例子中我用到了spring framework.<br />   =================================Hello.java===========================<br />   import java.io.Serializable;<br />   /**Hello.java用来传递JAVA对象<br />   * Author: cjp<br />   * Date: 2005-11-8<br />   * Time: 22:24:02<br />   */<br />   public class Hello implements Serializable {<br />   private String id;<br />   private Hello hello;<br />   private PointList pointList;<br />   public String getId() {<br />   return id;<br />   }<br />   public void setId(String id) {<br />   this.id = id;<br />   }<br />   public Hello getHello() {<br />   return hello;<br />   }<br />   public void setHello(Hello hello) {<br />   this.hello = hello;<br />   }<br />   }<br />   =========================SpringTest .java========================<br />   import org.springframework.jms.core.JmsTemplate;<br />   import org.springframework.jms.core.MessageCreator;<br />   import org.springframework.test.AbstractDependencyInjectionSpringContextTests;<br />   import javax.jms.*;<br />   /**<br />   *发送JMS消息<br />   */<br />   public class SpringTest extends AbstractDependencyInjectionSpringContextTests<br />   {<br />   protected String[] getConfigLocations()<br />   {<br />   return new String[]{"file:D:\\wosame\\test\\com\\wosame\\room\\jms\\jms.xml"};<br />   }<br />   public void testSendMessage() throws Exception<br />   {<br />   JmsTemplate jmsTemplate = (JmsTemplate) applicationContext.getBean("jmsTemplate");<br />   jmsTemplate.send(new MessageCreator()<br />   {<br />   public Message createMessage(Session session) throws JMSException<br />   {<br />   ObjectMessage message=session.createObjectMessage();<br />   Hello hello=new Hello();<br />   hello.setId("test");<br />   message.setObject(hello);<br />   return message;<br />   }<br />   });<br />   }<br />   }<br />   ================================HelloMDP .java==================================<br />   /**<br />   处理JMS消息<br />   */<br />   import org.apache.commons.logging.Log;<br />   import org.apache.commons.logging.LogFactory;<br />   import javax.jms.*;<br />   public class HelloMDP implements MessageListener<br />   {<br />   protected Log log = LogFactory.getLog(HelloMDP.class);<br />   public void onMessage(Message message)<br />   {<br />   try<br />   {<br />   ObjectMessage objMessage = (ObjectMessage) message;<br />   Hello hello= (Hello) objMessage.getObject();<br />   System.out.println("hello.getId() = " + hello.getId());<br />   } catch (JMSException e)<br />   {<br />   log.error("Parse failed", e);<br />   }<br />   }<br />   }<br />   ================================jms.xml==================================<br />   <?xml version="1.0" encoding="UTF-8"?<br />   <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"<br />   "http://www.springframework.org/dtd/spring-beans.dtd"<br />   <beans<br />   <!--嵌入式的JMSq接Q也是跟随JVM一起启?可以参看activemq的文?-<br />   <bean id="connectionFactory" class="org.activemq.ActiveMQConnectionFactory" <property name="brokerURL" value="vm://localhost"/<br />   <property name="useEmbeddedBroker" value="true"/<br />   </bean<br />   <!--消息监听器,也就是消息的具体的处理器--<br />   <bean id="HelloMDP" class="HelloMDP"/<br />   <!--jms监听需要JTA容器的支?-<br />   <bean id="activeMQContainer" class="org.activemq.jca.JCAContainer"<br />   <property name="workManager"<br />   <bean id="workManager" class="org.activemq.work.SpringWorkManager"/<br />   </property<br />   <property name="resourceAdapter"<br />   <bean id="activeMQResourceAdapter" class="org.activemq.ra.ActiveMQResourceAdapter"<br />   <property name="serverUrl" value="vm://localhost"/<br />   </bean<br />   </property<br />   </bean<br />   <!--消息的消费者,也就是将监听器与具体的队列关?-<br />   <bean id="HelloQueueConsumer" factory-method="addConnector" factory-bean="activeMQContainer"<br />   <property name="activationSpec"<br />   <bean class="org.activemq.ra.ActiveMQActivationSpec"<br />   <property name="destination" value="Hello.Queue"/<br />   <property name="destinationType" value="javax.jms.Queue"/<br />   </bean<br />   </property<br />   <property name="ref" value="HelloMDP"/<br />   </bean<br />   <!--spring的JMS template,用来发送JMS消息到指定的队列--<br />   <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"<br />   <property name="defaultDestinationName" value="Hello.Queue"/<br />   <property name="connectionFactory" ref="connectionFactory"/<br />   </bean<br />   </beans <p> </p> <p style="margin: 0px"> <div style="display: none" id="ubbcontent">  jms是大家在目中经常用到的技术,而activemq又是开源的jms产品中比较优U的。在应用JMS处理相关业务Ӟ大家都是构造消息,然后发送到队列Q最后用message监听器监听到消息Q对消息q行分析处理。在q个q程中,有两步是比较ȝ和重复的Q那是构造消息和拆解消息。ƈ且这样与面向对象的思想很是q背。如果这样做昄是面向消息数据的Q而不是面向对象的。基于以上原因,我向大家介绍一个我在项目中l过实践的开源框Ӟlingo.   lingo在JMS中v的主要作用就是对消息的封装,它让你可以不必关心消息的构造和拆解Q而只需兛_你本w的业务逻辑。我D一个例子,分别用activemq直接实现和用lingo实现。在q个例子中我用到了spring framework.   =================================Hello.java===========================   import java.io.Serializable;   /**Hello.java用来传递JAVA对象  * Author: cjp   * Date: 2005-11-8   * Time: 22:24:02   */   public class Hello implements Serializable {   private String id;   private Hello hello;   private PointList pointList;   public String getId() {   return id;   }   public void setId(String id) {   this.id = id;   }   public Hello getHello() {   return hello;   }   public void setHello(Hello hello) {   this.hello = hello;   }   }   =========================SpringTest .java========================   import org.springframework.jms.core.JmsTemplate;   import org.springframework.jms.core.MessageCreator;   import org.springframework.test.AbstractDependencyInjectionSpringContextTests;   import javax.jms.*;   /**   *发送JMS消息  */   public class SpringTest extends AbstractDependencyInjectionSpringContextTests   {   protected String[] getConfigLocations()   {   return new String[]{"file:D:\\wosame\\test\\com\\wosame\\room\\jms\\jms.xml"};   }   public void testSendMessage() throws Exception   {   JmsTemplate jmsTemplate = (JmsTemplate) applicationContext.getBean("jmsTemplate");   jmsTemplate.send(new MessageCreator()   {   public Message createMessage(Session session) throws JMSException   {   ObjectMessage message=session.createObjectMessage();   Hello hello=new Hello();   hello.setId("test");   message.setObject(hello);   return message;   }   });   }   }   ================================HelloMDP .java==================================   /**   处理JMS消息  */   import org.apache.commons.logging.Log;   import org.apache.commons.logging.LogFactory;   import javax.jms.*;   public class HelloMDP implements MessageListener   {   protected Log log = LogFactory.getLog(HelloMDP.class);   public void onMessage(Message message)   {   try   {   ObjectMessage objMessage = (ObjectMessage) message;   Hello hello= (Hello) objMessage.getObject();   System.out.println("hello.getId() = " + hello.getId());   } catch (JMSException e)   {   log.error("Parse failed", e);   }   }   }   ================================jms.xml==================================   <?xml version="1.0" encoding="UTF-8"?   <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"   "http://www.springframework.org/dtd/spring-beans.dtd"   <beans   <!--嵌入式的JMSq接Q也是跟随JVM一起启?可以参看activemq的文?-   <bean id="connectionFactory" class="org.activemq.ActiveMQConnectionFactory" <property name="brokerURL" value="vm://localhost"/   <property name="useEmbeddedBroker" value="true"/   </bean   <!--消息监听器,也就是消息的具体的处理器--   <bean id="HelloMDP" class="HelloMDP"/   <!--jms监听需要JTA容器的支?-   <bean id="activeMQContainer" class="org.activemq.jca.JCAContainer"   <property name="workManager"   <bean id="workManager" class="org.activemq.work.SpringWorkManager"/   </property   <property name="resourceAdapter"   <bean id="activeMQResourceAdapter" class="org.activemq.ra.ActiveMQResourceAdapter"   <property name="serverUrl" value="vm://localhost"/   </bean   </property   </bean   <!--消息的消费者,也就是将监听器与具体的队列关?-   <bean id="HelloQueueConsumer" factory-method="addConnector" factory-bean="activeMQContainer"   <property name="activationSpec"   <bean class="org.activemq.ra.ActiveMQActivationSpec"   <property name="destination" value="Hello.Queue"/   <property name="destinationType" value="javax.jms.Queue"/   </bean   </property   <property name="ref" value="HelloMDP"/   </bean   <!--spring的JMS template,用来发送JMS消息到指定的队列--   <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"   <property name="defaultDestinationName" value="Hello.Queue"/   <property name="connectionFactory" ref="connectionFactory"/   </bean   </beans</div> <p> </p> <script>document.getElementById("ubbcontent").style.display="none";</script> <div style="clear: both"> </div> <img src ="http://www.aygfsteel.com/lingy/aggbug/280064.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lingy/" target="_blank">林光?/a> 2009-06-04 20:11 <a href="http://www.aygfsteel.com/lingy/archive/2009/06/04/280064.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˶</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">躣</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ӽ</a>| <a href="http://" target="_blank">ѳ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ī</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ij</a>| <a href="http://" target="_blank">ػʵ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>