View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.api.registry;
8   
9   import org.mule.api.lifecycle.Disposable;
10  import org.mule.api.lifecycle.Initialisable;
11  import org.mule.api.lifecycle.LifecycleException;
12  
13  import java.util.Collection;
14  import java.util.Map;
15  
16  public interface Registry extends Initialisable, Disposable
17  {
18      // /////////////////////////////////////////////////////////////////////////
19      // Lookup methods - these should NOT create a new object, only return existing ones
20      // /////////////////////////////////////////////////////////////////////////
21  
22      /**
23       * Alias method performing the lookup, here to simplify syntax when called from dynamic languages.
24       */
25      <T> T get(String key);
26  
27      /** 
28       * Look up a single object by name. 
29       * @return object or null if not found
30       */
31      <T> T lookupObject(String key);
32  
33      /**
34       * Look up all objects of a given type.
35       *
36       * @return collection of objects or empty collection if none found
37       */
38      <T> Collection<T> lookupObjects(Class<T> type);
39  
40      /**
41       * Look up all objects of a given type that lifecycle should be applied to. This
42       * method differs from {@link #lookupObjects(Class)} in that it allows
43       * implementations to provide an alternative implementation of lookup for
44       * lifecycle. For example only returning pre-existing objects and not creating
45       * new ones on the fly.
46       * 
47       * @return collection of objects or empty collection if none found
48       */
49      <T> Collection<T> lookupObjectsForLifecycle(Class<T> type);
50      
51      /**
52       * Look up a single object by type.
53       *
54       * @return object or null if not found
55       * @throws RegistrationException if more than one object is found.
56       */
57      <T> T lookupObject(Class<T> clazz) throws RegistrationException;
58  
59      /**
60       * @return key/object pairs
61       */
62      <T> Map<String, T> lookupByType(Class<T> type);
63  
64      // /////////////////////////////////////////////////////////////////////////
65      // Registration methods
66      // /////////////////////////////////////////////////////////////////////////
67  
68      /**
69       * Registers an object in the registry with a key.
70       * @param key the key to store the value against.  This is a non-null value
71       * @param value the object to store in the registry. This is a non-null value
72       * @throws RegistrationException if an object with the same key already exists
73       */
74      void registerObject(String key, Object value) throws RegistrationException;
75  
76      /**
77       * Registers an object in the registry with a key.
78       * @param key the key to store the value against.  This is a non-null value
79       * @param value the object to store in the registry. This is a non-null value
80       * @param metadata an implementation specific argument that can be passed into the method
81       * @throws RegistrationException if an object with the same key already exists
82       */
83      void registerObject(String key, Object value, Object metadata) throws RegistrationException;
84  
85      /**
86       * Registers a Map of objects into the registry
87       * @param objects a map of key value pairs, each will individually be registered in the registry
88       * @throws RegistrationException if an object with the same key already exists
89       */
90      void registerObjects(Map<String, Object> objects) throws RegistrationException;
91  
92      /**
93       * Will remove an object by name from the registry. By default the registry must apply all remaining lifecycle phases
94       * to the object when it is removed.
95       *
96       * @param key the name or key of the object to remove from the registry
97       * @throws RegistrationException if there is a problem unregistering the object. Typically this will be because 
98       * the object's lifecycle threw an exception
99       */
100     void unregisterObject(String key) throws RegistrationException;
101 
102     /**
103      * Will remove an object by name from the registry. By default the registry must apply all remaining lifecycle phases
104      * to the object when it is removed.
105      *
106      * @param key the name or key of the object to remove from the registry
107      * @param metadata an implementation specific argument that can be passed into the method
108      * @throws RegistrationException if there is a problem unregistering the object. Typically this will be because
109      * the object's lifecycle threw an exception
110      */
111     void unregisterObject(String key, Object metadata) throws RegistrationException;
112 
113     // /////////////////////////////////////////////////////////////////////////
114     // Registry Metadata
115     // /////////////////////////////////////////////////////////////////////////
116 
117     String getRegistryId();
118 
119     //TODO should this really be here
120     void fireLifecycle(String phase) throws LifecycleException;
121 
122     boolean isReadOnly();
123 
124     boolean isRemote();
125 }