<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    少年阿賓

    那些青春的歲月

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

    #

    生成一個(gè)2000*5的表格,每個(gè)單元格的內(nèi)容是行號(hào)+逗號(hào)+列號(hào)

    方法一:使用createElement生成表格,使用insertRow和insertCell方法生成行列,單元格的內(nèi)容使用innerHTML屬性進(jìn)行填充。

    方法二:使用createElement生成表格,使用CreateElement方法生成行列,單元格的內(nèi)容使用了createTextNode方法填充。

    方法三:拼接表格innerHTML屬性的字符串,使用字符串 += 操作符鏈接字符串

    方法四:拼接表格innerHTML屬性的字符串,各個(gè)字符串追加數(shù)組里面,最后調(diào)用數(shù)組的join方法生成目標(biāo)字符串。

    運(yùn)行時(shí)間比較:

    方法 運(yùn)行時(shí)間(ms)
    方法一 93037
    方法二 3341
    方法三 2795
    方法四 500

    具體的程序如下:


    <html>
      <head>
       <title>test page</title>
       <script type='text/javascript'>
         <!--
       function createTable() {
           var t = document.createElement('table');
           for (var i = 0; i < 2000; i++) {
            var r = t.insertRow();
            for (var j = 0; j < 5; j++) {
             var c = r.insertCell();
             c.innerHTML = i + ',' + j;
            }
           }
          
           document.getElementById('table1').appendChild(t);
          t.setAttribute('border', '1');
       }
       
       function createTable2() {
           var t = document.createElement('table');
           var b = document.createElement('tbody');
           for (var i = 0; i < 2000; i++) {
            var r = document.createElement('tr');
            for (var j = 0; j < 5; j++) {
             var c = document.createElement('td');
             var m = document.createTextNode(i + ',' + j);
             c.appendChild(m);
             r.appendChild(c);
            }
            b.appendChild(r);
           }
          
           t.appendChild(b);
           document.getElementById('table1').appendChild(t);
          t.setAttribute('border', '1');
       }
       
       function createTable3() {
        var data = '';
        
        data += '<table border=1><tbody>';
           for (var i = 0; i < 2000; i++) {
            data += '<tr>';
            for (var j = 0; j < 5; j++) {
             data += '<td>' + i + ',' + j + '</td>';
            }
            data += '</tr>';
           }
           data += '</tbody><table>';
          
           document.getElementById('table1').innerHTML = data;
       }

       function createTable4() {
        var data = new Array();
        
        data.push('<table border=1><tbody>');
           for (var i = 0; i < 2000; i++) {
            data.push('<tr>');
            for (var j = 0; j < 5; j++) {
             data.push('<td>' + i + ',' + j + '</td>');
            }
            data.push('</tr>');
           }
           data.push('</tbody><table>');
          
           document.getElementById('table1').innerHTML = data.join('');
       }

       function showFunctionRunTime(f) {
        var t1 = new Date();
        f();
        var t2 = new Date();
        alert(t2 - t1);
       }
         //-->
       </script>
      </head>
     <body>
      <div id="table1" style="border: 1px solid black">
      </div>

      <script>
       showFunctionRunTime(createTable);
       showFunctionRunTime(createTable2);
       showFunctionRunTime(createTable3);
       showFunctionRunTime(createTable4);
      </script>
     </body>
    </html>

    原文出處:http://abaper.blogbus.com/logs/8278500.html



    動(dòng)態(tài)刪除表格  

      方法1: 
      <table   id=mxh   border=1>  
      <tr>  
      <td>第1行</td><td   onclick="deleteRow('mxh',this.parentElement.rowIndex)">刪除本行</td>  
      </tr>  
      <tr>  
      <td>第2行</td><td   onclick="deleteRow('mxh',this.parentElement.rowIndex)">刪除本行</td>  
      </tr>

      </table> 

    <script>  
      function   deleteRow   (tableID,   rowIndex)   {  
          var   table   =document.all[tableID]  
          table.deleteRow(rowIndex);  
      }    
      </script>

    方法2:

    <table   id=mxh   border=1>  
      <tr>  
      <td>第1行</td><td   onclick="deleteRow(this.parentElement)">刪除本行</td>  
      </tr>  
      <tr>  
      <td>第2行</td><td   onclick="deleteRow(this.parentElement)">刪除本行</td>  
      </tr>

      </table> 

    <script>  
      function   deleteRow   (obj)   {   

          obj.parentElement.removeChild(obj);  
      }    
      </script>

    分享到:

    posted @ 2012-08-28 21:20 abin 閱讀(1322) | 評(píng)論 (0)編輯 收藏

    Apache ActiveMQ簡(jiǎn)介: MQ是Apache出品的一個(gè)基于JMS消息處理機(jī)制的服務(wù),可以很容易的潛入到Spring中,作為項(xiàng)目消息處理服務(wù)。

    Apache ActiveMQ用途: jms有兩種消息機(jī)制一種是消息隊(duì)列,一種是消息訂閱,簡(jiǎn)單來(lái)說(shuō)就是一對(duì)一,和一對(duì)多。

    一對(duì)一可以看做 一組消息對(duì)應(yīng)一個(gè) 或 多個(gè)消息獲取服務(wù),其中每一個(gè)單獨(dú)的消息體都只會(huì)被一個(gè)消息獲取服務(wù)獲取。

    一對(duì)多可以看做 一組消息對(duì)應(yīng)一個(gè) 或 多個(gè)接收服務(wù),其中每一個(gè)單獨(dú)的消息體發(fā)出之后都會(huì)被所有的接收服務(wù)收到一次。

    根據(jù)以上兩種模式我們可以在 發(fā)送短信的時(shí)候使用 消息隊(duì)列模式。也可以在分布式的時(shí)候使用消息隊(duì)列模式

    消息訂閱模式用的不是很多但是,在分布式中也可以應(yīng)用同時(shí)可以結(jié)合WebService進(jìn)行使用。例如一個(gè)新聞需要發(fā)給多個(gè)系統(tǒng)內(nèi)的單獨(dú)服務(wù)。

    只要深刻理解了他的處理機(jī)制在很多情況下都可以應(yīng)用,如果實(shí)在不喜歡這種方式也可以遵照java JMS的API用線(xiàn)程自己模擬消息隊(duì)列機(jī)制。

    我個(gè)人認(rèn)為區(qū)別不是很大。更何況很多時(shí)候MQ的很多功能我們有沒(méi)有用到,用這么個(gè)大家伙就是為了圖省事。

    這里備注一下:按原有設(shè)定在創(chuàng)建連接的時(shí)候MQ是不發(fā)送消息的。

    下面我說(shuō)以下使用方式:

    本人目前只會(huì)JAVA

    需要的包為

            activemq-all-5.2.0.jar
            log4j-1.2.14.jar
            spring-beans-2.5.5.jar
            spring-context-2.5.5.jar
            spring-jms-2.5.5.jar

             spring-core-2.5.5.jar

    這些應(yīng)該就足夠了

    我做測(cè)試的時(shí)候用的包為

            activemq-all-5.2.0.jar
            commons-pool-1.4.jar
            log4j-1.2.14.jar
            spring-beans-2.5.5.jar
            spring-context-2.5.5.jar
            spring-core-2.5.5.jar
            spring-jms-2.5.5.jar
            spring-tx-2.5.5.jar
            spring-web-2.5.5.jar
            spring-webmvc-2.5.5.jar
            xbean-spring-3.4.jar
            msbase.jar
            mssqlserver.jar
            msutil.jar
            mysql-connector-java-5.0.4-bin.jar
            mysql.jar

     

    基本配置

    下載 Apache ActiveMQ 不知道的googlean

    安裝服務(wù)的文件在

    apache-activemq-5.5.0\bin\win32 目錄下面Linux版也一樣大同小異 運(yùn)行.sh文件就好,如果出現(xiàn)問(wèn)題請(qǐng)打開(kāi)運(yùn)行文件查看里面參數(shù)

    activemq.bat直接運(yùn)行啟動(dòng)服務(wù)

    InstallService.bat安裝成windos服務(wù)

    UninstallService.bat卸載windos服務(wù)

    安裝成功后

    在運(yùn)行中 cmd

    netstat -an|find “61616” 查詢(xún)端口是否已經(jīng)打開(kāi) 

    D:\apache-activemq-5.5.0\conf\activemq.xml 本文件為服務(wù)配置文件

         <transportConnectors>
                <transportConnector name="openwire" uri="tcp://0.0.0.0:61618"/>
            </transportConnectors>

    這一項(xiàng)為端口設(shè)置

    默認(rèn)為 “61616”

    目前以windos為例

    把spring和項(xiàng)目聯(lián)系起來(lái)

    第一步為web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
        http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!-- 配置Spring-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                /WEB-INF/classes/NewFileMQ.xml
            </param-value>
        </context-param>
        <listener>
            <listener-class>
                org.springframework.web.context.ContextLoaderListener
            </listener-class>
        </listener>


      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
        
    </web-app>

    先說(shuō) 一下消息隊(duì)列(也就是一對(duì)一)

    NewFileMQ.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:amq="http://activemq.apache.org/schema/core"
        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-2.0.xsd
      http://activemq.apache.org/schema/core 
      http://activemq.apache.org/schema/core/activemq-core.xsd">

      <!-- 配置JMS鏈接模版 -->  
                <bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">  
                        <property name="brokerURL" value="tcp://localhost:61618"/>  
                </bean>  
          
                <!-- 配置JMS模版 -->  
                <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
                        <property name="connectionFactory" ref="connectionFactory"/>  
            <property name="pubSubDomain" value="false" />  
            <property name="explicitQosEnabled" value="true" /> <!-- deliveryMode, priority, timeToLive 的開(kāi)關(guān),要生效,必須配置為true,默認(rèn)false-->  
            <property name="deliveryMode" value="1" /> <!-- 發(fā)送模式  DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久-->  
                        
                </bean>  
          

                <!-- 發(fā)送消息的目的地(一個(gè)隊(duì)列) -->
                <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">  
                        <!-- 設(shè)置消息隊(duì)列的名字 -->
                        <constructor-arg index="0" value="HelloJmsQueue"/>  
                </bean>    

        <bean id="sender" class="message.Sender">
            <property name="jmsTemplate" ref="jmsTemplate"></property>
        </bean>
    <!--消息獲取類(lèi)-->
        <bean id="receive" class="message.Receiver"></bean>
        <!--給消息獲取類(lèi)加個(gè)監(jiān)聽(tīng)讓他能自動(dòng)獲取消息-->
        <bean id="listenerContainer"
            class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="connectionFactory"></property>
            <property name="destination" ref="destination"></property>
            <property name="messageListener" ref="receive"></property>
        </bean>
    </beans>

    發(fā)送消息的類(lèi)

    package message;

    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;


    public class Sender {

        private JmsTemplate jmsTemplate;

        public void setJmsTemplate(JmsTemplate jmsTemplate) {
            this.jmsTemplate = jmsTemplate;
        }
        
        public void send(final String text){
            System.out.println("---Send:"+text);
            jmsTemplate.send(new MessageCreator(){

                public Message createMessage(Session arg0) throws JMSException {
                    // TODO Auto-generated method stub
                    return arg0.createTextMessage(text);
                }
                
            });
        }
        
        public static void main(String[] args) {  
            ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");  
            JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");  
            Destination destination = (Destination) ctx.getBean("destination");  
    for(int i=0;i<10;i++){
        final String dd = i+"";
    //jmsTemplate.convertAndSend(destination,"發(fā)送消息: ActiveMQ Text Message!"+dd);
            template.send(destination, new MessageCreator() {  
                    public Message createMessage(Session session) throws JMSException {  
                            return session.createTextMessage("發(fā)送消息: ActiveMQ Text Message!"+dd);  
                    }  
            });  
    }
            System.out.println("成功發(fā)送了一條JMS消息");  
    }  
    }
    接收消息類(lèi)

    package message;

    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;

    import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
    import org.springframework.context.ApplicationContext;
    import org.springframework.jms.core.JmsTemplate;


    public class Receiver implements MessageListener {
    //接聽(tīng)接收
        public void onMessage(Message message) {
            if (message instanceof TextMessage) {
                TextMessage text = (TextMessage) message;

                try {
                    System.out.println("Receive:第四個(gè)接收者" + text.getText());
                } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }
        //手動(dòng)接收
           public static void main(String[] args) throws JMSException {  
               ApplicationContext ctx = new ClassPathXmlApplicationContext("/applicationContext.xml");  
               JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");  
               Destination destination = (Destination) ctx.getBean("destination");  
               while (true) {  
                       TextMessage txtmsg = (TextMessage) template.receive(destination);  
                       if (null != txtmsg)  
                               System.out.println("收到消息內(nèi)容為: " + txtmsg.getText());  
                       else  
                               break;  
               }  
       }  
    }

    發(fā)布者模式

    其實(shí)兩種模式其它設(shè)置基本相同

    唯一不用的就是 Spring配置文件中把一下這段替換一下就可以了

                <!-- 發(fā)送消息的目的地(一個(gè)隊(duì)列) -->
                <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">  
                        <!-- 設(shè)置消息隊(duì)列的名字 -->
                        <constructor-arg index="0" value="HelloJmsTopic"/>  
                </bean>    

     








    http://hi.baidu.com/wu_chao/blog/item/1d9aa2772e663107b051b9cc.html 

    posted @ 2012-08-26 20:18 abin 閱讀(3372) | 評(píng)論 (1)編輯 收藏

    1,項(xiàng)目中所引的包

     

    2,發(fā)送和接受消息的代碼,每個(gè)都是一個(gè)Junit函數(shù)

    package test;

    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;
    import javax.jms.TextMessage;

    import junit.framework.TestCase;

    import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;

    public class ActivemqTest extends TestCase {
     @Test
     public void testJmsTemplateSend() {      

      ApplicationContext ctx = new FileSystemXmlApplicationContext(
        "WebRoot/WEB-INF/applicationContext.xml");
      JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");
      Destination destination = (Destination) ctx.getBean("destination");

      template.send(destination, new MessageCreator() {
       public Message createMessage(Session session) throws JMSException {
        return session.createTextMessage("發(fā)送消息:Hello ActiveMQ Text Message!");
       }
      });
      System.out.println("成功發(fā)送了一條JMS消息");
     }

     @Test
     public void testJmsTemplateReceive() throws JMSException {
      ApplicationContext ctx = new FileSystemXmlApplicationContext(
        "WebRoot/WEB-INF/applicationContext.xml");
      JmsTemplate template = (JmsTemplate) ctx.getBean("jmsTemplate");
      Destination destination = (Destination) ctx.getBean("destination");
      while (true) {
       TextMessage txtmsg = (TextMessage) template.receive(destination);
       if (null != txtmsg)
        System.out.println("收到消息內(nèi)容為: " + txtmsg.getText());
       else
        break;
      }
     }

     public static void main(String[] args) throws Exception{
      new ActivemqTest().testJmsTemplateSend();
      
      new ActivemqTest().testJmsTemplateReceive();
     }
    }

     

    3,applicationContext.xml文件內(nèi)容

    <?xml version="1.0" encoding="UTF-8"?>  
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
           xmlns:context="http://www.springframework.org/schema/context
           xsi:schemaLocation="http://www.springframework.org/schema/beans  
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
     
        <!-- 配置JMS連接工廠(chǎng) -->  
        <bean id="connectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">  
            <property name="brokerURL" value="tcp://localhost:61616"/>  
        </bean>  
     
        <!-- 配置JMS模版 -->  
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">  
            <property name="connectionFactory" ref="connectionFactory"/>  
        </bean>  
     
        <!-- 發(fā)送消息的目的地(一個(gè)隊(duì)列) -->  
        <bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">  
            <!-- Set the Queue Name -->  
            <constructor-arg index="0" value="HelloWorldQueue"/>  
        </bean>  
    </beans>




    http://blog.csdn.net/hnzhangshilong/article/details/6629780

    posted @ 2012-08-25 21:34 abin 閱讀(1059) | 評(píng)論 (0)編輯 收藏

    package com.abin.lee.quartz.all;

    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;

    public class UniversalQuartz implements Job{

     public void execute(JobExecutionContext arg0) throws JobExecutionException {
      System.out.println("執(zhí)行定時(shí)任務(wù): "+System.currentTimeMillis());
      
     }
     
    }




    package com.abin.lee.quartz.all;

    import java.text.ParseException;
    import java.util.Date;

    import org.quartz.CronTrigger;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;

    public class UniversalQuartzManager {
     private static UniversalQuartzManager instance = null;
     private Scheduler sched = null;
     private SchedulerFactory factory = null;

     private UniversalQuartzManager() {
      _init();
     }

     private void _init() {
      factory = new org.quartz.impl.StdSchedulerFactory();
      try {
       sched = factory.getScheduler();
      } catch (SchedulerException e) {
       e.printStackTrace();
      }
     }

     public synchronized static UniversalQuartzManager getInstance() {
      if (instance == null) {
       instance = new UniversalQuartzManager();
      }
      return instance;
     }

     public void start() {
      try {
       sched.start();
       // 在這里加載需要執(zhí)行的業(yè)務(wù)邏輯類(lèi)UniversalQuartz.class
       JobDetail detail = new JobDetail("cmhksynchron", "cmhkSynch",
         UniversalQuartz.class);
       CronTrigger trigger = new CronTrigger();
       // 手動(dòng)添加了時(shí)間
       trigger.setCronExpression("0/10 * * * * ? *");
    //   trigger.setCronExpression("0 0-59 16 * * ?");
       trigger.setName("abintrigger");
       trigger.setStartTime(new Date());
       sched.scheduleJob(detail, trigger);
      } catch (SchedulerException e) {
       e.printStackTrace();
      } catch (ParseException e2) {
       e2.printStackTrace();
      }
     }

     public void stop() {
      try {
       sched.shutdown();
       sched = factory.getScheduler();
      } catch (SchedulerException e) {
       e.printStackTrace();
      }
     }

     public void refresh() {
      // 未知的原因,程序執(zhí)行這段判斷進(jìn)入stop(),在sched.shutdown();這一句報(bào)錯(cuò),//所以暫時(shí)將其屏蔽,以待后來(lái)解決
      // try {
      // if(sched != null && sched.isStarted()) {
      // this.stop();
      // }
      this.start();
      // } catch (SchedulerException e) {
      // e.printStackTrace();
      // }
     }

    }

     




    package com.abinl.lee.quartz.all.test;

    import com.abin.lee.quartz.all.UniversalQuartzManager;

    public class TestQuartz {
     public static void main(String[] args) {
      UniversalQuartzManager.getInstance().refresh(); 
     }

    }



    posted @ 2012-08-25 12:43 abin 閱讀(844) | 評(píng)論 (0)編輯 收藏

    深入解讀Quartz的原理
     
    Quartz是一個(gè)大名鼎鼎的Java版開(kāi)源定時(shí)調(diào)度器,功能強(qiáng)悍,使用方便。
     
    一、核心概念
     
    Quartz的原理不是很復(fù)雜,只要搞明白幾個(gè)概念,然后知道如何去啟動(dòng)和關(guān)閉一個(gè)調(diào)度程序即可。
     
    1、Job
    表示一個(gè)工作,要執(zhí)行的具體內(nèi)容。此接口中只有一個(gè)方法
    void execute(JobExecutionContext context)
     
    2、JobDetail
    JobDetail表示一個(gè)具體的可執(zhí)行的調(diào)度程序,Job是這個(gè)可執(zhí)行程調(diào)度程序所要執(zhí)行的內(nèi)容,另外JobDetail還包含了這個(gè)任務(wù)調(diào)度的方案和策略。

     
    3、Trigger代表一個(gè)調(diào)度參數(shù)的配置,什么時(shí)候去調(diào)。
     
    4、Scheduler代表一個(gè)調(diào)度容器,一個(gè)調(diào)度容器中可以注冊(cè)多個(gè)JobDetail和Trigger。當(dāng)Trigger與JobDetail組合,就可以被Scheduler容器調(diào)度了。
     
     
    二、一個(gè)最簡(jiǎn)單入門(mén)實(shí)例
     
    import org.quartz.*;
    import org.quartz.impl.StdSchedulerFactory;

    import java.util.Date;

    /**
    * quartz定時(shí)器測(cè)試
    *
    * @author leizhimin 2009-7-23 8:49:01
    */
    public class MyJob implements Job {
            public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
                    System.out.println(new Date() + ": doing something...");
            }
    }

    class Test {
            public static void main(String[] args) {
                    //1、創(chuàng)建JobDetial對(duì)象
                    JobDetail jobDetail = new JobDetail();
                    //設(shè)置工作項(xiàng)
                    jobDetail.setJobClass(MyJob.class);
                    jobDetail.setName("MyJob_1");
                    jobDetail.setGroup("JobGroup_1");

                    //2、創(chuàng)建Trigger對(duì)象
                    SimpleTrigger strigger = new SimpleTrigger();
                    strigger.setName("Trigger_1");
                    strigger.setGroup("Trigger_Group_1");
                    strigger.setStartTime(new Date());
                    //設(shè)置重復(fù)停止時(shí)間,并銷(xiāo)毀該Trigger對(duì)象
                    java.util.Calendar c = java.util.Calendar.getInstance();
                    c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L);
                    strigger.setEndTime(c.getTime());
                    strigger.setFireInstanceId("Trigger_1_id_001");
                    //設(shè)置重復(fù)間隔時(shí)間
                    strigger.setRepeatInterval(1000 * 1L);
                    //設(shè)置重復(fù)執(zhí)行次數(shù)
                    strigger.setRepeatCount(3);

                    //3、創(chuàng)建Scheduler對(duì)象,并配置JobDetail和Trigger對(duì)象
                    SchedulerFactory sf = new StdSchedulerFactory();
                    Scheduler scheduler = null;
                    try {
                            scheduler = sf.getScheduler();
                            scheduler.scheduleJob(jobDetail, strigger);
                            //4、并執(zhí)行啟動(dòng)、關(guān)閉等操作
                            scheduler.start();

                    } catch (SchedulerException e) {
                            e.printStackTrace();
                    }
    //                try {
    //                        //關(guān)閉調(diào)度器
    //                        scheduler.shutdown(true);
    //                } catch (SchedulerException e) {
    //                        e.printStackTrace();
    //                }
            }
    }
     
    執(zhí)行結(jié)果:

     
    當(dāng)把結(jié)束時(shí)間改為:
                    //設(shè)置重復(fù)停止時(shí)間,并銷(xiāo)毀該Trigger對(duì)象
                    java.util.Calendar c = java.util.Calendar.getInstance();
                    c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L);
                    strigger.setEndTime(c.getTime());
     
    執(zhí)行結(jié)果:
     
    當(dāng)添加一條關(guān)閉調(diào)度器的語(yǔ)句:
                            //4、并執(zhí)行啟動(dòng)、關(guān)閉等操作
                            scheduler.start();
                            scheduler.shutdown(true);

     
    程序執(zhí)行結(jié)果:
    Thu Jul 23 10:11:50 CST 2009: doing something...

    Process finished with exit code 0
    僅僅執(zhí)行了一次,這一次能執(zhí)行完,原因是設(shè)定了scheduler.shutdown(true);true表示等待本次任務(wù)執(zhí)行完成后停止。
     
    從這里也可以看出,scheduler是個(gè)容器,scheduler控制jobDetail的執(zhí)行,控制的策略是通過(guò)trigger。
     
    當(dāng)scheduler容器啟動(dòng)后,jobDetail才能根據(jù)關(guān)聯(lián)的trigger策略去執(zhí)行。當(dāng)scheduler容器關(guān)閉后,所有的jobDetail都停止執(zhí)行。
     
    三、透過(guò)實(shí)例看原理
     
    通過(guò)研讀Quartz的源代碼,和本實(shí)例,終于悟出了Quartz的工作原理。
     
    1、scheduler是一個(gè)計(jì)劃調(diào)度器容器(總部),容器里面可以盛放眾多的JobDetail和trigger,當(dāng)容器啟動(dòng)后,里面的每個(gè)JobDetail都會(huì)根據(jù)trigger按部就班自動(dòng)去執(zhí)行。
     
    2、JobDetail是一個(gè)可執(zhí)行的工作,它本身可能是有狀態(tài)的。
     
    3、Trigger代表一個(gè)調(diào)度參數(shù)的配置,什么時(shí)候去調(diào)。
     
    4、當(dāng)JobDetail和Trigger在scheduler容器上注冊(cè)后,形成了裝配好的作業(yè)(JobDetail和Trigger所組成的一對(duì)兒),就可以伴隨容器啟動(dòng)而調(diào)度執(zhí)行了。
     
    5、scheduler是個(gè)容器,容器中有一個(gè)線(xiàn)程池,用來(lái)并行調(diào)度執(zhí)行每個(gè)作業(yè),這樣可以提高容器效率。
     
    6、將上述的結(jié)構(gòu)用一個(gè)圖來(lái)表示,如下:
     

     
    四、總結(jié)
     
    1、搞清楚了上Quartz容器執(zhí)行作業(yè)的的原理和過(guò)程,以及作業(yè)形成的方式,作業(yè)注冊(cè)到容器的方法。就認(rèn)識(shí)明白了Quartz的核心原理。
     
    2、Quartz雖然很龐大,但是一切都圍繞這個(gè)核心轉(zhuǎn),為了配置強(qiáng)大時(shí)間調(diào)度策略,可以研究專(zhuān)門(mén)的CronTrigger。要想靈活配置作業(yè)和容器屬性,可以通過(guò)Quartz的properties文件或者XML來(lái)實(shí)現(xiàn)。
     
    3、要想調(diào)度更多的持久化、結(jié)構(gòu)化作業(yè),可以通過(guò)數(shù)據(jù)庫(kù)讀取作業(yè),然后放到容器中執(zhí)行。
     
    4、所有的一切都圍繞這個(gè)核心原理轉(zhuǎn),搞明白這個(gè)了,再去研究更高級(jí)用法就容易多了。
     
    5、Quartz與Spring的整合也非常簡(jiǎn)單,Spring提供一組Bean來(lái)支持:MethodInvokingJobDetailFactoryBean、SimpleTriggerBean、SchedulerFactoryBean,看看里面需要注入什么屬性即可明白了。Spring會(huì)在Spring容器啟動(dòng)時(shí)候,啟動(dòng)Quartz容器。
     
    6、Quartz容器的關(guān)閉方式也很簡(jiǎn)單,如果是Spring整合,則有兩種方法,一種是關(guān)閉Spring容器,一種是獲取到SchedulerFactoryBean實(shí)例,然后調(diào)用一個(gè)shutdown就搞定了。如果是Quartz獨(dú)立使用,則直接調(diào)用scheduler.shutdown(true);
     
    7、Quartz的JobDetail、Trigger都可以在運(yùn)行時(shí)重新設(shè)置,并且在下次調(diào)用時(shí)候起作用。這就為動(dòng)態(tài)作業(yè)的實(shí)現(xiàn)提供了依據(jù)。你可以將調(diào)度時(shí)間策略存放到數(shù)據(jù)庫(kù),然后通過(guò)數(shù)據(jù)庫(kù)數(shù)據(jù)來(lái)設(shè)定Trigger,這樣就能產(chǎn)生動(dòng)態(tài)的調(diào)度。



    http://blog.csdn.net/jiangfeng861016/article/details/5970745




    posted @ 2012-08-25 11:48 abin 閱讀(3287) | 評(píng)論 (1)編輯 收藏

    http://www.iteye.com/topic/1125183
    http://blog.sina.com.cn/s/blog_5f64eccd0100p0pc.html
    http://www.iteye.com/topic/1125183
    http://hi.baidu.com/zhouqiugang/blog/item/65c9e160177db3cc8cb10d86.html
    http://blog.csdn.net/zrbin153/article/details/6026840
    HttpClient訪(fǎng)問(wèn)https站點(diǎn)證書(shū)加載問(wèn)題
    http://237451446.blog.51cto.com/2307663/759338
    http://www.tkk7.com/sxyx2008/archive/2011/07/08/353940.html
    posted @ 2012-08-23 13:54 abin 閱讀(545) | 評(píng)論 (0)編輯 收藏

    在繼承關(guān)系中,靜態(tài)塊、游離塊、構(gòu)造器、靜態(tài)方法、靜態(tài)變量、變量等的加載順序是如何的呢?!讓代碼來(lái)告訴我們,結(jié)果如下:

      父類(lèi)靜態(tài)塊
      子類(lèi)靜態(tài)塊
      父類(lèi)變量
      父類(lèi)靜態(tài)變量
      父類(lèi)游離塊
      父類(lèi)構(gòu)造器
      子類(lèi)變量
      子類(lèi)靜態(tài)變量
      子類(lèi)游離塊
      子類(lèi)的構(gòu)造器

    驗(yàn)證的代碼:


    package com.jlq.test;

    public class Test1 {

    private static String s1 = "父類(lèi)靜態(tài)變量";

    private String s2 = "父類(lèi)變量";

    public Test1() {
    System.out.println("父類(lèi)構(gòu)造器");
    }
    /**
    * 靜態(tài)代碼塊
    */

    static {
    System.out.println("父類(lèi)靜態(tài)塊");

    }
    /**
    * 游離塊
    */
    {
    System.out.println(s2);
    System.out.println(s1);
    System.out.println("父類(lèi)游離塊");

    }

    public static void main(String[] args) {
    new TestChild();
    }

    }

    class TestChild extends Test1 {

    private static String s1 = "子類(lèi)靜態(tài)變量";

    private String s2 = "子類(lèi)變量";
    /**
    * 靜態(tài)代碼塊
    */

    static {
    System.out.println("子類(lèi)靜態(tài)塊");

    }
    /**
    * 游離塊
    */
    {
    System.out.println(s2);
    System.out.println(s1);
    System.out.println("子類(lèi)游離塊");

    }

    public TestChild() {
    System.out.println("子類(lèi)的構(gòu)造器");
    }

    }
    posted @ 2012-08-22 15:07 abin 閱讀(508) | 評(píng)論 (0)編輯 收藏

    系統(tǒng)需求:

    1、  Windows系統(tǒng)或Linux系統(tǒng)

    2、  安裝并配置JDK 1.6.0_13

    3、  安裝并配置Tomcat 6.0

     

    第一步:為服務(wù)器生成證書(shū)

    1、  Windows系統(tǒng)

    • “運(yùn)行”控制臺(tái),進(jìn)入%JAVA_HOME%/bin目錄
    • 使用keytool為T(mén)omcat生成證書(shū),假定目標(biāo)機(jī)器的域名是“localhost”,keystore文件存放在“D:\home\tomcat.keystore”,口令為“password”,使用如下命令生成:

     

    keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\home\tomcat.keystore -validity 36500

     

    (參數(shù)簡(jiǎn)要說(shuō)明:“D:\home\tomcat.keystore”含義是將證書(shū)文件的保存路徑,證書(shū)文件名稱(chēng)是tomcat.keystore ;“-validity 36500”含義是證書(shū)有效期,36500表示100年,默認(rèn)值是90天)

    • 在命令行填寫(xiě)必要參數(shù):

    A、輸入keystore密碼:此處需要輸入大于6個(gè)字符的字符串

    B、“您的名字與姓氏是什么?”這是必填項(xiàng),并且必須是TOMCAT部署主機(jī)的域名或者IP[如:gbcom.com 或者 10.1.25.251](就是你將來(lái)要在瀏覽器中輸入的訪(fǎng)問(wèn)地址),否則瀏覽器會(huì)彈出警告窗口,提示用戶(hù)證書(shū)與所在域不匹配。在本地做開(kāi)發(fā)測(cè)試時(shí),應(yīng)填入“localhost”

    C、“你的組織單位名稱(chēng)是什么?”、“您的組織名稱(chēng)是什么?”、“您所在城市或區(qū)域名稱(chēng)是什么?”、“您所在的州或者省份名稱(chēng)是什么?”、“該單位的兩字母國(guó)家代碼是什么?”可以按照需要填寫(xiě)也可以不填寫(xiě)直接回車(chē),在系統(tǒng)詢(xún)問(wèn)“正確嗎?”時(shí),對(duì)照輸入信息,如果符合要求則使用鍵盤(pán)輸入字母“y”,否則輸入“n”重新填寫(xiě)上面的信息

    D、輸入<tomcat>的主密碼,這項(xiàng)較為重要,會(huì)在tomcat配置文件中使用,建議輸入與keystore的密碼一致,設(shè)置其它密碼也可以

    • 完成上述輸入后,直接回車(chē)則在你在第二步中定義的位置找到生成的文件

    2、  Linux系統(tǒng)

    • “運(yùn)行”控制臺(tái),進(jìn)入%JAVA_HOME%/bin目錄
    • 使用如下命令生成:

     

    ./keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/local/ac/web/tomcat.keystore -validity 36500

    (參數(shù)簡(jiǎn)要說(shuō)明:“/etc/tomcat.keystore”含義是將證書(shū)文件保存在路徑/usr/local/ac/web/下,證書(shū)文件名稱(chēng)是tomcat.keystore ;“-validity 36500”含義是證書(shū)有效期,36500表示100年,默認(rèn)值是90天)

    • 在命令行填寫(xiě)必要參數(shù):

    A、Enter keystore password:此處需要輸入大于6個(gè)字符的字符串

    B、“What is your first and last name?”這是必填項(xiàng),并且必須是TOMCAT部署主機(jī)的域名或者IP[如:gbcom.com 或者 10.1.25.251],就是你將來(lái)要在瀏覽器中輸入的訪(fǎng)問(wèn)地址

    C、“What is the name of your organizational unit?”、“What is the name of your organization?”、“What is the name of your City or Locality?”、“What is the name of your State or Province?”、“What is the two-letter country code for this unit?”可以按照需要填寫(xiě)也可以不填寫(xiě)直接回車(chē),在系統(tǒng)詢(xún)問(wèn)“correct?”時(shí),對(duì)照輸入信息,如果符合要求則使用鍵盤(pán)輸入字母“y”,否則輸入“n”重新填寫(xiě)上面的信息

    D、Enter key password for <tomcat>,這項(xiàng)較為重要,會(huì)在tomcat配置文件中使用,建議輸入與keystore的密碼一致,設(shè)置其它密碼也可以

    • 完成上述輸入后,直接回車(chē)則在你在第二步中定義的位置找到生成的文件

     

    第二步:為客戶(hù)端生成證書(shū)

     

    • 為瀏覽器生成證書(shū),以便讓服務(wù)器來(lái)驗(yàn)證它。為了能將證書(shū)順利導(dǎo)入至IE和Firefox,證書(shū)格式應(yīng)該是PKCS12,因此,使用如下命令生成:

     

    keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:\home\mykey.p12

     

    對(duì)應(yīng)的證書(shū)庫(kù)存放在“D:\home\mykey.p12”,客戶(hù)端的CN可以是任意值。雙擊mykey.p12文件,即可將證書(shū)導(dǎo)入至瀏覽器(客戶(hù)端)。

     

    第三步:讓服務(wù)器信任客戶(hù)端證書(shū)

     

    • 由于是雙向SSL認(rèn)證,服務(wù)器必須要信任客戶(hù)端證書(shū),因此,必須把客戶(hù)端證書(shū)添加為服務(wù)器的信任認(rèn)證。由于不能直接將PKCS12格式的證書(shū)庫(kù)導(dǎo)入,必須先把客戶(hù)端證書(shū)導(dǎo)出為一個(gè)單獨(dú)的CER文件,使用如下命令:

     

    keytool -export -alias mykey -keystore D:\home\mykey.p12 -storetype PKCS12 -storepass password -rfc -file D:\home\mykey.cer

     

    • 通過(guò)以上命令,客戶(hù)端證書(shū)就被我們導(dǎo)出到“D:\home\mykey.cer”文件了。下一步,是將該文件導(dǎo)入到服務(wù)器的證書(shū)庫(kù),添加為一個(gè)信任證書(shū):

     

    keytool -import -v -file D:\home\mykey.cer -keystore D:\home\tomcat.keystore

     

    • 通過(guò)list命令查看服務(wù)器的證書(shū)庫(kù),可以看到兩個(gè)證書(shū),一個(gè)是服務(wù)器證書(shū),一個(gè)是受信任的客戶(hù)端證書(shū):

     

    keytool -list -keystore D:\home\tomcat.keystore

     

    第四步:讓客戶(hù)端信任服務(wù)器證書(shū)

     

    • 由于是雙向SSL認(rèn)證,客戶(hù)端也要驗(yàn)證服務(wù)器證書(shū),因此,必須把服務(wù)器證書(shū)添加到瀏覽的“受信任的根證書(shū)頒發(fā)機(jī)構(gòu)”。由于不能直接將keystore格式的證書(shū)庫(kù)導(dǎo)入,必須先把服務(wù)器證書(shū)導(dǎo)出為一個(gè)單獨(dú)的CER文件,使用如下命令:

     

    keytool -keystore D:\home\tomcat.keystore -export -alias tomcat -file D:\home\tomcat.cer

     

     

    • 通過(guò)以上命令,服務(wù)器證書(shū)就被我們導(dǎo)出到“D:\home\tomcat.cer”文件了。雙擊tomcat.cer文件,按照提示安裝證書(shū),將證書(shū)填入到“受信任的根證書(shū)頒發(fā)機(jī)構(gòu)”。

    第四步:配置Tomcat服務(wù)器

     

    打開(kāi)Tomcat根目錄下的/conf/server.xml,找到如下配置段,修改如下:

     

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    SSLEnabled="true" maxThreads="150" scheme="https"
    secure="true" clientAuth="true" sslProtocol="TLS"
    keystoreFile="D:\\home\\test.keystore" keystorePass="123456"
    truststoreFile="D:\\home\\test.keystore" truststorePass="123456" />

    屬性說(shuō)明:

    • clientAuth:設(shè)置是否雙向驗(yàn)證,默認(rèn)為false,設(shè)置為true代表雙向驗(yàn)證
    • keystoreFile:服務(wù)器證書(shū)文件路徑
    • keystorePass:服務(wù)器證書(shū)密碼
    • truststoreFile:用來(lái)驗(yàn)證客戶(hù)端證書(shū)的根證書(shū),此例中就是服務(wù)器證書(shū)
    • truststorePass:根證書(shū)密碼

    第五步:測(cè)試

     

    在瀏覽器中輸入:https://localhost:8443/,會(huì)彈出選擇客戶(hù)端證書(shū)界面,點(diǎn)擊“確定”,會(huì)進(jìn)入tomcat主頁(yè),地址欄后會(huì)有“鎖”圖標(biāo),表示本次會(huì)話(huà)已經(jīng)通過(guò)HTTPS雙向驗(yàn)證,接下來(lái)的會(huì)話(huà)過(guò)程中所傳輸?shù)男畔⒍家呀?jīng)過(guò)SSL信息加密。


    注意事項(xiàng):貌似導(dǎo)入證書(shū)的時(shí)候,最好導(dǎo)入到“個(gè)人”那一欄里面,貌似客戶(hù)端的用戶(hù)名不填寫(xiě)也是可以的,或者隨便填寫(xiě)。

    http://licg1234.blog.163.com/blog/static/13908233320121165356868/ 


     

    posted @ 2012-08-22 09:52 abin 閱讀(13005) | 評(píng)論 (0)編輯 收藏

         摘要: CXF與spring集成 1. 新建web project ,并加入apache-cxf-2.0.7/lib所有包,編寫(xiě)要發(fā)布的web service 接口和實(shí)現(xiàn).這一步,與前面一樣。 import javax.jws.WebService; @WebService  public interface HelloWorld {     ...  閱讀全文
    posted @ 2012-08-21 14:20 abin 閱讀(1004) | 評(píng)論 (0)編輯 收藏

    五、CXF WebService整合Spring

    首先,CXF和spring整合需要準(zhǔn)備如下jar包文件:

    image

    這邊我是用Spring的jar包是Spring官方提供的,并沒(méi)有使用CXF中的Spring的jar文件。

    添加這么多文件后,首先在web.xml中添加如下配置:

    <!-- 加載Spring容器配置 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 設(shè)置Spring容器加載配置文件路徑 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:applicationContext-server.xml</param-value>
    </context-param>
     
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
     
    <servlet>
        <servlet-name>CXFService</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    </servlet>
     
    <servlet-mapping>
        <servlet-name>CXFService</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

    然后在src目錄中,新建一個(gè)applicationContext-server.xml文件,文件內(nèi)容如下:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jaxws="http://cxf.apache.org/jaxws"
        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-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://cxf.apache.org/jaxws 
        http://cxf.apache.org/schemas/jaxws.xsd"

    注意上面的帶下劃線(xiàn)加粗部分,這個(gè)很重要的哦!不能寫(xiě)錯(cuò)或是遺漏了。

    添加完這個(gè)文件后,還需要在這個(gè)文件中導(dǎo)入這么幾個(gè)文件。文件內(nèi)容如下:

    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

    下面開(kāi)始寫(xiě)服務(wù)器端代碼,首先定制服務(wù)器端的接口,代碼如下:

    package com.hoo.service;
     
    import javax.jws.WebParam;
    import javax.jws.WebService;
    import javax.jws.soap.SOAPBinding;
    import javax.jws.soap.SOAPBinding.Style;
    import com.hoo.entity.User;
    import com.hoo.entity.Users;
     
    /**
     * <b>function:</b>定制客戶(hù)端請(qǐng)求WebService所需要的接口
     * @author hoojo
     * @createDate 2011-3-18 上午08:22:55
     * @file ComplexUserService.java
     * @package com.hoo.service
     * @project CXFWebService
     * @blog http://blog.csdn.net/IBM_hoojo
     * @email hoojo_@126.com
     * @version 1.0
     */
    @WebService
    @SOAPBinding(style = Style.RPC)
    public interface IComplexUserService {
        
        public User getUserByName(@WebParam(name = "name") String name);
        
        public void setUser(User user);
    }

    下面編寫(xiě)WebService的實(shí)現(xiàn)類(lèi),服務(wù)器端實(shí)現(xiàn)代碼如下:

    package com.hoo.service;
     
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import javax.jws.WebParam;
    import javax.jws.WebService;
    import javax.jws.soap.SOAPBinding;
    import javax.jws.soap.SOAPBinding.Style;
    import com.hoo.entity.User;
    import com.hoo.entity.Users;
     
    /**
     * <b>function:</b> WebService傳遞復(fù)雜對(duì)象,如JavaBean、Array、List、Map等
     * @author hoojo
     * @createDate 2011-3-18 上午08:22:55
     * @file ComplexUserService.java
     * @package com.hoo.service
     * @project CXFWebService
     * @blog http://blog.csdn.net/IBM_hoojo
     * @email hoojo_@126.com
     * @version 1.0
     */
    @WebService
    @SOAPBinding(style = Style.RPC)
    @SuppressWarnings("deprecation")
    public class ComplexUserService implements IComplexUserService {
        
        public User getUserByName(@WebParam(name = "name") String name) {
            User user = new User();
            user.setId(new Date().getSeconds());
            user.setName(name);
            user.setAddress("china");
            user.setEmail(name + "@hoo.com");
            return user;
        }
        
        public void setUser(User user) {
            System.out.println("############Server setUser###########");
            System.out.println("setUser:" + user);
        }
    }

    注意的是和Spring集成,這里一定要完成接口實(shí)現(xiàn),如果沒(méi)有接口的話(huà)會(huì)有錯(cuò)誤的。

    下面要在applicationContext-server.xml文件中添加如下配置:

    <bean id="userServiceBean" class="com.hoo.service.ComplexUserService"/>
     
    <bean id="inMessageInterceptor" class="com.hoo.interceptor.MessageInterceptor">
        <constructor-arg  value="receive"/>
    </bean>
     
    <bean id="outLoggingInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
    <!-- 注意下面的address,這里的address的名稱(chēng)就是訪(fǎng)問(wèn)的WebService的name -->
    <jaxws:server id="userService" serviceClass="com.hoo.service.IComplexUserService" address="/Users">
        <jaxws:serviceBean>
            <!-- 要暴露的 bean 的引用 -->
            <ref bean="userServiceBean"/>
        </jaxws:serviceBean>
        <jaxws:inInterceptors>
            <ref bean="inMessageInterceptor"/>
        </jaxws:inInterceptors>
        <jaxws:outInterceptors>
            <ref bean="outLoggingInterceptor"/>
        </jaxws:outInterceptors>
    </jaxws:server>

    下面啟動(dòng)tomcat服務(wù)器后,在WebBrowser中請(qǐng)求:

    http://localhost:8080/CXFWebService/Users?wsdl

    如果你能看到wsdl的xml文件的內(nèi)容,就說(shuō)明你成功了,注意的是上面地址的Users就是上面xml配置中的address的名稱(chēng),是一一對(duì)應(yīng)的。

    下面編寫(xiě)客戶(hù)端請(qǐng)求的代碼,代碼如下:

    package com.hoo.client;
     
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    import com.hoo.entity.User;
    import com.hoo.service.IComplexUserService;
     
    /**
     * <b>function:</b>請(qǐng)求Spring整合CXF的WebService客戶(hù)端
     * @author hoojo
     * @createDate 2011-3-28 下午03:20:35
     * @file SpringUsersWsClient.java
     * @package com.hoo.client
     * @project CXFWebService
     * @blog http://blog.csdn.net/IBM_hoojo
     * @email hoojo_@126.com
     * @version 1.0
     */
    public class SpringUsersWsClient {
     
        public static void main(String[] args) {
            //調(diào)用WebService
            JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
            factory.setServiceClass(IComplexUserService.class);
            factory.setAddress("http://localhost:8080/CXFWebService/Users");
            
            IComplexUserService service = (IComplexUserService) factory.create();
            
            System.out.println("#############Client getUserByName##############");
            User user = service.getUserByName("hoojo");
            System.out.println(user);
            
            user.setAddress("China-Guangzhou");
            service.setUser(user);
        }
    }

    運(yùn)行后,可以在控制臺(tái)中看到

    log4j:WARN No appenders could be found for logger (org.apache.cxf.bus.spring.BusApplicationContext).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
    2011-3-28 18:12:26 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
    信息: Creating Service {http://service.hoo.com/}IComplexUserServiceService from class com.hoo.service.IComplexUserService
    #############Client getUserByName##############
    27#hoojo#hoojo@hoo.com#china
    
    Tomcat控制臺(tái)
     image 

    這個(gè)server端是通過(guò)Spring整合配置的,下面我們將Client端也通過(guò)Spring配置完成整合。

    首先增加applicationContext-client.xml配置文件,文件內(nèi)容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jaxws="http://cxf.apache.org/jaxws"
        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-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://cxf.apache.org/jaxws 
        http://cxf.apache.org/schemas/jaxws.xsd"
        
        <import resource="classpath:META-INF/cxf/cxf.xml"/>
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
        
        <jaxws:client id="userWsClient" serviceClass="com.hoo.service.IComplexUserService" 
            address="http://localhost:8080/CXFWebService/Users"/>
    </beans>

    客戶(hù)端請(qǐng)求代碼如下:

    package com.hoo.client;
     
    import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import com.hoo.entity.User;
    import com.hoo.service.IComplexUserService;
     
    /**
     * <b>function:</b>請(qǐng)求Spring整合CXF的WebService客戶(hù)端
     * @author hoojo
     * @createDate 2011-3-28 下午03:20:35
     * @file SpringUsersWsClient.java
     * @package com.hoo.client
     * @project CXFWebService
     * @blog http://blog.csdn.net/IBM_hoojo
     * @email hoojo_@126.com
     * @version 1.0
     */
    public class SpringUsersWsClient {
     
        public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");
            
            IComplexUserService service = ctx.getBean("userWsClient", IComplexUserService.class);
            
            System.out.println("#############Client getUserByName##############");
            User user = service.getUserByName("hoojo");
            System.out.println(user);
            
            user.setAddress("China-Guangzhou");
            service.setUser(user);
        }
    }

    運(yùn)行后結(jié)果如下:

    #############Client getUserByName##############
    45#hoojo#hoojo@hoo.com#china
    ############Server setUser###########
    setUser:45#hoojo#hoojo@hoo.com#China-Guangzhou

    作者:hoojo
    出處:

    http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html
    blog:http://blog.csdn.net/IBM_hoojo
    本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁(yè)面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。

     


    版權(quán)所有,轉(zhuǎn)載請(qǐng)注明出處 本文出自: http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html
    posted @ 2012-08-21 11:17 abin 閱讀(1600) | 評(píng)論 (0)編輯 收藏

    僅列出標(biāo)題
    共50頁(yè): First 上一頁(yè) 31 32 33 34 35 36 37 38 39 下一頁(yè) Last 
    主站蜘蛛池模板: 免费大片av手机看片| mm1313亚洲精品国产| 久久精品国产亚洲av麻豆图片 | 亚洲国产激情在线一区| 1000部拍拍拍18勿入免费视频下载 | 亚洲成AV人片在线观看ww| a级毛片免费播放| 亚洲人成人一区二区三区| 高清永久免费观看| 亚洲欭美日韩颜射在线二| 99久久精品毛片免费播放| 亚洲色大成网站www永久一区 | 亚洲av日韩av激情亚洲| 先锋影音资源片午夜在线观看视频免费播放| 亚洲精品字幕在线观看| 一区二区三区无码视频免费福利| 国产AV无码专区亚洲Av| 免费A级毛片无码视频| 亚洲手机中文字幕| 一二三四在线播放免费观看中文版视频| 亚洲人成人77777在线播放| 国拍在线精品视频免费观看| 亚洲日韩精品无码专区| 手机看片久久国产免费| 免费精品久久久久久中文字幕| 亚洲国产成人久久综合区| jizz免费观看| 国产亚洲人成网站在线观看不卡| 久草福利资源网站免费| 亚洲网站在线播放| 成人性生活免费视频| 国产精品亚洲一区二区三区| 亚洲美日韩Av中文字幕无码久久久妻妇 | 色九月亚洲综合网| 在线观看亚洲精品国产| 久久免费精品一区二区| 亚洲综合色区中文字幕| 国产小视频免费观看| 久久免费99精品国产自在现线| 亚洲AV无码精品色午夜果冻不卡| 69视频在线是免费观看|