Source code: org/mule/providers/vm/VMConnector.java
1 /*
2 * $Header: /cvsroot/mule/mule/src/java/org/mule/providers/vm/VMConnector.java,v 1.10 2003/10/20 21:44:38 rossmason Exp $
3 * $Revision: 1.10 $
4 * $Date: 2003/10/20 21:44:38 $
5 * ------------------------------------------------------------------------------------------------------
6 *
7 * Copyright (c) Cubis Limited. All rights reserved.
8 * http://www.cubis.co.uk
9 *
10 * The software in this package is published under the terms of the BSD
11 * style license a copy of which has been included with this distribution in
12 * the LICENSE.txt file.
13 *
14 */
15 package org.mule.providers.vm;
16
17 import java.util.HashMap;
18 import java.util.Iterator;
19 import java.util.Map;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.mule.MuleException;
24 import org.mule.providers.AbstractConnector;
25 import org.mule.umo.UMOEvent;
26 import org.mule.umo.UMOException;
27 import org.mule.umo.UMOProviderDescriptor;
28 import org.mule.umo.UMOSession;
29 import org.mule.umo.provider.UMOMessageAdapter;
30
31 /**
32 * <p><code>VMConnector</code> A simple connector wrapper to allow a Mule session to
33 * be accessed from a connector
34 *
35 * @author <a href="mailto:ross.mason@cubis.co.uk">Ross Mason</a>
36 * @version $Revision: 1.10 $
37 *
38 */
39 public class VMConnector extends AbstractConnector
40 {
41 /** A map of all receivers registered with the connector */
42 Map receivers = new HashMap();
43
44 /** The logger for this class */
45 private static final transient Log log = LogFactory.getLog(VMConnector.class);
46
47 /**
48 * Default constructor
49 */
50 public VMConnector()
51 {
52 }
53
54 /* (non-Javadoc)
55 * @see org.mule.providers.AbstractConnector#create()
56 */
57 public void create() throws Exception
58 {
59
60 }
61
62 /* (non-Javadoc)
63 * @see org.mule.umo.provider.UMOConnector#dispatch(org.mule.umo.UMOEvent)
64 */
65 public void dispatch(UMOEvent event) throws Exception
66 {
67 //UMOProviderDescriptor provider = event.getProvider();
68 log.trace("VMConnector:dispatchEvent entered");
69 MuleMessageReceiver receiver = getReceiver(event);
70 receiver.onEvent(event);
71
72 log.trace("VMConnector:dispatchEvent on subject " + event.getProvider().getEndpoint());
73 }
74
75
76 /* (non-Javadoc)
77 * @see org.mule.umo.provider.UMOConnector#send(org.mule.umo.UMOEvent)
78 */
79 public UMOEvent send(UMOEvent event) throws Exception
80 {
81 //@TODO properties are currently not being used
82 log.trace("VMConnector:sendEvent entered");
83 UMOEvent retEvent = null;
84
85 MuleMessageReceiver receiver = getReceiver(event);
86 retEvent = receiver.onCall(event);
87 return retEvent;
88 }
89
90 /**
91 * Obtains a receiver for a particular endpoint as specified in the provider in the event
92 * @param event the event that determines which endpoint to lookup on
93 * @return the corresponding message receiver
94 * @throws UMOException if the receiver is not found for the event
95 */
96 private MuleMessageReceiver getReceiver(UMOEvent event) throws UMOException
97 {
98
99 MuleMessageReceiver receiver = null;
100 Object temp = receivers.get(event.getProvider().getEndpoint());
101 if (temp != null)
102 {
103 receiver = (MuleMessageReceiver) temp;
104 }
105 else
106 {
107 throw new UMOException("Failed to find listener for endpoint: " + event.getProvider().getEndpoint());
108 }
109 return receiver;
110 }
111
112 /* (non-Javadoc)
113 * @see org.mule.umo.provider.UMOConnector#registerListener(org.mule.umo.UMOSession, org.mule.umo.UMOProviderDescriptor)
114 */
115 public void registerListener(UMOSession session, UMOProviderDescriptor provider) throws Exception
116 {
117
118 if (session != null)
119 {
120 MuleMessageReceiver mmr = new MuleMessageReceiver();
121 mmr.create(session, provider, session.getDescriptor().getExceptionStrategy());
122 receivers.put(provider.getEndpoint(), mmr);
123
124 }
125 else
126 {
127 throw new MuleException("Listener cannot be null on the VMConnector");
128 }
129
130 }
131
132 /* (non-Javadoc)
133 * @see org.mule.umo.provider.UMOConnector#removeListener(org.mule.umo.UMOSession, org.mule.umo.UMOProviderDescriptor)
134 */
135 public void removeListener(UMOSession session, UMOProviderDescriptor provider) throws Exception
136 {
137 receivers.remove(provider.getEndpoint());
138 }
139
140 /* (non-Javadoc)
141 * @see org.mule.providers.AbstractConnector#stopConnector()
142 */
143 public synchronized void stopConnector()
144 {
145 // for (Iterator i = receivers.values().iterator(); i.hasNext();) {
146 // ((UMOSession) i.next()).stop();
147 // }
148 }
149
150 /* (non-Javadoc)
151 * @see org.mule.providers.AbstractConnector#startConnector()
152 */
153 public synchronized void startConnector()
154 {
155 // for (Iterator i = receivers.values().iterator(); i.hasNext();) {
156 // ((UMOSession) i.next()).start();
157 // }
158 }
159
160
161 /* (non-Javadoc)
162 * @see org.mule.umo.provider.UMOConnector#getMessageAdapter(java.lang.Object)
163 */
164 public UMOMessageAdapter getMessageAdapter(Object message) throws Exception
165 {
166 MuleMessageAdapter adapter = new MuleMessageAdapter();
167 adapter.setMessage(message);
168 return adapter;
169 }
170
171
172 /* (non-Javadoc)
173 * @see org.mule.umo.provider.UMOConnector#getProtocol()
174 */
175 public String getProtocol()
176 {
177 return "VM";
178 }
179
180
181 /* (non-Javadoc)
182 * @see org.mule.providers.AbstractConnector#shutdownConnector()
183 */
184 protected void shutdownConnector() throws Exception
185 {
186 for (Iterator i = receivers.values().iterator(); i.hasNext();)
187 {
188 ((UMOSession) i.next()).destroy();
189 }
190
191 }
192
193 }