KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > ubermq > jms > server > DefaultProtocol


1 /*
2  * Copyright (c) 2004 Rhombus Technologies, Inc.
3  * All rights reserved.
4  */

5 package com.ubermq.jms.server;
6
7 import java.io.IOException JavaDoc;
8 import java.net.*;
9 import java.nio.channels.Selector JavaDoc;
10
11 import com.ubermq.jms.common.MessageConstants;
12 import com.ubermq.kernel.*;
13 import com.ubermq.kernel.IConnectionInfo.ConnectionAcceptor;
14 import com.ubermq.util.Utility;
15
16
17 /**
18  * A standard port based protocol implementation. Can be started on
19  * any port and uses the datagram factory supplied in the constructor.
20  */

21 public class DefaultProtocol
22     implements Protocol
23 {
24     private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(DefaultProtocol.class);
25     
26     public static InetSocketAddress getBindAddress(String JavaDoc bindTo, int port)
27     {
28         InetSocketAddress bindAddr = null;
29         try
30         {
31             if (bindTo == null)
32                 bindAddr = new InetSocketAddress(InetAddress.getLocalHost(), port);
33             else if (bindTo != null)
34                 bindAddr = new InetSocketAddress(InetAddress.getByName(bindTo), port);
35         }
36         catch (UnknownHostException e)
37         {
38             log.error("Unable to resolve bind address", e);
39             throw new IllegalStateException JavaDoc(e.getMessage());
40         }
41
42         return bindAddr;
43     }
44
45     public static InetSocketAddress getConfiguredBindAddress()
46     {
47         return DefaultProtocol.getBindAddress(Configurator.getProperty(ConfigConstants.SERVER_BIND_ADDRESS),
48                               Integer.valueOf(Configurator.getProperty(ConfigConstants.SERVER_PORT,
49                                                                        String.valueOf(MessageConstants.DEFAULT_PORT))).intValue());
50     }
51
52     private IDatagramFactory factory;
53     private InetSocketAddress bindAddress;
54     private AcceptThread acceptThread;
55
56     public DefaultProtocol(IDatagramFactory factory, InetSocketAddress bindAddress)
57     {
58         this.factory = factory;
59         this.bindAddress = bindAddress;
60     }
61
62     public boolean isEnabled()
63     {
64         return true;
65     }
66
67     /**
68      * Returns the socket address that this protocol is bound to.
69      */

70     public InetSocketAddress getBindAddress()
71     {
72         return bindAddress;
73     }
74
75     public void start(IMessageProcessor datagramProcessor,
76                       IConnectionInfo.ConnectionAcceptor a)
77         throws java.io.IOException JavaDoc
78     {
79         try
80         {
81             acceptThread = new AcceptThread(Selector.open(),
82                                             a,
83                                             bindAddress,
84                                             factory,
85                                             datagramProcessor);
86             acceptThread.start();
87         }
88         catch(NumberFormatException JavaDoc nfe)
89         {
90             // if the server port is blank, we don't start an
91
// acceptor thread. we assume pipe only in this case.
92
}
93     }
94
95     public void stop()
96     {
97         acceptThread.interrupt();
98         try
99         {
100             acceptThread.join();
101         }
102         catch (InterruptedException JavaDoc e) {}
103     }
104
105     public String JavaDoc toString()
106     {
107         return "UberMQ " + getServiceURI().toString();
108     }
109
110     /**
111      * Returns the service URI for this protocol.
112      *
113      * @return an URI describing how to connect to
114      * this protocol, or null if a URI cannot be used.
115      */

116     public URI getServiceURI()
117     {
118         return getServiceURI("ubermq", MessageConstants.DEFAULT_PORT);
119     }
120
121     protected URI getServiceURI(String JavaDoc scheme, int defaultPort)
122     {
123         if (bindAddress.getPort() == defaultPort)
124             return URI.create(scheme + "://" + bindAddress.getHostName());
125         else
126             return URI.create(scheme + "://" + bindAddress.getHostName() + ":" + bindAddress.getPort());
127     }
128 }
Popular Tags