View Javadoc

1   /**********************************************************************
2    * EJServerRegistry.java
3    * created on 18.05.2007 by netseeker
4    * $Id: EJServerRegistry.java,v 1.2 2007/05/28 12:42:38 netseeker Exp $
5    * $Log: EJServerRegistry.java,v $
6    * Revision 1.2  2007/05/28 12:42:38  netseeker
7    * *** empty log message ***
8    *
9    * Revision 1.1  2007/05/27 22:13:09  netseeker
10   * *** empty log message ***
11   *
12   * Revision 1.1  2007/05/22 22:50:46  netseeker
13   * added In-JVM processing mode, fixed a minor bug within the serverside detection of ADAPTER_STRATEGY_DIRECT.
14   *
15   *
16   * ====================================================================
17   *
18   *  Copyright 2005-2006 netseeker aka Michael Manske
19   *
20   *  Licensed under the Apache License, Version 2.0 (the "License");
21   *  you may not use this file except in compliance with the License.
22   *  You may obtain a copy of the License at
23   *
24   *      http://www.apache.org/licenses/LICENSE-2.0
25   *
26   *  Unless required by applicable law or agreed to in writing, software
27   *  distributed under the License is distributed on an "AS IS" BASIS,
28   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29   *  See the License for the specific language governing permissions and
30   *  limitations under the License.
31   * ====================================================================
32   *
33   * This file is part of the EJOE framework.
34   * For more information on the author, please see
35   * <http://www.manskes.de/>.
36   *
37   *********************************************************************/
38  package de.netseeker.ejoe.core;
39  
40  import java.util.Collections;
41  import java.util.HashMap;
42  import java.util.Iterator;
43  import java.util.Map;
44  
45  import de.netseeker.ejoe.EJServer;
46  import de.netseeker.ejoe.IServerInfo;
47  
48  /***
49   * A simple registry wherein all known local EJServers are registered, so that clients lookup an EJServer within the
50   * same JVM.
51   * 
52   * @author netseeker
53   * @since 0.3.9.3
54   */
55  public class EJServerRegistry
56  {
57      private static EJServerRegistry instance = new EJServerRegistry();
58  
59      private Map                     registry = Collections.synchronizedMap( new HashMap() );
60  
61      private EJServerRegistry()
62      {
63      }
64  
65      /***
66       * @return
67       */
68      public static EJServerRegistry getInstance()
69      {
70          return instance;
71      }
72  
73      /*
74       * (non-Javadoc)
75       * 
76       * @see de.netseeker.ejoe.ServerRegistry#lookup(java.lang.String)
77       */
78      public EJServer lookup( String connectionInfo )
79      {
80          return (EJServer) registry.get( connectionInfo );
81      }
82  
83      /*
84       * (non-Javadoc)
85       * 
86       * @see de.netseeker.ejoe.ServerRegistry#lookup()
87       */
88      public synchronized EJServer lookup()
89      {
90          EJServer server = null;       
91  
92          if ( registry.size() > 0 )
93          {
94              Iterator it = registry.values().iterator();
95  
96              while ( it.hasNext() )
97              {
98                  server = (EJServer) registry.values().iterator().next();
99                  if ( server.isRunning() )
100                 {
101                     return server;
102                 }
103                 else
104                 {
105                     deRegister( server );
106                 }
107             }
108         }
109 
110         return server;
111     }
112 
113     /*
114      * (non-Javadoc)
115      * 
116      * @see de.netseeker.ejoe.ServerRegistry#register(de.netseeker.ejoe.EJServer)
117      */
118     public void register( EJServer ejserver )
119     {
120         IServerInfo serverInfo = ejserver.getServerInfo();
121         if ( ejserver.isRunning() )
122         {
123             registry.put( serverInfo.getInterface() + ":" + serverInfo.getPort(), ejserver );
124         }
125     }
126 
127     /*
128      * (non-Javadoc)
129      * 
130      * @see de.netseeker.ejoe.ServerRegistry#deRegister(de.netseeker.ejoe.EJServer)
131      */
132     public void deRegister( EJServer ejserver )
133     {
134         IServerInfo serverInfo = ejserver.getServerInfo();
135         registry.remove( serverInfo.getInterface() + ":" + serverInfo.getPort() );
136     }
137 
138 }