[Red5commits] [1538] Scope services are looked up by their interface now, fallback to beans through I

jbauch luke at codegent.com
Wed Jan 24 10:51:17 EST 2007


Scope services are looked up by their interface now, fallback to beans through IScopeService interface with defined (static) field name ("BEAN_NAME"). This allows overwriting of services through the scope handler by implementing the respective service interface.


Timestamp: 11/14/06 17:05:36 EST (2 months ago) 
Change: 1538 
Author: jbauch

Files (see diff or trac for details): 
java/io/trunk/src/org/red5/io/IStreamableFileFactory.java
java/server/trunk/src/org/red5/samples/components/ClientManager.java
java/server/trunk/src/org/red5/server/adapter/ApplicationAdapter.java
java/server/trunk/src/org/red5/server/api/IScopeService.java
java/server/trunk/src/org/red5/server/api/ScopeUtils.java
java/server/trunk/src/org/red5/server/api/scheduling/ISchedulingService.java
java/server/trunk/src/org/red5/server/api/so/ISharedObjectService.java
java/server/trunk/src/org/red5/server/api/stream/IOnDemandStreamService.java
java/server/trunk/src/org/red5/server/api/stream/IStreamFilenameGenerator.java
java/server/trunk/src/org/red5/server/api/stream/IStreamService.java
java/server/trunk/src/org/red5/server/api/stream/ISubscriberStreamService.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPConnection.java
java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
java/server/trunk/src/org/red5/server/statistics/ScopeStatistics.java
java/server/trunk/src/org/red5/server/stream/BroadcastScope.java
java/server/trunk/src/org/red5/server/stream/ClientBroadcastStream.java
java/server/trunk/src/org/red5/server/stream/IProviderService.java
java/server/trunk/src/org/red5/server/stream/PlaylistSubscriberStream.java
java/server/trunk/src/org/red5/server/stream/ProviderService.java
java/server/trunk/src/org/red5/server/stream/ServerStream.java
java/server/trunk/src/org/red5/server/stream/StreamService.java
java/server/trunk/src/org/red5/server/stream/consumer/FileConsumer.java
java/server/trunk/src/org/red5/server/stream/provider/FileProvider.java


Trac: http://mirror1.cvsdude.com/trac/osflash/red5/changeset/1538

Index: /java/server/trunk/src/org/red5/samples/components/ClientManager.java
===================================================================
--- /java/server/trunk/src/org/red5/samples/components/ClientManager.java (revision 1406)
+++ /java/server/trunk/src/org/red5/samples/components/ClientManager.java (revision 1538)
@@ -62,5 +62,5 @@
 		ISharedObjectService service = (ISharedObjectService) ScopeUtils
 				.getScopeService(scope,
-						ISharedObjectService.SHARED_OBJECT_SERVICE);
+						ISharedObjectService.class);
 		return service.getSharedObject(scope, name, persistent);
 	}
Index: /java/server/trunk/src/org/red5/server/adapter/ApplicationAdapter.java
===================================================================
--- /java/server/trunk/src/org/red5/server/adapter/ApplicationAdapter.java (revision 1529)
+++ /java/server/trunk/src/org/red5/server/adapter/ApplicationAdapter.java (revision 1538)
@@ -601,5 +601,5 @@
 			boolean persistent) {
 		ISharedObjectService service = (ISharedObjectService) getScopeService(
-				scope, ISharedObjectService.SHARED_OBJECT_SERVICE,
+				scope, ISharedObjectService.class,
 				SharedObjectService.class);
 		return service.createSharedObject(scope, name, persistent);
@@ -617,5 +617,5 @@
 	public ISharedObject getSharedObject(IScope scope, String name) {
 		ISharedObjectService service = (ISharedObjectService) getScopeService(
-				scope, ISharedObjectService.SHARED_OBJECT_SERVICE,
+				scope, ISharedObjectService.class,
 				SharedObjectService.class);
 		return service.getSharedObject(scope, name);
@@ -636,5 +636,5 @@
 			boolean persistent) {
 		ISharedObjectService service = (ISharedObjectService) getScopeService(
-				scope, ISharedObjectService.SHARED_OBJECT_SERVICE,
+				scope, ISharedObjectService.class,
 				SharedObjectService.class);
 		return service.getSharedObject(scope, name, persistent);
@@ -649,5 +649,5 @@
 	public Set<String> getSharedObjectNames(IScope scope) {
 		ISharedObjectService service = (ISharedObjectService) getScopeService(
-				scope, ISharedObjectService.SHARED_OBJECT_SERVICE,
+				scope, ISharedObjectService.class,
 				SharedObjectService.class);
 		return service.getSharedObjectNames(scope);
@@ -664,5 +664,5 @@
 	public boolean hasSharedObject(IScope scope, String name) {
 		ISharedObjectService service = (ISharedObjectService) getScopeService(
-				scope, ISharedObjectService.SHARED_OBJECT_SERVICE,
+				scope, ISharedObjectService.class,
 				SharedObjectService.class);
 		return service.hasSharedObject(scope, name);
@@ -673,5 +673,5 @@
 	public boolean hasBroadcastStream(IScope scope, String name) {
 		IProviderService service = (IProviderService) getScopeService(scope,
-				IProviderService.KEY, ProviderService.class);
+				IProviderService.class, ProviderService.class);
 		return (service.getLiveProviderInput(scope, name, false) != null);
 	}
@@ -679,5 +679,5 @@
 	public IBroadcastStream getBroadcastStream(IScope scope, String name) {
 		IStreamService service = (IStreamService) getScopeService(
-				scope, IStreamService.STREAM_SERVICE,
+				scope, IStreamService.class,
 				StreamService.class);
 		if (!(service instanceof StreamService))
@@ -699,5 +699,5 @@
 	public List<String> getBroadcastStreamNames(IScope scope) {
 		IProviderService service = (IProviderService) getScopeService(scope,
-				IProviderService.KEY, ProviderService.class);
+				IProviderService.class, ProviderService.class);
 		return service.getBroadcastStreamNames(scope);
 	}
@@ -716,5 +716,5 @@
 	public boolean hasOnDemandStream(IScope scope, String name) {
 		IProviderService service = (IProviderService) getScopeService(scope,
-				IProviderService.KEY, ProviderService.class);
+				IProviderService.class, ProviderService.class);
 		return (service.getVODProviderInput(scope, name) != null);
 	}
@@ -736,5 +736,5 @@
 				.warn("This won't work until the refactoring of the streaming code is complete.");
 		IOnDemandStreamService service = (IOnDemandStreamService) getScopeService(
-				scope, IOnDemandStreamService.ON_DEMAND_STREAM_SERVICE,
+				scope, IOnDemandStreamService.class,
 				StreamService.class);
 		return service.getOnDemandStream(scope, name);
@@ -756,5 +756,5 @@
 				.warn("This won't work until the refactoring of the streaming code is complete.");
 		ISubscriberStreamService service = (ISubscriberStreamService) getScopeService(
-				scope, ISubscriberStreamService.SUBSCRIBER_STREAM_SERVICE,
+				scope, ISubscriberStreamService.class,
 				StreamService.class);
 		return service.getSubscriberStream(scope, name);
@@ -775,5 +775,5 @@
 	public String addScheduledJob(int interval, IScheduledJob job) {
 		ISchedulingService service = (ISchedulingService) getScopeService(
-				scope, ISchedulingService.SCHEDULING_SERVICE,
+				scope, ISchedulingService.class,
 				QuartzSchedulingService.class);
 		return service.addScheduledJob(interval, job);
@@ -794,5 +794,5 @@
 	public String addScheduledOnceJob(long timeDelta, IScheduledJob job) {
 		ISchedulingService service = (ISchedulingService) getScopeService(
-				scope, ISchedulingService.SCHEDULING_SERVICE,
+				scope, ISchedulingService.class,
 				QuartzSchedulingService.class);
 		return service.addScheduledOnceJob(timeDelta, job);
@@ -812,5 +812,5 @@
 	public String addScheduledOnceJob(Date date, IScheduledJob job) {
 		ISchedulingService service = (ISchedulingService) getScopeService(
-				scope, ISchedulingService.SCHEDULING_SERVICE,
+				scope, ISchedulingService.class,
 				QuartzSchedulingService.class);
 		return service.addScheduledOnceJob(date, job);
@@ -825,5 +825,5 @@
 	public void removeScheduledJob(String name) {
 		ISchedulingService service = (ISchedulingService) getScopeService(
-				scope, ISchedulingService.SCHEDULING_SERVICE,
+				scope, ISchedulingService.class,
 				QuartzSchedulingService.class);
 		service.removeScheduledJob(name);
@@ -837,5 +837,5 @@
 	public List<String> getScheduledJobNames() {
 		ISchedulingService service = (ISchedulingService) getScopeService(
-				scope, ISchedulingService.SCHEDULING_SERVICE,
+				scope, ISchedulingService.class,
 				QuartzSchedulingService.class);
 		return service.getScheduledJobNames();
@@ -853,5 +853,5 @@
 	public double getStreamLength(String name) {
 		IProviderService provider = (IProviderService) getScopeService(scope,
-				IProviderService.KEY, ProviderService.class);
+				IProviderService.class, ProviderService.class);
 		File file = provider.getVODProviderFile(scope, name);
 		if (file == null) {
@@ -862,5 +862,5 @@
 
 		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
-				.getScopeService(scope, IStreamableFileFactory.KEY,
+				.getScopeService(scope, IStreamableFileFactory.class,
 						StreamableFileFactory.class);
 		IStreamableFileService service = factory.getService(file);
Index: /java/server/trunk/src/org/red5/server/statistics/ScopeStatistics.java
===================================================================
--- /java/server/trunk/src/org/red5/server/statistics/ScopeStatistics.java (revision 1519)
+++ /java/server/trunk/src/org/red5/server/statistics/ScopeStatistics.java (revision 1538)
@@ -200,5 +200,5 @@
 		ISharedObjectService service = (ISharedObjectService) ScopeUtils
 				.getScopeService(scope,
-						ISharedObjectService.SHARED_OBJECT_SERVICE);
+						ISharedObjectService.class);
 		if (service == null) {
 			return new Hashtable<String, Object>();
Index: /java/server/trunk/src/org/red5/server/stream/provider/FileProvider.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/provider/FileProvider.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/stream/provider/FileProvider.java (revision 1538)
@@ -168,5 +168,5 @@
 	private void init() {
 		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
-				.getScopeService(scope, IStreamableFileFactory.KEY,
+				.getScopeService(scope, IStreamableFileFactory.class,
 						StreamableFileFactory.class);
 		IStreamableFileService service = factory.getService(file);
Index: /java/server/trunk/src/org/red5/server/stream/consumer/FileConsumer.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/consumer/FileConsumer.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/stream/consumer/FileConsumer.java (revision 1538)
@@ -157,5 +157,5 @@
 	private void init() throws IOException {
 		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
-				.getScopeService(scope, IStreamableFileFactory.KEY,
+				.getScopeService(scope, IStreamableFileFactory.class,
 						StreamableFileFactory.class);
 		if (!file.isFile()) {
Index: /java/server/trunk/src/org/red5/server/stream/ServerStream.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/ServerStream.java (revision 1519)
+++ /java/server/trunk/src/org/red5/server/stream/ServerStream.java (revision 1538)
@@ -243,9 +243,9 @@
 		}
 		IProviderService providerService = (IProviderService) getScope()
-				.getContext().getBean(IProviderService.KEY);
+				.getContext().getBean(IProviderService.BEAN_NAME);
 		providerService
 				.registerBroadcastStream(getScope(), publishedName, this);
 		scheduler = (ISchedulingService) getScope().getContext().getBean(
-				ISchedulingService.SCHEDULING_SERVICE);
+				ISchedulingService.BEAN_NAME);
 		state = State.STOPPED;
 		currentItemIndex = -1;
@@ -324,5 +324,5 @@
 		boolean isLive = false;
 		IProviderService providerService = (IProviderService) getScope()
-				.getContext().getBean(IProviderService.KEY);
+				.getContext().getBean(IProviderService.BEAN_NAME);
 		msgIn = providerService.getVODProviderInput(getScope(), item.getName());
 		if (msgIn == null) {
Index: /java/server/trunk/src/org/red5/server/stream/BroadcastScope.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/BroadcastScope.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/stream/BroadcastScope.java (revision 1538)
@@ -133,5 +133,5 @@
 					if (hasParent()) {
 						IProviderService providerService = (IProviderService) getParent()
-								.getContext().getBean(IProviderService.KEY);
+								.getContext().getBean(IProviderService.BEAN_NAME);
 						providerService.unregisterBroadcastStream(getParent(),
 								getName());
Index: /java/server/trunk/src/org/red5/server/stream/PlaylistSubscriberStream.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/PlaylistSubscriberStream.java (revision 1519)
+++ /java/server/trunk/src/org/red5/server/stream/PlaylistSubscriberStream.java (revision 1538)
@@ -531,5 +531,5 @@
 			state = State.STOPPED;
 			schedulingService = (ISchedulingService) getScope().getContext()
-					.getBean(ISchedulingService.SCHEDULING_SERVICE);
+					.getBean(ISchedulingService.BEAN_NAME);
 			IConsumerService consumerManager = (IConsumerService) getScope()
 					.getContext().getBean(IConsumerService.KEY);
@@ -553,5 +553,5 @@
 			IContext context = thisScope.getContext();
 			IProviderService providerService = (IProviderService) context
-					.getBean(IProviderService.KEY);
+					.getBean(IProviderService.BEAN_NAME);
 			IMessageInput liveInput = providerService.getLiveProviderInput(
 					thisScope, item.getName(), false);
Index: /java/server/trunk/src/org/red5/server/stream/ProviderService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/ProviderService.java (revision 1537)
+++ /java/server/trunk/src/org/red5/server/stream/ProviderService.java (revision 1538)
@@ -145,5 +145,5 @@
 	private String getStreamFilename(IScope scope, String name) {
 		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils
-				.getScopeService(scope, IStreamableFileFactory.KEY);
+				.getScopeService(scope, IStreamableFileFactory.class);
 		if (name.indexOf(':') == -1 && name.indexOf('.') == -1) {
 		//if (!name.contains(':') && !name.contains('.')) {
@@ -160,5 +160,5 @@
 
 		IStreamFilenameGenerator filenameGenerator = (IStreamFilenameGenerator)
-			ScopeUtils.getScopeService(scope, IStreamFilenameGenerator.KEY, DefaultStreamFilenameGenerator.class);
+			ScopeUtils.getScopeService(scope, IStreamFilenameGenerator.class, DefaultStreamFilenameGenerator.class);
 		
 		return filenameGenerator.generateFilename(scope, name);
Index: /java/server/trunk/src/org/red5/server/stream/StreamService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/StreamService.java (revision 1519)
+++ /java/server/trunk/src/org/red5/server/stream/StreamService.java (revision 1538)
@@ -255,5 +255,5 @@
 				IContext context = conn.getScope().getContext();
 				IProviderService providerService = (IProviderService) context
-						.getBean(IProviderService.KEY);
+						.getBean(IProviderService.BEAN_NAME);
 				bs.setPublishedName(name);
 				// TODO handle registration failure
Index: /java/server/trunk/src/org/red5/server/stream/ClientBroadcastStream.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/ClientBroadcastStream.java (revision 1519)
+++ /java/server/trunk/src/org/red5/server/stream/ClientBroadcastStream.java (revision 1538)
@@ -134,5 +134,5 @@
 			IScope scope = getConnection().getScope();
 			IStreamFilenameGenerator generator = (IStreamFilenameGenerator) ScopeUtils
-					.getScopeService(scope, IStreamFilenameGenerator.KEY,
+					.getScopeService(scope, IStreamFilenameGenerator.class,
 							DefaultStreamFilenameGenerator.class);
 
Index: /java/server/trunk/src/org/red5/server/stream/IProviderService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/stream/IProviderService.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/stream/IProviderService.java (revision 1538)
@@ -24,9 +24,10 @@
 
 import org.red5.server.api.IScope;
+import org.red5.server.api.IScopeService;
 import org.red5.server.api.stream.IBroadcastStream;
 import org.red5.server.messaging.IMessageInput;
 
-public interface IProviderService {
-	public static final String KEY = "providerService";
+public interface IProviderService extends IScopeService {
+	public static String BEAN_NAME = "providerService";
 
 	/**
Index: /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java (revision 1530)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/RTMPHandler.java (revision 1538)
@@ -462,5 +462,5 @@
 					|| action.equals(ACTION_RECEIVE_AUDIO)) {
 				IStreamService streamService = (IStreamService) getScopeService(
-						conn.getScope(), IStreamService.STREAM_SERVICE,
+						conn.getScope(), IStreamService.class,
 						StreamService.class);
 				invokeCall(conn, call, streamService);
@@ -567,5 +567,5 @@
 
 		ISharedObjectService sharedObjectService = (ISharedObjectService) getScopeService(
-				scope, ISharedObjectService.SHARED_OBJECT_SERVICE,
+				scope, ISharedObjectService.class,
 				SharedObjectService.class);
 		if (!sharedObjectService.hasSharedObject(scope, name)) {
Index: /java/server/trunk/src/org/red5/server/net/rtmp/RTMPConnection.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/rtmp/RTMPConnection.java (revision 1522)
+++ /java/server/trunk/src/org/red5/server/net/rtmp/RTMPConnection.java (revision 1538)
@@ -266,5 +266,5 @@
 		Red5.setConnectionLocal(this);
 		IStreamService streamService = (IStreamService) getScopeService(scope,
-				IStreamService.STREAM_SERVICE, StreamService.class);
+				IStreamService.class, StreamService.class);
 		if (streamService != null) {
 			synchronized (streams) {
Index: /java/server/trunk/src/org/red5/server/api/so/ISharedObjectService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/so/ISharedObjectService.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/api/so/ISharedObjectService.java (revision 1538)
@@ -23,4 +23,5 @@
 
 import org.red5.server.api.IScope;
+import org.red5.server.api.IScopeService;
 
 /**
@@ -28,7 +29,7 @@
  * 
  */
-public interface ISharedObjectService {
+public interface ISharedObjectService extends IScopeService {
 
-	public final static String SHARED_OBJECT_SERVICE = "sharedObjectService";
+	public static String BEAN_NAME = "sharedObjectService";
 
 	/**
Index: /java/server/trunk/src/org/red5/server/api/IScopeService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/IScopeService.java (revision 1538)
+++ /java/server/trunk/src/org/red5/server/api/IScopeService.java (revision 1538)
@@ -0,0 +1,38 @@
+package org.red5.server.api;
+
+/*
+ * RED5 Open Source Flash Server - http://www.osflash.org/red5
+ * 
+ * Copyright (c) 2006 by respective authors (see below). All rights reserved.
+ * 
+ * This library is free software; you can redistribute it and/or modify it under the 
+ * terms of the GNU Lesser General Public License as published by the Free Software 
+ * Foundation; either version 2.1 of the License, or (at your option) any later 
+ * version. 
+ * 
+ * This library is distributed in the hope that it will be useful, but WITHOUT ANY 
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 
+ * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License along 
+ * with this library; if not, write to the Free Software Foundation, Inc., 
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 
+ */
+
+/**
+ * Base interface for all scope services. Used by the ScopeUtils to lookup
+ * services defined in beans. A scope service usually can perform various
+ * tasks on a scope like managing shared objects, streams, etc.
+ * 
+ * @author The Red5 Project (red5 at osflash.org)
+ * @author Joachim Bauch (bauch at struktur.de)
+ */
+public interface IScopeService {
+
+	/** 
+	 * Name of a bean defining that scope service. Override in
+	 * subinterfaces.
+	 * */
+	public static String BEAN_NAME = null;
+
+}
Index: /java/server/trunk/src/org/red5/server/api/scheduling/ISchedulingService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/scheduling/ISchedulingService.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/api/scheduling/ISchedulingService.java (revision 1538)
@@ -23,4 +23,6 @@
 import java.util.List;
 
+import org.red5.server.api.IScopeService;
+
 /**
  * Service that supports periodic execution of jobs, adding, removing and
@@ -31,7 +33,7 @@
  *
  */
-public interface ISchedulingService {
+public interface ISchedulingService extends IScopeService {
 
-	public static final String SCHEDULING_SERVICE = "schedulingService";
+	public static String BEAN_NAME = "schedulingService";
 
 	/**
Index: /java/server/trunk/src/org/red5/server/api/stream/ISubscriberStreamService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/stream/ISubscriberStreamService.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/api/stream/ISubscriberStreamService.java (revision 1538)
@@ -21,8 +21,9 @@
 
 import org.red5.server.api.IScope;
+import org.red5.server.api.IScopeService;
 
-public interface ISubscriberStreamService {
+public interface ISubscriberStreamService extends IScopeService {
 
-	public final static String SUBSCRIBER_STREAM_SERVICE = "subscriberStreamService";
+	public static String BEAN_NAME = "subscriberStreamService";
 
 	/**
Index: /java/server/trunk/src/org/red5/server/api/stream/IStreamFilenameGenerator.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/stream/IStreamFilenameGenerator.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/api/stream/IStreamFilenameGenerator.java (revision 1538)
@@ -21,4 +21,5 @@
 
 import org.red5.server.api.IScope;
+import org.red5.server.api.IScopeService;
 
 /**
@@ -28,8 +29,8 @@
  * @author Joachim Bauch (bauch at struktur.de)
  */
-public interface IStreamFilenameGenerator {
+public interface IStreamFilenameGenerator extends IScopeService {
 
 	/** Name of the bean to setup a custom filename generator in an application. */
-	public static final String KEY = "streamFilenameGenerator";
+	public static String BEAN_NAME = "streamFilenameGenerator";
 
 	/**
Index: /java/server/trunk/src/org/red5/server/api/stream/IStreamService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/stream/IStreamService.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/api/stream/IStreamService.java (revision 1538)
@@ -1,3 +1,5 @@
 package org.red5.server.api.stream;
+
+import org.red5.server.api.IScopeService;
 
 /*
@@ -23,7 +25,7 @@
  * This interface represents the stream methods that can be called throug RTMP.
  */
-public interface IStreamService {
+public interface IStreamService extends IScopeService {
 
-	public static final String STREAM_SERVICE = "streamService";
+	public static String BEAN_NAME = "streamService";
 
 	/**
Index: /java/server/trunk/src/org/red5/server/api/stream/IOnDemandStreamService.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/stream/IOnDemandStreamService.java (revision 1406)
+++ /java/server/trunk/src/org/red5/server/api/stream/IOnDemandStreamService.java (revision 1538)
@@ -21,8 +21,9 @@
 
 import org.red5.server.api.IScope;
+import org.red5.server.api.IScopeService;
 
-public interface IOnDemandStreamService {
+public interface IOnDemandStreamService extends IScopeService {
 
-	public final static String ON_DEMAND_STREAM_SERVICE = "onDemandStreamService";
+	public static String BEAN_NAME = "onDemandStreamService";
 
 	/**
Index: /java/server/trunk/src/org/red5/server/api/ScopeUtils.java
===================================================================
--- /java/server/trunk/src/org/red5/server/api/ScopeUtils.java (revision 1519)
+++ /java/server/trunk/src/org/red5/server/api/ScopeUtils.java (revision 1538)
@@ -20,4 +20,6 @@
  */
 
+import java.lang.reflect.Field;
+
 import org.apache.log4j.Logger;
 import org.red5.server.api.persistence.IPersistable;
@@ -199,5 +201,5 @@
 	 * @return
 	 */
-	public static Object getScopeService(IScope scope, String name) {
+	protected static Object getScopeService(IScope scope, String name) {
 		return getScopeService(scope, name, null);
 	}
@@ -215,15 +217,8 @@
 	 * @return				Service object
 	 */
-	public static Object getScopeService(IScope scope, String name,
+	protected static Object getScopeService(IScope scope, String name,
 			Class defaultClass) {
 		if (scope == null) {
 			return null;
-		}
-
-		if (scope.hasAttribute(IPersistable.TRANSIENT_PREFIX
-				+ SERVICE_CACHE_PREFIX + name)) {
-			// Return cached service
-			return scope.getAttribute(IPersistable.TRANSIENT_PREFIX
-					+ SERVICE_CACHE_PREFIX + name);
 		}
 
@@ -246,9 +241,91 @@
 		}
 
+		return result;
+	}
+
+	/**
+	 * Returns scope service that implements a given interface.
+	 * 
+	 * @param scope
+	 *            The scope service belongs to
+	 * @param intf
+	 *            The interface the service must implement
+	 * @return Service object
+	 */
+	public static Object getScopeService(IScope scope, Class intf) {
+		return getScopeService(scope, intf, null);
+	}
+	
+	/**
+	 * Returns scope service that implements a given interface.
+	 * 
+	 * @param scope
+	 *            The scope service belongs to
+	 * @param intf
+	 *            The interface the service must implement
+	 * @param defaultClass
+	 *            Class that should be used to create a new service if no service was found.
+	 * @return Service object
+	 */
+	public static Object getScopeService(IScope scope, Class intf,
+			Class defaultClass) {
+		if (scope == null || intf == null) {
+			r

Note:
Diffs are chopped if more than 25k.
This is to get past the limit on the mailing list.



More information about the Red5commits mailing list