View Javadoc

1   // ========================================================================
2   // Copyright 2007 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // Licensed under the Apache License, Version 2.0 (the "License");
5   // you may not use this file except in compliance with the License.
6   // You may obtain a copy of the License at 
7   // http://www.apache.org/licenses/LICENSE-2.0
8   // Unless required by applicable law or agreed to in writing, software
9   // distributed under the License is distributed on an "AS IS" BASIS,
10  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  // See the License for the specific language governing permissions and
12  // limitations under the License.
13  //========================================================================
14  
15  package org.cometd.demo;
16  
17  
18  import java.util.Set;
19  
20  import org.mortbay.cometd.AbstractBayeux;
21  import org.mortbay.cometd.ClientImpl;
22  import org.mortbay.cometd.continuation.ContinuationCometdServlet;
23  import org.mortbay.cometd.ext.TimesyncExtension;
24  import org.mortbay.jetty.Server;
25  import org.mortbay.jetty.bio.SocketConnector;
26  import org.mortbay.jetty.handler.ContextHandlerCollection;
27  import org.mortbay.jetty.handler.MovedContextHandler;
28  import org.mortbay.jetty.nio.SelectChannelConnector;
29  import org.mortbay.jetty.security.SslSelectChannelConnector;
30  import org.mortbay.jetty.security.SslSocketConnector;
31  import org.mortbay.jetty.servlet.Context;
32  import org.mortbay.jetty.servlet.ServletHolder;
33  import org.mortbay.resource.Resource;
34  import org.mortbay.resource.ResourceCollection;
35  import org.mortbay.thread.QueuedThreadPool;
36  
37  import org.cometd.Message;
38  
39  
40  /* ------------------------------------------------------------ */
41  /** Main class for cometd demo.
42   * 
43   * @author gregw
44   *
45   */
46  public class CometdDemo
47  {
48      private static int _testHandshakeFailure;
49      
50      /* ------------------------------------------------------------ */
51      /**
52       * @param args
53       */
54      public static void main(String[] args) throws Exception
55      {
56          int port = args.length==0?8080:Integer.parseInt(args[0]);
57       
58          String base="../../..";
59          
60          // Manually contruct context to avoid hassles with webapp classloaders for now.
61          Server server = new Server();
62          QueuedThreadPool qtp = new QueuedThreadPool();
63          qtp.setMinThreads(5);
64          qtp.setMaxThreads(200);
65          server.setThreadPool(qtp);
66          
67          SelectChannelConnector connector=new SelectChannelConnector();
68          // SocketConnector connector=new SocketConnector();
69          connector.setPort(port);
70          server.addConnector(connector);
71          SocketConnector bconnector=new SocketConnector();
72          bconnector.setPort(port+1);
73          server.addConnector(bconnector);
74          
75          SslSelectChannelConnector connector2=new SslSelectChannelConnector();
76          // SslSocketConnector connector2=new SslSocketConnector();
77          connector2.setPort(port-80+443);
78          connector2.setKeystore(base+"/etc/keystore");
79          connector2.setPassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
80          connector2.setKeyPassword("OBF:1u2u1wml1z7s1z7a1wnl1u2g");
81          connector2.setTruststore(base+"/etc/keystore");
82          connector2.setTrustPassword("OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4");
83          server.addConnector(connector2);  
84  
85          ContextHandlerCollection contexts = new ContextHandlerCollection();
86          server.setHandler(contexts);
87          
88          MovedContextHandler moved = new MovedContextHandler(contexts,"/","/cometd");
89          moved.setDiscardPathInfo(true);
90          
91          Context context = new Context(contexts,"/cometd",Context.NO_SECURITY|Context.SESSIONS);
92          
93          context.setBaseResource(new ResourceCollection(new Resource[]
94          {
95              Resource.newResource("./src/main/webapp/"),
96              Resource.newResource("./target/cometd-demo-6.1-SNAPSHOT/"),
97          }));
98          
99          // Demo bayeux session manager
100         // context.getSessionHandler().setSessionManager(new BayeuxSessionManager());
101         // context.addServlet(com.acme.SessionDump.class,"/session");
102         // context.addServlet(com.acme.Dump.class,"/dump");
103         
104         // Cometd servlet
105         ContinuationCometdServlet cometd_servlet=new ContinuationCometdServlet();
106         ServletHolder cometd_holder = new ServletHolder(cometd_servlet);
107         cometd_holder.setInitParameter("filters","/WEB-INF/filters.json");
108         cometd_holder.setInitParameter("timeout","180000");
109         cometd_holder.setInitParameter("interval","100");
110         cometd_holder.setInitParameter("maxInterval","60000");
111         cometd_holder.setInitParameter("multiFrameInterval","1500");
112         cometd_holder.setInitParameter("directDeliver","true");
113         cometd_holder.setInitParameter("logLevel","1");
114         
115         context.addServlet(cometd_holder, "/cometd/*");
116         context.addServlet("org.mortbay.jetty.servlet.DefaultServlet", "/");
117         context.addEventListener(new BayeuxServicesListener());
118         
119         server.start();
120         
121         AbstractBayeux bayeux = cometd_servlet.getBayeux();
122         
123         bayeux.setSecurityPolicy(new AbstractBayeux.DefaultPolicy(){
124             public boolean canHandshake(Message message)
125             {
126                 if (_testHandshakeFailure<0)
127                 {
128                     _testHandshakeFailure++;
129                     return false;
130                 }
131                 return true;
132             }
133             
134         });
135         
136         while (true)
137         {
138             Thread.sleep(2000);
139             Set<String> ids=bayeux.getClientIDs();
140             ClientImpl[] clients=new ClientImpl[ids.size()];
141             int i=0;
142             for (String id : ids)
143             {
144                 clients[i]=(ClientImpl)bayeux.getClient(id);
145                 i++;
146             }
147             i=0;
148         }
149     }
150 }