1 /*
2 * Copyright (c) 1998-2002 The Jgroup Team.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
16 *
17 */
18
19 package jgroup.core;
20
21 import java.lang.reflect.InvocationHandler;
22 import java.rmi.Remote;
23 import java.rmi.RemoteException;
24 import java.rmi.server.ExportException;
25
26 import jgroup.core.registry.DependableRegistry.RegistryEntry;
27
28
29 /**
30 * This interface is used to obtain the identifier of the current
31 * EGMI invocation and to get a registry entry and bootstrap handler
32 * for the dependable registry.
33 *
34 * @author Alberto Montresor
35 * @author Hein Meling
36 * @since Jgroup 0.8
37 */
38 public interface ExternalGMIService
39 extends Layer
40 {
41
42 ////////////////////////////////////////////////////////////////////////////////////////////
43 // Nested interface
44 ////////////////////////////////////////////////////////////////////////////////////////////
45
46 /**
47 * This interface must be implemented by all EGMI services that can
48 * be used by the bootstrap mechanism.
49 *
50 * @author Tor Arve Stangeland
51 */
52 public interface BootstrapInvocationHandler
53 extends InvocationHandler, Remote
54 {
55
56 /**
57 * Merge this handler with the given handler.
58 *
59 * @param handler
60 * <code>BootstrapInvoationHandler</code> handler to merge with
61 *
62 * @throws JgroupException if merge failed for some reason
63 */
64 public void merge(BootstrapInvocationHandler handler)
65 throws JgroupException, RemoteException;
66
67 /**
68 * Return the invocation handler type
69 */
70 public String getType()
71 throws RemoteException;
72
73 } // END of BootstrapInvocationHandler
74
75
76 ////////////////////////////////////////////////////////////////////////////////////////////
77 // Interface methods
78 ////////////////////////////////////////////////////////////////////////////////////////////
79
80 /**
81 * Returns the invocation identifier for the current external group
82 * method invocation.
83 */
84 public IID getIdentifier();
85
86 /**
87 * Returns the registry entry type required for this implementation
88 * of the external GMI service.
89 */
90 public RegistryEntry getRegistryEntry(String serviceName)
91 throws JgroupException;
92
93 /**
94 * Returns an <code>BootstrapInvocationHandler</code> that can be bound
95 * to a normal Java RMI registry instance and later merged with others.
96 */
97 public BootstrapInvocationHandler getBootstrapHandler()
98 throws JgroupException;
99
100 /**
101 * Returns a proxy exported with the <code>BasicJeriExporter</code>.
102 *
103 * @param impl the remote object to be exported
104 * @return the exported proxy
105 * @throws JgroupException if the object could not be exported
106 */
107 public Remote getProxy(Remote impl)
108 throws ExportException;
109
110 } // END ExternalGMIService