| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package flex.messaging.services.remoting; |
| |
| import flex.management.runtime.messaging.services.remoting.RemotingDestinationControl; |
| import flex.messaging.FactoryDestination; |
| import flex.messaging.MessageBroker; |
| import flex.messaging.MessageException; |
| import flex.messaging.util.MethodMatcher; |
| import flex.messaging.log.LogCategories; |
| import flex.messaging.services.RemotingService; |
| import flex.messaging.services.Service; |
| |
| /** |
| * A logical reference to a RemotingDestination. |
| */ |
| public class RemotingDestination extends FactoryDestination |
| { |
| static final long serialVersionUID = -8454338922948146048L; |
| /** Log category for <code>RemotingDestination</code>. */ |
| public static final String LOG_CATEGORY = LogCategories.SERVICE_REMOTING; |
| |
| private static final String REMOTING_SERVICE_CLASS = "flex.messaging.services.RemotingService"; |
| |
| // errors |
| public static final int NO_MESSAGE_BROKER = 10163; |
| private static final int NO_REMOTING_SERVICE = 10657; |
| |
| // RemotingDestination internal |
| private MethodMatcher methodMatcher; |
| |
| private RemotingDestinationControl controller; |
| |
| //-------------------------------------------------------------------------- |
| // |
| // Constructor |
| // |
| //-------------------------------------------------------------------------- |
| |
| /** |
| * Constructs an unmanaged <code>RemotingDestination</code> instance. |
| */ |
| public RemotingDestination() |
| { |
| this(false); |
| } |
| |
| /** |
| * Constructs a <code>RemotingDestination</code> with the indicated management. |
| * |
| * @param enableManagement <code>true</code> if the <code>RemotingDestination</code> |
| * is manageable; otherwise <code>false</code>. |
| */ |
| public RemotingDestination(boolean enableManagement) |
| { |
| super(enableManagement); |
| } |
| |
| /** |
| * Retrieves the RemotingDestination for the supplied server id. If serverId |
| * is null, the default MessageBroker instance is returned. You use this |
| * version of this method to retrieve a DataDestination if you are not in the |
| * context of processing a current message when you need the RemotingDestination. |
| * |
| * @param serverId the id of the server containing the remoting destination to be retrieved. |
| * @param destinationName the name of the remoting destination to be retrieved. |
| * |
| * @return remoting destination corresponding to the supplied server id and destination name |
| */ |
| public static RemotingDestination getRemotingDestination(String serverId, String destinationName) |
| { |
| MessageBroker broker = MessageBroker.getMessageBroker(serverId); |
| |
| if (broker == null) |
| { |
| // Unable to locate a MessageBroker initialized with server id ''{0}'' |
| MessageException me = new MessageException(); |
| me.setMessage(NO_MESSAGE_BROKER, new Object[] { serverId }); |
| throw me; |
| } |
| |
| RemotingService rs = (RemotingService) broker.getServiceByType(REMOTING_SERVICE_CLASS); |
| if (rs == null) |
| { |
| // MessageBroker with server id ''{0}'' does not contain a service with class flex.messaging.remoting.RemotingService |
| MessageException me = new MessageException(); |
| me.setMessage(NO_REMOTING_SERVICE, new Object[] { serverId }); |
| throw me; |
| } |
| |
| return (RemotingDestination) rs.getDestination(destinationName); |
| } |
| |
| |
| //-------------------------------------------------------------------------- |
| // |
| // Public Getters and Setters for Destination properties |
| // |
| //-------------------------------------------------------------------------- |
| |
| /** |
| * Returns the log category of the <code>RemotingDestination</code>. |
| * |
| * @return The log category of the component. |
| */ |
| public String getLogCategory() |
| { |
| return LOG_CATEGORY; |
| } |
| |
| /** |
| * Casts the <code>Service</code> into <code>RemotingService</code> |
| * and calls super.setService. |
| * |
| * @param service the <code>RemotingService</code> to associate with this destination. |
| */ |
| public void setService(Service service) |
| { |
| RemotingService remotingService = (RemotingService)service; |
| super.setService(remotingService); |
| setMethodMatcher(remotingService.getMethodMatcher()); |
| } |
| |
| //-------------------------------------------------------------------------- |
| // |
| // Other public APIs |
| // |
| //-------------------------------------------------------------------------- |
| /** |
| * |
| */ |
| public MethodMatcher getMethodMatcher() |
| { |
| return methodMatcher; |
| } |
| |
| /** |
| * |
| */ |
| public void setMethodMatcher(MethodMatcher matcher) |
| { |
| methodMatcher = matcher; |
| } |
| |
| //-------------------------------------------------------------------------- |
| // |
| // Protected/private APIs |
| // |
| //-------------------------------------------------------------------------- |
| |
| /** |
| * Invoked automatically to allow the <code>RemotingDestination</code> to setup its corresponding |
| * MBean control. |
| * |
| * @param service The <code>Service</code> that manages this <code>RemotingDestination</code>. |
| */ |
| protected void setupDestinationControl(Service service) |
| { |
| controller = new RemotingDestinationControl(this, service.getControl()); |
| controller.register(); |
| setControl(controller); |
| } |
| } |