blob: 330e629d3ace52c859874fe2c1407dedf5371b41 [file] [log] [blame]
/*
* 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;
import flex.messaging.config.ConfigMap;
/**
* The FlexFactory interface is implemented by factory components that provide
* instances to the Flex messaging framework. You can implement this interface
* if you want to tie together Flex Data Services with another system which maintains
* component instances (often called the "services layer" in a typical enterprise
* architecture). By implementing FlexFactory, you can configure a Flex
* RemoteObject destination or a Flex Data Management Services assembler which
* uses a Java object instance in your services layer rather than having Data Services
* create a new component instance. In some cases, this means you avoid writing
* glue code for each service you want to expose to flex clients.
*/
public interface FlexFactory extends FlexConfigurable {
/**
* Request scope string.
*/
String SCOPE_REQUEST = "request";
/**
* Session scope string.
*/
String SCOPE_SESSION = "session";
/**
* Application scope string .
*/
String SCOPE_APPLICATION = "application";
/**
* Scope string.
*/
String SCOPE = "scope";
/**
* Source string.
*/
String SOURCE = "source";
/**
* Called when the
* definition of an instance that this factory looks up is initialized.
* It should validate that
* the properties supplied are valid to define an instance
* and returns an instance of the type FactoryInstance
* that contains all configuration necessary to construct
* an instance of this object. If the instance is application
* scoped, the FactoryInstance may contain a reference to the
* instance directly.
* <p>
* Any valid properties used for this configuration
* must be accessed to avoid warnings about unused configuration
* elements. If your factory is only used for application
* scoped components, you do not need to implement
* this method as the lookup method itself can be used
* to validate its configuration.
* <p>
* The id property is used as a name to help you identify
* this factory instance for any errors it might generate.
*
* @param id id of the factory
* @param properties properties
* @return a new FactoryInstance instance
*/
FactoryInstance createFactoryInstance(String id, ConfigMap properties);
/**
* This method is called by the default implementation of FactoryInstance.lookup.
* When Data Services wants an instance of a given factory destination, it calls the
* FactoryInstance.lookup to retrieve that instance. That method in turn
* calls this method by default.
* <p>
* For simple FlexFactory implementations which do not need to
* add additional configuration properties or logic to the FactoryInstance class,
* by implementing this method you can avoid having to add an additional subclass of
* FactoryInstance for your factory. If you do extend FactoryInstance, it is
* recommended that you just override FactoryInstance.lookup and put your logic
* there to avoid the extra level of indirection.
*
* @param instanceInfo The FactoryInstance for this destination
* @return the Object instance to use for the given operation for this destination.
*/
Object lookup(FactoryInstance instanceInfo);
}