All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.osgi.service.wireadmin.Producer Maven / Gradle / Ivy

/*
 * Copyright (c) OSGi Alliance (2002, 2008). All Rights Reserved.
 *
 * Licensed 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 org.osgi.service.wireadmin;

/**
 * Data Producer, a service that can generate values to be used by
 * {@link Consumer} services.
 * 
 * 

* Service objects registered under the Producer interface are expected to * produce values (internally generated or from external sensors). The value can * be of different types. When delivering a value to a Wire object, * the Producer service should coerce the value to be an instance of one of the * types specified by {@link Wire#getFlavors}. The classes are specified in * order of preference. * *

* When the data represented by the Producer object changes, this object should * send the updated value by calling the update method on each of * Wire objects passed in the most recent call to this object's * {@link #consumersConnected} method. These Wire objects will pass * the value on to the associated Consumer service object. * *

* The Producer service may use the information in the Wire object's * properties to schedule the delivery of values to the Wire object. * *

* Producer service objects must register with a service.pid and a * {@link WireConstants#WIREADMIN_PRODUCER_FLAVORS} property. It is recommended * that a Producer service object also registers with a * service.description property. Producer service objects must * register with a {@link WireConstants#WIREADMIN_PRODUCER_FILTERS} property if * the Producer service will be performing filtering instead of the * Wire object. * *

* If an exception is thrown by a Producer object method, a * WireAdminEvent of type {@link WireAdminEvent#PRODUCER_EXCEPTION} * is broadcast by the Wire Admin service. * *

* Security Considerations. Data producing bundles will require * ServicePermission[Producer,REGISTER] to register a Producer * service. In general, only the Wire Admin service should have * ServicePermission[Producer,GET]. Thus only the Wire Admin service * may directly call a Producer service. Care must be taken in the sharing of * Wire objects with other bundles. *

* Producer services must be registered with scope names when they can send * different types of objects (composite) to the Consumer service. The Producer * service should have WirePermission for each of these scope names. * * @version $Revision: 5673 $ */ public interface Producer { /** * Return the current value of this Producer object. * *

* This method is called by a Wire object in response to the * Consumer service calling the Wire object's poll * method. The Producer should coerce the value to be an instance of one of * the types specified by {@link Wire#getFlavors}. The types are specified * in order of of preference. The returned value should be as new or newer * than the last value furnished by this object. * *

* Note: This method may be called by a Wire object prior to this * object being notified that it is connected to that Wire object * (via the {@link #consumersConnected} method). *

* If the Producer service returns an Envelope object that has an * unpermitted scope name, then the Wire object must ignore (or remove) the * transfer. *

* If the Wire object has a scope set, the return value must be * an array of Envelope objects (Envelope[]). The * Wire object must have removed any Envelope objects * that have a scope name that is not in the Wire object's scope. * * @param wire The Wire object which is polling this service. * @return The current value of the Producer service or null if * the value cannot be coerced into a compatible type. Or an array * of Envelope objects. */ public Object polled(Wire wire); /** * Update the list of Wire objects to which this * Producer object is connected. * *

* This method is called when the Producer service is first registered and * subsequently whenever a Wire associated with this Producer * becomes connected, is modified or becomes disconnected. * *

* The Wire Admin service must call this method asynchronously. This implies * that implementors of a Producer service can be assured that the callback * will not take place during registration when they execute the * registration in a synchronized method. * * @param wires An array of the current and complete list of Wire * objects to which this Producer service is connected. May be * null if the Producer is not currently connected to any * Wire objects. */ public void consumersConnected(Wire[] wires); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy