[Red5commits] [2268] Tonights war updates

pgregoire luke at codegent.com
Thu Aug 30 23:20:09 PDT 2007


Tonights war updates


Timestamp: 08/31/07 01:10:54 EST (less than one hour ago) 
Change: 2268 
Author: pgregoire

Files (see diff or trac for details): 
java/server/trunk/conf/log4j.properties
java/server/trunk/conf/war/log4j.properties
java/server/trunk/conf/war/web.xml
java/server/trunk/src/org/red5/server/ContextLoader.java
java/server/trunk/src/org/red5/server/net/servlet/AMFGatewayServlet.java
java/server/trunk/src/org/red5/server/war/RootContextLoaderServlet.java


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

Index: /java/server/trunk/conf/war/log4j.properties
===================================================================
--- /java/server/trunk/conf/war/log4j.properties (revision 2264)
+++ /java/server/trunk/conf/war/log4j.properties (revision 2268)
@@ -8,5 +8,5 @@
 log4j.logger.org.red5.server.net.proxy=INFO
 log4j.logger.org.red5.server.net.remoting=WARN
-log4j.logger.org.red5.server.net.rtmp=DEBUG
+log4j.logger.org.red5.server.net.rtmp=WARN
 log4j.logger.org.red5.server.net.rtmp.BaseRTMPHandler=OFF
 log4j.logger.org.red5.server.net.rtmp.RTMPMinaIoHandler=OFF
@@ -32,5 +32,5 @@
 log4j.logger.org.springframework.beans.factory.xml=WARN
 log4j.logger.org.springframework.context.support=WARN
-log4j.logger.org.springframework.web.context=INFO
+log4j.logger.org.springframework.web.context=DEBUG
 log4j.logger.org.springframework.web.context.support=WARN
 #log4j.logger.org.springframework.ui.context.support=WARN
Index: /java/server/trunk/conf/war/web.xml
===================================================================
--- /java/server/trunk/conf/war/web.xml (revision 2262)
+++ /java/server/trunk/conf/war/web.xml (revision 2268)
@@ -54,4 +54,5 @@
 		<servlet-name>gateway</servlet-name>
 		<servlet-class>org.red5.server.net.servlet.AMFGatewayServlet</servlet-class>
+		<!-- load-on-startup>1</load-on-startup -->
 	</servlet>
 
@@ -59,4 +60,5 @@
 		<servlet-name>rtmpt</servlet-name>
 		<servlet-class>org.red5.server.net.rtmpt.RTMPTServlet</servlet-class>
+		<!-- load-on-startup>2</load-on-startup -->
 	</servlet>
 
Index: /java/server/trunk/conf/log4j.properties
===================================================================
--- /java/server/trunk/conf/log4j.properties (revision 2135)
+++ /java/server/trunk/conf/log4j.properties (revision 2268)
@@ -11,16 +11,18 @@
 log4j.logger.org.red5.server.net.proxy=INFO
 log4j.logger.org.red5.server.net.remoting=WARN
-log4j.logger.org.red5.server.net.rtmp=WARN
-log4j.logger.org.red5.server.net.rtmp.codec=INFO
+log4j.logger.org.red5.server.net.rtmp=DEBUG
+log4j.logger.org.red5.server.net.rtmp.BaseRTMPHandler=OFF
+log4j.logger.org.red5.server.net.rtmp.RTMPMinaIoHandler=OFF
+#log4j.logger.org.red5.server.net.rtmp.codec=INFO
 log4j.logger.org.red5.server.net.rtmp.status=INFO
-log4j.logger.org.red5.server.net.rtmp.RTMPMinaTransport=INFO
+#log4j.logger.org.red5.server.net.rtmp.RTMPMinaTransport=INFO
 log4j.logger.org.red5.server.net.rtmpt=WARN
-log4j.logger.org.red5.server.net.servlet=WARN
+log4j.logger.org.red5.server.net.servlet=DEBUG
 log4j.logger.org.red5.server.net.servlet.RTMPTServlet=WARN
 log4j.logger.org.red5.server.persistence=WARN
 log4j.logger.org.red5.server.pooling.ThreadObjectFactory=WARN
-log4j.logger.org.red5.server.service=WARN
+log4j.logger.org.red5.server.service=INFO
 log4j.logger.org.red5.server.so=WARN
-log4j.logger.org.red5.server.stream=WARN
+log4j.logger.org.red5.server.stream=INFO
 log4j.logger.org.red5.server.stream.consumer=WARN
 log4j.logger.org.red5.server.script=WARN
Index: /java/server/trunk/src/org/red5/server/net/servlet/AMFGatewayServlet.java
===================================================================
--- /java/server/trunk/src/org/red5/server/net/servlet/AMFGatewayServlet.java (revision 2264)
+++ /java/server/trunk/src/org/red5/server/net/servlet/AMFGatewayServlet.java (revision 2268)
@@ -86,12 +86,4 @@
 		webAppCtx = WebApplicationContextUtils
 				.getWebApplicationContext(getServletContext());
-		try {
-			log.debug("Gateway: ctx path: "
-					+ webAppCtx.getServletContext().getContextPath()
-					+ " srv ctx path: " + getServletContext().getContextPath());
-		} catch (Throwable e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
 		if (webAppCtx != null) {
 			webContext = (IContext) webAppCtx.getBean("web.context");
Index: /java/server/trunk/src/org/red5/server/war/RootContextLoaderServlet.java
===================================================================
--- /java/server/trunk/src/org/red5/server/war/RootContextLoaderServlet.java (revision 2266)
+++ /java/server/trunk/src/org/red5/server/war/RootContextLoaderServlet.java (revision 2268)
@@ -44,11 +44,16 @@
 import org.red5.server.jmx.JMXAgent;
 import org.red5.server.service.ServiceInvoker;
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.access.BeanFactoryLocator;
+import org.springframework.beans.factory.access.BeanFactoryReference;
 import org.springframework.beans.factory.config.ConfigurableBeanFactory;
 import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.access.ContextBeanFactoryReference;
+import org.springframework.context.access.ContextSingletonBeanFactoryLocator;
 import org.springframework.web.context.ConfigurableWebApplicationContext;
 import org.springframework.web.context.ContextLoader;
 import org.springframework.web.context.ContextLoaderListener;
 import org.springframework.web.context.WebApplicationContext;
-import org.springframework.web.context.support.WebApplicationContextUtils;
 import org.springframework.web.context.support.XmlWebApplicationContext;
 
@@ -89,6 +94,4 @@
 	private GlobalScope global;
 
-	private ContextLoader loader;
-
 	private Server server;
 
@@ -119,23 +122,10 @@
 
 		try {
-			String[] configArray = servletContext.getInitParameter(
-					ContextLoader.CONFIG_LOCATION_PARAM).split("[,\\s]");
-			logger.debug("Config location files: " + configArray.length);
 			// instance the context loader
-			loader = createContextLoader();
+			ContextLoader loader = createContextLoader();
 			applicationContext = (ConfigurableWebApplicationContext) loader
 					.initWebApplicationContext(servletContext);
-			applicationContext.setConfigLocations(configArray);
 			logger.debug("Root context path: "
 					+ applicationContext.getServletContext().getContextPath());
-			// applicationContext.setServletContext(servletContext);
-			applicationContext.refresh();
-			// set web application context as an attribute of the servlet
-			// context so that it may be located via Springs
-			// WebApplicationContextUtils
-			servletContext
-					.setAttribute(
-							WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
-							applicationContext);
 
 			ConfigurableBeanFactory factory = applicationContext
@@ -148,4 +138,15 @@
 			parentFactory = (DefaultListableBeanFactory) factory
 					.getParentBeanFactory();
+
+			// create a wrapper around our primary context
+			BeanFactoryReference beanfactoryRef = new ContextBeanFactoryReference(
+					applicationContext);
+
+			// set it in the root servlet context
+			servletContext.setAttribute("bean.factory.ref", beanfactoryRef);
+
+			// set a remoting codec factory for AMF use
+			servletContext.setAttribute("remoting.codec.factory", parentFactory
+					.getBean("remotingCodecFactory"));
 
 			// for (String beanName :
@@ -232,4 +233,6 @@
 				+ ctx.getContextPath());
 
+		ContextLoader loader = new ContextLoader();
+
 		ConfigurableWebApplicationContext appCtx = (ConfigurableWebApplicationContext) loader
 				.initWebApplicationContext(ctx);
@@ -239,5 +242,5 @@
 		ctx.setAttribute(
 				WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
-				applicationContext);
+				appCtx);
 
 		ConfigurableBeanFactory appFactory = appCtx.getBeanFactory();
@@ -263,10 +266,29 @@
 	public static void registerSubContext(WebSettings settings,
 			ServletContext ctx) {
+		logger
+				.warn("You have hit a bug! Contexts loaded after ROOT are not currently supported, as a work-around name your context with a letter prior to 'R'.");
 		logger.info("Registering subcontext for servlet context: "
 				+ ctx.getContextPath());
 
-		ServletContext rootServletContext = ctx.getContext("/ROOT");
-		ConfigurableWebApplicationContext rootApplicationContext = (ConfigurableWebApplicationContext) WebApplicationContextUtils
-				.getWebApplicationContext(rootServletContext);
+		ApplicationContext rootApplicationContext = null;
+		BeanFactoryReference parentContextRef = null;
+		String parentContextKey = ctx
+				.getInitParameter(ContextLoader.LOCATOR_FACTORY_KEY_PARAM);
+
+		if (parentContextKey != null) {
+			BeanFactoryLocator locator = ContextSingletonBeanFactoryLocator
+					.getInstance();
+			if (logger.isDebugEnabled()) {
+				logger
+						.debug("Getting parent context definition: using parent context key of '"
+								+ parentContextKey
+								+ "' with BeanFactoryLocator");
+			}
+			parentContextRef = locator.useBeanFactory(parentContextKey);
+			rootApplicationContext = (ApplicationContext) parentContextRef
+					.getFactory();
+		}
+
+		// ServletContext rootServletContext = ctx.getContext("/ROOT");
 
 		ConfigurableWebApplicationContext appCtx = new XmlWebApplicationContext();
@@ -275,13 +297,13 @@
 		appCtx.setConfigLocations(settings.getConfigs());
 		appCtx.refresh();
+
 		ctx.setAttribute(
 				WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
-				rootApplicationContext);
-
-		ConfigurableBeanFactory factory = rootApplicationContext
-				.getBeanFactory();
+				appCtx);
+
+		BeanFactory factory = rootApplicationContext;
 
 		// get the main factory
-		DefaultListableBeanFactory rootParentFactory = (DefaultListableBeanFactory) factory
+		DefaultListableBeanFactory rootParentFactory = (DefaultListableBeanFactory) rootApplicationContext
 				.getParentBeanFactory();
 
@@ -307,5 +329,5 @@
 				+ (rootGlobalStrategy == null));
 
-		ConfigurableBeanFactory appFactory = appCtx.getBeanFactory();
+		BeanFactory appFactory = appCtx.getBeanFactory();
 
 		logger.debug("About to grab Webcontext bean for "
@@ -338,4 +360,5 @@
 			// during shutdown
 			try {
+				ServletContext ctx = sce.getServletContext();
 				// prepare spring for shutdown
 				Introspector.flushCaches();
@@ -352,5 +375,5 @@
 				JMXAgent.shutdown();
 				// shutdown spring
-				Object attr = servletContext
+				Object attr = ctx
 						.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
 				if (attr != null) {
@@ -362,16 +385,18 @@
 					// logger.debug("Registered scope: " + scope);
 					// }
-					for (String singleton : factory.getSingletonNames()) {
-						logger.debug("Registered singleton: " + singleton);
-						factory.destroyScopedBean(singleton);
+					try {
+						for (String singleton : factory.getSingletonNames()) {
+							logger.debug("Registered singleton: " + singleton);
+							factory.destroyScopedBean(singleton);
+						}
+					} catch (RuntimeException e) {
 					}
 					factory.destroySingletons();
 
-					servletContext
+					ctx
 							.removeAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
 					applicationContext.close();
 				}
-				instance.getContextLoader().closeWebApplicationContext(
-						servletContext);
+				instance.getContextLoader().closeWebApplicationContext(ctx);
 			} catch (Throwable e) {
 				e.printStackTrace();
Index: /java/server/trunk/src/org/red5/server/ContextLoader.java
===================================================================
--- /java/server/trunk/src/org/red5/server/ContextLoader.java (revision 2264)
+++ /java/server/trunk/src/org/red5/server/ContextLoader.java (revision 2268)
@@ -140,5 +140,5 @@
 	 */
 	protected void loadContext(String name, String config) {
-		log.info("Load context - name: " + name + " config: " + config);
+		log.debug("Load context - name: " + name + " config: " + config);
 		ApplicationContext context = new FileSystemXmlApplicationContext(
 				new String[] { config }, parentContext);


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