青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

路漫漫,長修遠,我們不能沒有錢
隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
數據加載中……

搞定了Jms的ObjectMessage對象傳遞 ,這個項目可以告一段落了

關鍵字:JAVA JMS  Active MQ  XML INI Eclipse Resin

jms服務器 , active MQ 我這一篇應該是第一篇比較詳細的用代碼+注釋介紹的中文文檔了
activeMQ是一個開源的C核心的jms服務器,在國外的應用相當廣泛.所以這個項目我放棄了jboss4的用數據庫作為消息載體的jms服務,改用active MQ

    整個項目的架構如下,用戶通過http請求提交消息, webserver 收到提交請求后將消息封裝到一個implements Serializable的class 然后通過active mq的 jms服務發送給server端,入庫
    另一個進程將處理好的記錄從數據庫種取出,通過httpconnection發送給 用戶提供的數據接收的webservice.



程序中負責接收http請求的servlet

package sms.khan;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URLDecoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import sms.khan.mq.smsMQSender;

import comm.khan.LoadIni;
import comm.khan.commTools;

//import javax.naming.*;
//import javax.sql.DataSource;

public class recv extends HttpServlet {

    
private static final long serialVersionUID = 1L;

    
public recv() {

    }

    
private static final String CONTENT_TYPE = "text/html; charset=GBK";

    
// Initialize global variables
    public void init() throws ServletException {

    }

    
public void doGet(HttpServletRequest request, HttpServletResponse response)
             throws
 ServletException, IOException {
        
int ackMode=1;
        String clientID
="null";
        
boolean durable=false;
        String subject
="";
        String url
="";
        String pwd
="";
        String user
=""
        
boolean topic=false;
        
long timeToLive=0;
        
long sleepTime=0
        
        response.setContentType(CONTENT_TYPE);
        PrintWriter out 
= response.getWriter();
        InputStream in 
= null;

        
try {
            in 
= new BufferedInputStream(new FileInputStream("web/config.xml"));
        } 
catch (FileNotFoundException e) {
            e.printStackTrace();
        } 
        
/*獲取發送者的信息*/
        SmsData sd 
= new SmsData();
        
if(commTools.existPara(request, "spid"))
            sd.setSpid(request.getParameter(
"spid"));
        
        
if(commTools.existPara(request, "passwd"))
            sd.setPasswd(request.getParameter(
"passwd"));
        
        
if(commTools.existPara(request, "seq"))
            sd.setSeq(request.getParameter(
"seq"));
        
        
if(commTools.existPara(request, "port"))
            sd.setPort(request.getParameter(
"port"));
        
        
if(commTools.existPara(request, "mobile"))
            sd.setMobile(request.getParameter(
"mobile"));
        
        
if(commTools.existPara(request, "service"))
            sd.setService(request.getParameter(
"service"));
        
        
if(commTools.existPara(request, "style"))
            sd.setStyle(request.getParameter(
"style"));
        
        
if(commTools.existPara(request, "content"))
            sd.setContent(URLDecoder.decode(request.getParameter(
"content"),"GB2312"));
        
        
if(commTools.existPara(request, "smscid"))
            sd.setSmscid(request.getParameter(
"smscid"));
        
        
if(commTools.existPara(request, "moseq"))
            sd.setMoseq(request.getParameter(
"moseq"));

        
// TODO 可以在此驗證spid,ip,password
        
        XMLAnalyse.parseXml(in);
        
        out.println(
"<html>");
        out.println(
"<head><title>文件讀寫測試</title></head>");
        out.println(
"<body bgcolor=\"#ffffff\">");
        out.println(
"<p>content:"+sd.getContent()+"</p>");
        out.println(
"<p>ip:"+request.getRemoteHost()+" port:"+request.getServerPort()+"</p>");
        out.println(
"</body></html>");
        
        LoadIni ini 
=new LoadIni(); //裝載配置文件
        ini.setFilename("web" + File.separator + "smsmq.ini");
        
try{
          ackMode 
=Integer.parseInt( ini.readINI("ackMode") );
          clientID 
= ini.readINI("clientID");
          durable 
= ini.readINI("durable").equals("true"? true : false;
          subject
=ini.readINI("subject");
          url
= ini.readINI("url");
          pwd
=ini.readINI("pwd");
          user
=ini.readINI("user");
          topic
=ini.readINI("topic").equals("true")? truefalse;
          timeToLive
=Integer.parseInt(ini.readINI("timeToLive"));
          sleepTime
=Integer.parseInt(ini.readINI("sleepTime"));
        }
catch(IOException e){
          e.printStackTrace();
        }
catch(Exception e){
          e.printStackTrace();
        }
       
        //將數據發送到jms
        smsMQSender smq
= new smsMQSender(ackMode, clientID, durable,subject, url,
                                         pwd, user, topic,timeToLive, sleepTime, sd);
        smq.run();
        
        out.flush();
        out.close();
    }

    
    
// Process the HTTP Post request
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {
        doGet(request, response);
    }

    
public void destroy() {

    }
}





ToolSupport.java jms傳遞的基類

package sms.khan.mq;



import org.activemq.ActiveMQConnection;
import org.activemq.ActiveMQConnectionFactory;
import org.activemq.util.IndentPrinter;

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

/**
 * 消息傳輸類的抽象接口
 *
 * 
@version $Revision: 1.2 $
 
*/
public class ToolSupport {

    
/**消息發送的目的地*/
    
protected Destination destination;
    
    
/**消息池d名字*/
    
protected String subject = "TOOL.DEFAULT";
    
    
/**點對點傳輸模式或訂閱模式 true 訂閱模式,false 點對點模式*/
    
protected boolean topic = false;
    
    
protected String user = ActiveMQConnection.DEFAULT_USER;
    
protected String pwd  = ActiveMQConnection.DEFAULT_PASSWORD;
    
protected String url  = ActiveMQConnection.DEFAULT_BROKER_URL;
    
    
/*消息的transacted模式*/
    
protected boolean transacted = false;
    
    
/**傳遞模式, 有兩種模式: PERSISTENT 和NON_PERSISTENT,PERSISTENT
     *  表示該消息一定要被送到目的地,否則會導致應用錯誤。NON_PERSISTENT 
     *  表示偶然丟失該消息是被允許的,這兩種模式使開發者可以在消息傳遞的可
     *  靠性和吞吐量之間找到平衡點
*/
    
protected boolean durable = false;
    
    
protected String clientID;
    
    
/**
     * AUTO_ACKNOWLEDGE session將自動地確認收到一則消息。
     * CLIENT_ACKNOWLEDGE 客戶端程序將確認收到一則消息,調用這則消息的確認方法。
     * DUPS_OK_ACKNOWLEDGE 這個選項命令session“懶散的”確認消息傳遞,可以想到,
     *   這將導致消息提供者傳遞的一些復制消息可能會出錯。這種確認的方式只應當用于消
     *   息消費程序可以容忍潛在的副本消息存在的情況。
*/
    
protected int ackMode = Session.AUTO_ACKNOWLEDGE;
    
protected String consumerName = "James";

    
/**建立一個會話
     * 
@param Connection 消息池連接
     * 
@return Session 會話
     * 
@exception Exception*/
    
protected Session createSession(Connection connection) throws Exception {
        Session session 
= connection.createSession(transacted, ackMode);
        
if (topic) {
            destination 
= session.createTopic(subject); //發布-訂閱消息模式
        } else {
            destination 
= session.createQueue(subject); //點對點消息隊列模式
        }
        
return session;
    }

    
/**與消息池建立連接,并準備通訊
     *
@return Connection 返回連接Connection
     *
@exception JMSException 
     *
@exception Exception*/
    
protected Connection createConnection() throws JMSException, Exception {
        ActiveMQConnectionFactory connectionFactory 
= new ActiveMQConnectionFactory(user, pwd, url);
        Connection connection 
= connectionFactory.createConnection();
        
if (durable && clientID!=null) {
            connection.setClientID(clientID);
        }
        
        connection.start(); 
//開始消息傳遞
        return connection;
    }

    
/**關閉連接和會話
     * 
@param Connection 連接
     * 
@param Session 會話
     * 
@exception JMSException*/
    
protected void close(Connection connection, Session session) throws JMSException {
        
// lets dump the stats
        
//dumpStats(connection);

        
if (session != null) {
            session.close();
        }
        
if (connection != null) {
            connection.close();
        }
    }

    
/**打印當前連接的狀態信息
     *
@param Connection 連接*/
    
protected void dumpStats(Connection connection) {
        ActiveMQConnection c 
= (ActiveMQConnection) connection;
        c.getConnectionStats().dump(
new IndentPrinter());
    }
}



發送jms的class smsMQSender

package sms.khan.mq;


import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.ObjectMessage;
//import javax.jms.TextMessage;

/**發送一個object到指定消息池
 * 
*/
public class smsMQSender extends ToolSupport {
    
private long timeToLive;
    
protected long sleepTime = 0L;
    
private Object object;

    
// "1000 255 null"
    /**構造器
     * 
@param int ackMode 
     * 
@param String ClientID
     * 
@param boolean durable
     * 
@param String subject
     * 
@param String url
     * 
@param String pwd
     * 
@param String user
     * 
@param boolean topic
     * 
@param long timeToLive
     * 
@param long sleepTime
     * 
@param Object object
     * 
*/
    
public smsMQSender(int ackMode, String clientID, boolean durable,
            String subject, String url, String pwd, String user, 
boolean topic,
            
long timeToLive, long sleepTime, Object object) {
        
this.ackMode = ackMode;
        
this.clientID = clientID; //
        this.durable = durable; // false
        this.subject = subject; // TEST.FOO
        this.url = url; // localhost:61616
        this.pwd = pwd;
        
this.user = user;
        
this.topic = topic; // false
        this.timeToLive = timeToLive;
        
this.sleepTime = sleepTime;
        
this.object = object;
    }

    
/** 連接消息池并發送消息 */
    
public void run() {
        
try {
            System.out.println(
"連接到 to URL: " + url);
            System.out.println(
"發送消息到 " + (topic ? "topic" : "queue"+ "" + subject);
            System.out.println(
"使用 " + (durable ? "durable" : "non-durable"+ " 傳遞模式");
            
if (timeToLive != 0) {
                System.out.println(
"消息的生存期為 " + timeToLive + " ms");
            }
            Connection connection 
= createConnection();// 建立一個消息池的連接
            Session session = createSession(connection); // 建立會話
            MessageProducer producer = createProducer(session); // 建立消息生產者
            sendLoop(session, producer);

            System.out.println(
"完成.");
            close(connection, session);
        } 
catch (Exception e) {
            System.out.println(
"Caught: " + e);
            e.printStackTrace();
        }
    }

    
/**
     * 建立消息生產者
     * 
@param Session 會話
     * 
@return MessageProducer 消息生產者
     * 
@exception JMSException
     
*/
    
protected MessageProducer createProducer(Session session) throws JMSException {
        MessageProducer producer 
= session.createProducer(destination);
        
if (durable) {
            producer.setDeliveryMode(DeliveryMode.PERSISTENT);
        } 
else {
            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
        }
        
if (timeToLive != 0)
            producer.setTimeToLive(timeToLive);
        
return producer;
    }
    
    
      
/**循環發送消息
       * 
@param Session
       * 
@param MessageProducer
       * 
@exception Exception*/
      
protected void sendLoop(Session session, MessageProducer producer) throws Exception {
          ObjectMessage message 
= session.createObjectMessage();
          message.setObject((sms.khan.SmsData)object);
          producer.send(message);
          
if(transacted) {
            session.commit();
          }
        

      }
    
    

    
/**
     * 
@param args
     
*/
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub

    }

}




接收jms的類 smsMQRecv .java
package sms.khan.mq;



import java.io.File;
import java.io.IOException;

import javax.jms.Connection;
import javax.jms.ExceptionListener;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.ObjectMessage;
import javax.jms.Topic;

import comm.khan.LoadIni;

import sms.khan.SmsData;


/**
 * 接收類,消費者模型
 * 
@version $Revision: 1.1.1.1 $
 
*/
public class smsMQRecv extends ToolSupport implements MessageListener, ExceptionListener {

    
protected int count = 0;
    
protected int dumpCount = 10;
    
protected boolean verbose = true;
    
protected int maximumMessages = 0;
    
private boolean pauseBeforeShutdown;
    
private boolean running;
    
private Session session;
    
private long sleepTime = 0;

    
    
/**構造器
     * 
*/
    
public smsMQRecv(){
    
    }
    
    
    
public static void main(String[] args) {
        smsMQRecv tool 
= new smsMQRecv();
        
        LoadIni ini 
=new LoadIni(); //裝載配置文件
        ini.setFilename("web" + File.separator + "smsmq.ini");
        
try{
          tool.clientID  
= ini.readINI("clientID");
          tool.durable 
= ini.readINI("durable").equals("true"? true : false;
          tool.subject 
= ini.readINI("subject");
          tool.url 
= ini.readINI("url");
          tool.topic 
= ini.readINI("topic").equals("true")? truefalse;
          tool.sleepTime 
= Integer.parseInt(ini.readINI("sleepTime"));
        }
catch(IOException e){
          e.printStackTrace();
        }
catch(Exception e){
          e.printStackTrace();
        }
        
if (args.length > 4) {
            tool.maximumMessages 
= Integer.parseInt(args[4]);
        }

        
//if (args.length > 6) {
        
//    tool.transacted = "true".equals(args[6]);
        
//}


        tool.run();
    }

    
public void run() {
        
try {
            running 
= true;

            System.out.println(
"連接到服務器: " + url);
            System.out.println(
"Consuming " + (topic ? "topic" : "queue"+ "" + subject);
            System.out.println(
"Using " + (durable ? "durable" : "non-durable"+ " subscription");

            Connection connection 
= createConnection();//建立一個消息池連接
            connection.setExceptionListener(this);
//設置ExceptionListener為this ,因為this implements ExceptionListener
            session = createSession(connection);
            MessageConsumer consumer 
= null;//建立一個消息消費者
            
            
if (durable && topic) {
                consumer 
= session.createDurableSubscriber((Topic) destination, consumerName);
            } 
else {
                consumer 
= session.createConsumer(destination);
            }
            
            
if (maximumMessages <= 0) {
                consumer.setMessageListener(
this);
            }

            
if (maximumMessages > 0) {
                consumeMessagesAndClose(connection, session, consumer);
            }
        } 
catch (Exception e) {
            System.out.println(
"Caught: " + e); 
            e.printStackTrace();
        }
    }

    
/**MessageListener 的abstract 接口
     * 
@param Message 從消息池接收到的消息*/
    
public void onMessage(Message message) {
        
try {
            
if (message instanceof ObjectMessage) {
                ObjectMessage Msg 
= ((ObjectMessage) message);
                SmsData sd 
=  (SmsData)(Msg.getObject());
                System.out.println(sd.getMobile() 
+ sd.getContent());
                
if (verbose) System.out.println("Received: " + sd.getMobile());
            } 
else {
                
if (verbose) System.out.println("Received: " + message);
            }
            
if (transacted) {
                session.commit();
            }

        } 
catch (JMSException e) {
            System.out.println(
"Caught: " + e);
            e.printStackTrace();
        } 
finally {
            
if (sleepTime > 0) {
                
try {
                    Thread.sleep(sleepTime);
                } 
catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    
/**ExceptionListener的abstract 接口
     *
@param JMSException 接收到的JMS異常 */
    
synchronized public void onException(JMSException ex) {
        System.out.println(
"JMS Exception occured.  Shutting down client.");
        running 
= false;
    }

    
/**檢測實例是否正在運行*/
    
synchronized boolean isRunning() {
        
return running;
    }

    
protected void consumeMessagesAndClose(Connection connection, Session session,
                          MessageConsumer consumer) 
throws JMSException, IOException {
        System.out.println(
"系統等待,直到接收到 " + maximumMessages + " 條消息再退出");
        
while( isRunning()){
            Message message 
= consumer.receive();
            onMessage(message);
        }
/*
        for (int i = 0; i < maximumMessages && isRunning();) {
            Message message = consumer.receive(10);
            if (message != null) {
                i++;
                onMessage(message);
            }
        }
*/
        System.out.println(
"Closing connection");
        consumer.close();
        session.close();
        connection.close();
        
if (pauseBeforeShutdown) {
            System.out.println(
"Press return to shut down");
            System.in.read();
        }
    }

}


XMLAnalyse.java 分析xml配置文件的類
package sms.khan;


import java.io.*;
import java.io.FileInputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.*;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;

public class XMLAnalyse {



  
public XMLAnalyse() {
  }

  
public static void main(String args[]) {
    InputStream in 
= null;
    
//byte[] buf = new byte[255];
    try {
      in 
= new BufferedInputStream(new FileInputStream("web/config.xml"));
        
/*while (in.read(buf) != -1) {
            for (int i = 0; i < 255; i++) {
                if (buf[i] == 0) break;
                System.out.print((char) buf[i]);
                buf[i] = '\0';
            }
        }
        System.out.print('\n');
        in = new BufferedInputStream(new FileInputStream("web/config.xml"));
*/
    } 
catch (FileNotFoundException e) {
        e.printStackTrace();
    } 
//catch (IOException e) {
    
//    e.printStackTrace();
    
//}
    
    XMLAnalyse.parseXml(in);
  }

  
public static int parseXml(InputStream inputstream) {
    DocumentBuilderFactory df 
= DocumentBuilderFactory.newInstance();
    DocumentBuilder doc 
= null;
    
try {
      doc 
= df.newDocumentBuilder();
    } 
catch (ParserConfigurationException e) {
      e.printStackTrace();
    }

    Document document 
= null;
    
try {
      document 
= doc.parse(inputstream);
    } 
catch (DOMException dom) {
      dom.printStackTrace();
    } 
catch (SAXException ioe) {
      ioe.printStackTrace();
    } 
catch (IOException e) {
      e.printStackTrace();
    }
 
    Element root 
= document.getDocumentElement();

    
for (int i = 0; i < root.getChildNodes().getLength(); i++) {
      NodeList nl 
= root.getChildNodes().item(i).getChildNodes();
      
int len= nl.getLength();
      
if ( len > 1) {
        System.out.println(
"處理sp名單");
        
for (int j = 0; j < len; j++) {
            
            String name 
= nl.item(j).getNodeName();
            
if (!name.equals("#text")){//回車和空格會產生的nodename "#text"
              System.out.println("name:"+name +" value:" +nl.item(j).getLastChild().getNodeValue());
            }
        }
      }
    }

    
return 0;
  }


}


smsData.java 數據載體類
package sms.khan;

import java.io.Serializable;

//import comm.khan.commTools;

public class SmsData implements Serializable{

    
/**
     * 
     
*/
    
private static final long serialVersionUID = 1L;
    
    
private String spid = "";
    
private String passwd = "";
    
private String seq = "";
    
private String port = "";
    
private String mobile = "";
    
private String service = "";
    
private String style = "";
    
private String content = "";        
    
private String smscid = "";
    
private String moseq = "";
        
    
public SmsData(){}
    
    
    
public SmsData(String content,String mobile,
            String moseq,String passwd,String port,
            String seq,String service,String smscid,
            String spid,String style) {
        
this.content = content;
        
this.mobile = mobile;
        
this.moseq = moseq;
        
this.passwd = passwd;
        
this.port = port;
        
this.seq = seq;
        
this.service = service;
        
this.smscid = smscid;
        
this.spid = spid;
        
this.style = style;
    }

    
public String getContent() {
        
return content;
    }

    
public void setContent(String content) {
        
this.content = content;
    }

    
public String getMobile() {
        
return mobile;
    }

    
public void setMobile(String mobile) {
        
this.mobile = mobile;
    }

    
public String getMoseq() {
        
return moseq;
    }

    
public void setMoseq(String moseq) {
        
this.moseq = moseq;
    }

    
public String getPasswd() {
        
return passwd;
    }

    
public void setPasswd(String passwd) {
        
this.passwd = passwd;
    }

    
public String getPort() {
        
return port;
    }

    
public void setPort(String port) {
        
this.port = port;
    }

    
public String getSeq() {
        
return seq;
    }

    
public void setSeq(String seq) {
        
this.seq = seq;
    }

    
public String getService() {
        
return service;
    }

    
public void setService(String service) {
        
this.service = service;
    }

    
public String getSmscid() {
        
return smscid;
    }

    
public void setSmscid(String smscid) {
        
this.smscid = smscid;
    }

    
public String getSpid() {
        
return spid;
    }

    
public void setSpid(String spid) {
        
this.spid = spid;
    }

    
public String getStyle() {
        
return style;
    }

    
public void setStyle(String style) {
        
this.style = style;
    }

}



commTools.java 部分公共函數
package comm.khan;

import java.util.HashMap;
//import java.util.Iterator;
import javax.servlet.http.*;
import java.util.Enumeration;

public class commTools {

    
public commTools() {
        
// TODO Auto-generated constructor stub
    }

    
/**
     * 
@param args
     
*/
    
public static void main(String[] args) {
        
// TODO Auto-generated method stub

    }


    
/** 取得所有得參數列表 
     * 
@param req  HttpServletRequest
     * 
@return HashMap 返回包含參數列表的HashMap
     
*/
    
public static HashMap getParas(HttpServletRequest req) {
        HashMap hm 
= new HashMap();
        Enumeration ea 
= req.getParameterNames();
        
while (ea.hasMoreElements()) {
            String s 
= (String) ea.nextElement();
            hm.put(s, req.getParameter(s));
        }
        
return hm;
    }

    
/**  取得http head 
     * 
@param req HttpServletRequest
     * 
@return HashMap
     
*/
    
public static HashMap gethead(HttpServletRequest req) {
        HashMap hm 
= new HashMap();
        Enumeration ea 
= req.getHeaderNames();
        
while (ea.hasMoreElements()) {
            String s 
= (String) ea.nextElement();
            hm.put(s, req.getHeader(s));
        }
        
return hm;
    }

    
/** 檢測參數列表中是否存在某個參數 
     * 
@param req HttpServletRequest
     * 
@param para String 參數名
     * 
@return boolean 是否存在這個參數
     
*/
    
public static boolean existPara(HttpServletRequest req, String para) {
        HashMap hm 
= getParas(req);
        
return hm.containsKey(para);
    }

}


HttpSend.java 將處理完的數據發送給用戶提供的web接口
/**
 * 
 
*/
package sms.khan;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
 * 
@author Administrator
 * 
 
*/
public class HttpSend {

    
/**
     * 構造器
     
*/
    
public HttpSend() {

    }

    
private static String log = null;

    
public String connectURL(String dest_url, String commString) {
        String rec_string 
= "";
        URL url 
= null;
        HttpURLConnection urlconn 
= null;
        
try {
            url 
= new URL(dest_url);
            urlconn 
= (HttpURLConnection) url.openConnection();
            urlconn.setRequestProperty(
"content-type""text/plain");
            urlconn.setRequestProperty( 
"User-Agent""Khan HttpConnection request" );
            urlconn.setRequestProperty(
"Content-Language""en-US" );
            urlconn.setRequestMethod(
"POST");
            urlconn.setDoInput(
true);
            urlconn.setDoOutput(
true);
            
            OutputStream out 
= urlconn.getOutputStream();
            
            out.write(commString.getBytes(
"UTF-8"));
            out.flush();
            out.close();
            BufferedReader rd 
= new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
            StringBuffer sb 
= new StringBuffer();
            
int ch;
            
while ((ch = rd.read()) > -1)
                sb.append((
char) ch);
            rec_string 
= sb.toString();
            rd.close();
            urlconn.disconnect();
        } 
catch (Exception e) {
            log 
= String.valueOf(String.valueOf((new StringBuffer("請求錯誤:")).append(e.getMessage()).append(e.toString())));
            System.out.println(
"log = " + log);
        }
        
return rec_string;
    }

    
/**
     * 
@param args
     
*/
    
public static void main(String[] args) {
        String url 
="";
        comm.khan.LoadIni li
=new comm.khan.LoadIni();
        
try{
            url 
= li.readINI("httpServer");
        }
catch(java.io.IOException e){
            e.printStackTrace();
        }
catch(Exception e){
            e.printStackTrace();
        }
        
        HttpSend hc 
= new HttpSend();
        String xml 
= "";
        String s 
= hc.connectURL(url, xml);
        System.out.println(
"Recived:".concat(String.valueOf(String.valueOf(s))));
    }

}


項目需要的lib Resin_lib ,ActiveMQ_lib
項目需要的第三方平臺 Resin 2.19  ActiveMQ 3.2.2
Java sdk 1.5

項目在eclipse 3.12下完成


Resin的配置文件
resin.conf

<caucho.com>
<java compiler="internal" args="-g" work-dir="work"/>


<http-server>
  
<http port="8083"/>
    
<web-app id="/SmsRecv">
      
<app-dir>D:\Develop\eclipse\Workspace\SmsRecv\web</app-dir>
      
<servlet-mapping url-pattern="/servlet/*" servlet-name="invoker"/>
      
<servlet-mapping url-pattern='*.xtp' servlet-name='com.caucho.jsp.XtpServlet'/>
      
<servlet-mapping url-pattern='*.jsp' servlet-name='com.caucho.jsp.JspServlet'/>
    
</web-app>
  
</http-server>
</caucho.com>


config.xml 配置文件的格式,用來進行ip和權限驗證
<?xml version="1.0" encoding="UTF-8"?>
<sp_command version="1.0">
  
<pack_name>sp_config</pack_name>
  
<SpConfig>
      
<spid>khan</spid>
      
<spip>192.18.1.59</spip>
      
<sppwd>966123</sppwd>
  
</SpConfig>
  
<SpConfig>
      
<spid>holly</spid>
      
<spip>192.18.1.122</spip>
      
<sppwd>123456</sppwd>
  
</SpConfig>
</sp_command>


smsmq.ini初始化文件
#header
#Sun Feb 12 22:20:48 CST 2006
url=tcp\://localhost\:61616
durable=false
user=Khan
clientID=null
topic=false
ackMode=1
pwd=966123
subject=SMS.MQ
project=SMSMQ
sleepTime=0
timeToLive=0
HttpServer=http://127.0.0.1:8083/SmsRecv/recv



web.xml web部分布局文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
   "http://java.sun.com/dtd/web-app_2_3.dtd"
>
<web-app>
  
<display-name>SmsRecv</display-name>

  
<servlet>
   
<servlet-name>recv</servlet-name>
   
<servlet-class>sms.khan.recv</servlet-class>
  
</servlet>

  
<servlet-mapping>
    
<servlet-name>recv</servlet-name>
    
<url-pattern>/recv</url-pattern>
  
</servlet-mapping>

  
<resource-ref>
    
<res-ref-name>jdbc/Sql</res-ref-name>
    
<res-type>javax.sql.DataSource</res-type>
    
<init-param driver-name="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
    
<init-param url="jdbc:microsoft:sqlserver://Khan:1433;databaseName=WapServer"/>
    
<init-param user="sa"/>
    
<init-param password=""/>
    
<init-param max-connections="20"/>
    
<init-param max-idle-time="30"/>
  
</resource-ref>

</web-app>

posted on 2006-02-13 17:41 Khan 閱讀(11420) 評論(3)  編輯 收藏 引用 所屬分類: 跨平臺開發Java

評論

# re: 搞定了Jms的ObjectMessage對象傳遞 ,這個項目可以告一段落了  回復  更多評論   

偶簽到一下,支持一下24操作鍵盤的辛苦
2006-02-13 20:22 | 金屬M-zone

# re: 搞定了Jms的ObjectMessage對象傳遞 ,這個項目可以告一段落了  回復  更多評論   

我之前也做到類似的項目

不過我使用的是IBM Websphere MQ,因為在C++和Java之間傳遞消息,所以沒有采取Serlizable的方式,將消息體Base64編碼后,發送出去。
2006-02-14 09:52 | 小明

# re: 搞定了Jms的ObjectMessage對象傳遞 ,這個項目可以告一段落了  回復  更多評論   

好象記得websphere mq的核心也是用c寫的, 不同語言的對象傳遞確實比較麻煩
2006-02-14 11:19 | Khan's Notebook
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            雨宫琴音一区二区在线| 免费视频最近日韩| 99av国产精品欲麻豆| 欧美专区在线观看一区| 欧美伦理a级免费电影| 在线观看91精品国产麻豆| 亚洲欧美韩国| 亚洲欧洲日产国码二区| 一区二区三区视频在线观看| 美女视频网站黄色亚洲| 韩国av一区二区三区四区| 久久99在线观看| 亚洲图色在线| 欧美视频一区二区三区…| 亚洲免费av电影| 久久综合伊人77777| 亚洲欧美日韩一区| 欧美午夜一区二区福利视频| 一区二区欧美日韩视频| 最新国产成人在线观看| 欧美激情bt| 一区二区三区视频在线| 99视频国产精品免费观看| 欧美日韩国产一级片| 日韩视频二区| 亚洲麻豆av| 国产精品二区在线观看| 亚洲欧美www| 午夜激情综合网| 国产亚洲一区二区三区| 久久久久久午夜| 久久免费的精品国产v∧| 亚洲国产欧美国产综合一区| 亚洲国产精品一区制服丝袜| 欧美激情精品久久久| 久久精品一区四区| 国产在线欧美| 美女久久网站| 欧美高清在线一区| 亚洲视频在线观看三级| 一区二区三区 在线观看视频| 国产精品啊v在线| 久久久91精品国产一区二区精品| 久久久久国产一区二区| 亚洲黄一区二区三区| 亚洲精品日韩激情在线电影 | 久久男人av资源网站| 亚洲国产精品黑人久久久| 亚洲第一网站| 国产精品久久久久久久一区探花| 欧美亚洲一级片| 久久久久一区| 亚洲视频在线观看| 久久er精品视频| 99精品热视频| 欧美制服第一页| 日韩视频一区二区三区在线播放| 在线亚洲欧美视频| 在线观看91精品国产麻豆| 亚洲最新色图| 在线免费高清一区二区三区| 一本色道久久综合亚洲91| 狠狠色丁香久久婷婷综合丁香| 亚洲高清视频一区二区| 国产欧美日韩在线播放| 亚洲精品视频中文字幕| 在线播放豆国产99亚洲| 亚洲午夜久久久久久尤物| 在线成人中文字幕| 在线视频欧美日韩精品| 亚洲黄页一区| 欧美一区激情| 亚洲一区精品电影| 男人的天堂亚洲在线| 欧美中在线观看| 欧美精品一区二区高清在线观看| 久久成年人视频| 欧美午夜精品一区| 亚洲激精日韩激精欧美精品| 国产在线欧美| 欧美一区二区国产| 亚洲与欧洲av电影| 欧美日本不卡高清| 亚洲国产精品成人va在线观看| 国产手机视频精品| 亚洲影院一区| 亚洲欧美第一页| 91久久中文| 一区二区亚洲精品| 亚洲欧美美女| 亚洲欧美中文字幕| 欧美视频在线视频| 9色porny自拍视频一区二区| 亚洲精品欧洲精品| 欧美.www| 亚洲电影自拍| 亚洲国内在线| 欧美成人视屏| 91久久中文字幕| 欧美性jizz18性欧美| 欧美成人一区二区三区片免费| 国产一级久久| 欧美在线一区二区三区| 久久精品一区四区| 国产一区再线| 久久免费视频一区| 久久人人97超碰精品888| 国产一区在线免费观看| 性欧美在线看片a免费观看| 久久精品国产2020观看福利| 国产偷国产偷亚洲高清97cao| 亚洲综合色自拍一区| 欧美一区2区视频在线观看| 国产精品久久午夜| 亚洲欧美精品一区| 久久精品在线观看| 国产综合色在线| 可以免费看不卡的av网站| 亚洲高清影视| 亚洲欧美国产77777| 国产亚洲精品福利| 免费一级欧美在线大片| 亚洲精品资源| 欧美在线91| 亚洲大胆人体视频| 欧美日韩精品在线播放| 亚洲一区免费| 免费成人在线视频网站| 一本色道88久久加勒比精品 | 欧美黄色成人网| 亚洲一区在线观看视频| 久久天天躁夜夜躁狠狠躁2022| 亚洲国产女人aaa毛片在线| 欧美日韩国产综合视频在线观看中文| 日韩一级黄色av| 久久精品盗摄| 一本久久综合| 欧美日本一区二区三区| 中日韩在线视频| 蜜桃av一区| 午夜精品成人在线| 在线免费观看成人网| 国产精品成人免费精品自在线观看| 亚洲欧美影音先锋| 欧美电影免费观看大全| 午夜精品在线观看| 亚洲日本成人| 国产日本欧美在线观看| 欧美人与禽猛交乱配| 久久国产精品久久w女人spa| 亚洲理论在线| 欧美电影免费| 欧美在线观看视频在线| 亚洲精品欧美激情| 国模大胆一区二区三区| 国产精品成人一区| 欧美成人精品在线| 久久成人这里只有精品| 亚洲午夜电影网| 亚洲精品久久久久中文字幕欢迎你| 久久精品首页| 亚洲综合激情| 国产精品99久久99久久久二8| 亚洲国产91精品在线观看| 国产精品一区一区| 欧美色图麻豆| 欧美日本韩国一区| 美女日韩在线中文字幕| 久久免费高清视频| 久久久久久久高潮| 欧美在线视频网站| 久久琪琪电影院| 午夜国产精品视频| 一区二区三区视频免费在线观看| 亚洲国产人成综合网站| 国际精品欧美精品| 国内精品久久久久影院优| 国产精品推荐精品| 国产精品亚洲综合久久| 国产精品二区二区三区| 国产精品家庭影院| 国产精品青草久久| 国产精品一区二区久久久久| 国产精品播放| 国产精品日韩在线播放| 欧美日韩国产大片| 欧美日韩在线一区二区| 欧美日韩在线一区| 国产精品电影观看| 国产欧美日韩在线播放| 国产在线精品自拍| 亚洲欧洲精品成人久久奇米网| 亚洲欧洲日夜超级视频| 99视频超级精品| 亚洲欧美国产va在线影院| 久久久久一区二区| 亚洲风情亚aⅴ在线发布| 日韩小视频在线观看| 国产精品99久久久久久www| 亚洲欧美日韩精品久久久久|