You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/04/25 07:34:46 UTC

[48/51] [partial] BlazeDS Donation from Adobe Systems Inc

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/LogManager.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/LogManager.as b/apps/ds-console/console/containers/LogManager.as
new file mode 100755
index 0000000..a44dc06
--- /dev/null
+++ b/apps/ds-console/console/containers/LogManager.as
@@ -0,0 +1,189 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.containers
+{
+    import console.ConsoleManager;
+    import flash.events.Event;
+    import mx.controls.ComboBox;
+    import console.events.ManagementOperationInvokeEvent;
+    import mx.events.ListEvent;
+    import flash.events.MouseEvent;
+    import mx.collections.ArrayCollection;
+    
+    public class LogManager extends UpdateListener
+    {
+        private var _manager:ConsoleManager;
+        private var _logMBean:String;
+        private var _logTree:Array;
+        private var display:LogManagerDisplay;
+        
+        public static var targetLevels:Array = new Array(
+                {label:"NONE", value:"2000"},
+                {label:"FATAL", value:"1000"},
+                {label:"ERROR", value:"8"},
+                {label:"WARN", value:"6"},
+                {label:"INFO", value:"4"},
+                {label:"DEBUG", value:"2"},
+                {label:"ALL", value:"0"}
+            );
+        
+        public function LogManager():void
+        {
+            super();
+            
+            display = new LogManagerDisplay;
+            this.addChild(display);
+            
+            this.label = "Log Manager";
+            
+            _manager = ConsoleManager.getInstance();
+            _manager.registerListener(this, []);
+            
+            // On selecting a log target, invoke 'getTargetFilters' to populate the table of filters
+            display.logTargetSelect.addEventListener(ListEvent.CHANGE, selectLogTarget);
+            display.logTargetLevel.dataProvider = targetLevels;
+            
+            // Handler for removing a target
+            display.deleteCategory.addEventListener(MouseEvent.CLICK,
+                function(e:Event):void {
+                    
+                    _manager.invokeOperation(
+                    
+                    new ManagementOperationInvokeEvent(_logMBean, 
+                        "removeFilterForTarget", 
+                        [display.logTargetSelect.selectedItem, display.currentCategories.selectedItem], 
+                        ["java.lang.String", "java.lang.String"]),
+                        
+                        function (e:Event):void { display.logTargetSelect.dispatchEvent(
+                            new Event(ListEvent.CHANGE)); } );
+                }
+            );
+            
+            // Handler for adding a target
+            display.addFilterButton.addEventListener(MouseEvent.CLICK,
+                function(e:Event):void {
+                    
+                    _manager.invokeOperation(
+                    
+                    new ManagementOperationInvokeEvent(_logMBean, 
+                        "addFilterForTarget", 
+                        [display.logTargetSelect.selectedItem, display.addFilterTextInput.text], 
+                        ["java.lang.String", "java.lang.String"]),
+                        // Simple callback function to refresh the Log View
+                        function (e:Event):void { 
+                            display.logTargetSelect.dispatchEvent(new Event(ListEvent.CHANGE));
+                            display.addFilterTextInput.text = "";
+                        } 
+                    );
+                }
+            );
+            
+            // Handler for adding a target
+            display.addCommonFilterButton.addEventListener(MouseEvent.CLICK,
+                function(e:Event):void {
+                    
+                    _manager.invokeOperation(
+                    
+                    new ManagementOperationInvokeEvent(_logMBean, 
+                        "addFilterForTarget", 
+                        [display.logTargetSelect.selectedItem, display.commonCategories.selectedItem], 
+                        ["java.lang.String", "java.lang.String"]),
+                        // Simple callback function to refresh the Log View
+                        function (e:Event):void { 
+                            display.logTargetSelect.dispatchEvent(new Event(ListEvent.CHANGE));
+                            display.addFilterTextInput.text = "";
+                        } 
+                    );
+                }
+            );
+            
+            // Handler for changing the target's level
+            display.logTargetLevel.addEventListener(ListEvent.CHANGE, function(e:Event):void
+                {
+                    _manager.invokeOperation(
+                    
+                    new ManagementOperationInvokeEvent(_logMBean, 
+                        "changeTargetLevel", 
+                        [display.logTargetSelect.selectedItem, display.logTargetLevel.selectedItem.value], 
+                        ["java.lang.String", "java.lang.String"]),
+                        new Function
+                    );
+                }
+            );
+            
+        }
+        
+        public override function mbeanModelUpdate(model:Object):void
+        {
+            _logTree = _manager.getChildTree("Log");
+            if (_logTree != null && _logTree.length != 0)
+            {
+                _logMBean = _logTree[0]["objectName"]["canonicalName"];
+                // Get the targets for the current application
+                _manager.getAttributes(_logMBean, ["Targets"], this, updateTargets);
+                _manager.getAttributes(_logMBean, ["Categories"], this, updateCommonCats);
+            }
+        }
+        
+        public override function appChanged(s:String):void
+        {
+            mbeanModelUpdate(null);
+        }
+        
+        public function updateCommonCats(e:Event):void
+        {
+            display.commonCategories.dataProvider = (e["result"] as Array)[0].value;
+            display.commonCategories.selectedIndex = 0;
+            display.commonCategories.dispatchEvent(new Event(ListEvent.CHANGE));
+        }
+        
+        public function updateTargets(e:Event):void
+        {
+            var logTargets:Array = (e["result"] as Array)[0].value;
+            display.logTargetSelect.dataProvider = logTargets;
+            display.logTargetSelect.selectedIndex = 0;
+            display.logTargetSelect.dispatchEvent(new Event(ListEvent.CHANGE));
+        }
+        
+        public function updateFilters(e:Event):void
+        {
+            display.currentCategories.dataProvider = e["result"] as Array;
+        }
+        
+        public function selectLogTarget(e:Event):void
+        {
+            _manager.invokeOperation(new ManagementOperationInvokeEvent(_logMBean, 
+                "getTargetFilters", [display.logTargetSelect.selectedItem], ["java.lang.String"]),
+                updateFilters);
+            _manager.invokeOperation(new ManagementOperationInvokeEvent(_logMBean, 
+                "getTargetLevel", [display.logTargetSelect.selectedItem], ["java.lang.String"]),
+                handleGetTargetLevel);
+        }
+        
+        public function handleGetTargetLevel(e:Event):void
+        {
+            var currentLevelInt:String = e["message"]["body"];
+            for (var i:int = 0; i < targetLevels.length; i++)
+            {
+                if (targetLevels[i].value == currentLevelInt)
+                    display.logTargetLevel.selectedIndex = i;
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/LogManagerDisplay.mxml
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/LogManagerDisplay.mxml b/apps/ds-console/console/containers/LogManagerDisplay.mxml
new file mode 100755
index 0000000..969c9d4
--- /dev/null
+++ b/apps/ds-console/console/containers/LogManagerDisplay.mxml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+  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.
+
+-->
+<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">
+    <mx:HBox width="100%" height="100%">
+        <mx:Form>
+            <mx:FormItem label="Log Target:">
+                <mx:ComboBox id="logTargetSelect" />
+            </mx:FormItem>
+            <mx:FormItem label="Target Level:">
+                <mx:ComboBox id="logTargetLevel"></mx:ComboBox>
+            </mx:FormItem>
+            <mx:HRule width="100%"/>
+            <mx:FormItem label="Add a Custom Category">
+                <mx:TextInput id="addFilterTextInput" />
+            </mx:FormItem>
+            <mx:FormItem>
+                <mx:Button label="Add Category" id="addFilterButton" />
+            </mx:FormItem>
+        </mx:Form>
+        <mx:VBox width="100%">
+        <mx:DataGrid id="currentCategories" width="100%">
+            <mx:columns>
+                <mx:DataGridColumn headerText="Current Categories" dataField="filters" />
+            </mx:columns>
+        </mx:DataGrid>
+        <mx:Button label="Remove Category" id="deleteCategory" />
+        </mx:VBox>
+        <mx:VBox width="100%">
+            <mx:DataGrid id="commonCategories" width="100%">
+                <mx:columns>
+                    <mx:DataGridColumn headerText="Common Categories" dataField="common"/>
+                </mx:columns>
+            </mx:DataGrid>
+            <mx:Button label="Add Category" id="addCommonFilterButton" />
+        </mx:VBox>
+    </mx:HBox>
+</mx:VBox>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/Operation.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/Operation.as b/apps/ds-console/console/containers/Operation.as
new file mode 100755
index 0000000..2b9788e
--- /dev/null
+++ b/apps/ds-console/console/containers/Operation.as
@@ -0,0 +1,169 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.containers
+{
+
+import flash.events.MouseEvent;
+import mx.containers.HBox;
+import mx.controls.Button;
+import mx.controls.Label;
+import mx.controls.TextInput;
+import mx.messaging.management.MBeanOperationInfo;
+import mx.messaging.management.MBeanParameterInfo;
+
+/**
+ * The Operation container is an HBox that renders UI to invoke an operation on
+ * an MBean. When the operationInfo property of an Operation is set, the current
+ * UI for the Operation is torn down, and new UI is rendered based on the new 
+ * MBeanOperationInfo metadata provided.
+ * <p>
+ * This container/control should not be instantiated directly. A parent OperationSet
+ * container will create nested Operations based on its MBean metadata.
+ */
+public class Operation extends HBox
+{
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 * @private
+	 * Constructor.
+	 */
+	public function Operation(wrapper:OperationSet)
+	{
+		super();
+		
+		_wrapper = wrapper;
+		_values = [];
+		_signature = [];
+	}
+	
+	/**
+	 * @private
+	 * The parent container.
+	 */
+	private var _wrapper:OperationSet;
+	
+	/**
+	 * @private
+	 * Array to store references to controls for each argument.
+	 */
+	private var _values:Array; 
+	
+	/**
+	 * @private
+	 * Array to store the type signature for this operation.
+	 */
+	private var _signature:Array;
+	
+	//----------------------------------
+	//  MBeanOperationInfo
+	//----------------------------------
+
+	/**
+	 * @private
+	 * Storage for the operation info.
+	 */	
+	private var _operationInfo:MBeanOperationInfo;
+
+	/**
+	 * MBean operation metadata that drives the UI for this component.
+	 */
+	public function get operationInfo():MBeanOperationInfo
+	{
+		return _operationInfo;
+	}
+
+	public function set operationInfo(value:MBeanOperationInfo):void
+	{
+                var i:int;
+
+		_operationInfo = value;
+		// Remove any existing children and refs to argument values.
+		_values.splice(0);
+		_signature.splice(0);
+		for (i = numChildren - 1; i >= 0; --i)
+		{
+			removeChildAt(i);	
+		}		
+		
+		// Build UI for this operation.
+		var opName:Button = new Button();
+		opName.label = value.name;
+		opName.addEventListener("click", invokeOperation);		
+		addChild(opName);	
+		
+		var openParen:Label = new Label();
+		openParen.text = " (";
+		addChild(openParen);
+		
+		var comma:Label = new Label();
+		comma.text = ", ";
+		var paramName:String;
+		var n:int = value.signature.length;
+		for (i = 0; i < n; ++i)
+		{
+			var pName:Label = new Label();
+			paramName = value.signature[i].name;
+			if (paramName.length > 0)
+			{
+				pName.text = paramName;	
+			}
+			else
+			{
+				pName.text = "p" + (i + 1);				
+			}
+			addChild(pName);
+			var pValue:TextInput = new TextInput();
+			addChild(pValue);
+			_values[i] = pValue;
+			_signature[i] = value.signature[i].type;
+			if (i != (n - 1))
+			{
+				addChild(comma);
+			}
+		}
+		
+		var closeParen:Label = new Label();
+		closeParen.text = " ) ";
+		addChild(closeParen);
+	}
+	
+	/**
+	 * @private
+	 * Calls back into the parent OperationSet to dispatch an
+	 * event for this operation invocation request.
+	 */
+	private function invokeOperation(e:MouseEvent):void
+	{
+		var argsToPass:Array = [];
+		var n:int = _values.length;	
+		for (var i:int = 0; i < n; ++i)
+		{
+			argsToPass.push(_values[i].text);	
+		}	
+		_wrapper.dispatchInvokeEvent(_operationInfo.name, argsToPass, _signature);
+	}
+}	
+	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/OperationSet.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/OperationSet.as b/apps/ds-console/console/containers/OperationSet.as
new file mode 100755
index 0000000..98ca6de
--- /dev/null
+++ b/apps/ds-console/console/containers/OperationSet.as
@@ -0,0 +1,149 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.containers
+{
+
+import console.events.ManagementOperationInvokeEvent;
+
+import mx.containers.*;
+import mx.messaging.management.MBeanInfo;
+
+//--------------------------------------
+//  Events
+//--------------------------------------
+
+/**
+ * Broadcast when a request has been made to invoke an Operation within this OperationSet.
+ */
+[Event(name="invoke", type="console.events.ManagementOperationInvokeEvent")]
+
+/**
+ * The OperationSet is a VBox containing an Operation for each operation exposed by a
+ * MBean. When the mbeanInfo property is set, the current UI of the OperationSet is torn
+ * down and new UI is built based upon the MBeanInfo metadata provided.
+ *
+ * <p><b>MXML Syntax</b></p>
+ *
+ * <p>The <code>&lt;mx:OperationSet&gt;</code> tag inherits all the properties
+ * of its parent classes and adds the following properties:</p>
+ *
+ * <p>
+ * <pre>
+ * &lt;mx:Button
+ *   mbeanInfo="<i>No default</i>."
+ * /&gt;
+ * </pre>
+ * </p>
+ */
+public class OperationSet extends VBox
+{
+	//--------------------------------------------------------------------------
+	//
+	//  Constructor
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 *  Constructor.
+	 */
+	public function OperationSet()
+	{
+		super();
+	}
+
+
+
+
+	//----------------------------------
+	//  MBeanOperationInfo
+	//----------------------------------
+	
+	private var _mbeanName:String;
+	public function set mbeanName(name:String):void
+	{
+	    _mbeanName = name;
+	}
+
+	/**
+	 *  @private
+	 *  Storage for the Mbean info.
+	 */
+	private var _mbeanInfo:MBeanInfo;
+
+	/**
+	 *  MBean metadata to drive the UI for this component.
+	 */
+	public function get mbeanInfo():MBeanInfo
+	{
+		return _mbeanInfo;
+	}
+	
+		
+	private var _tabnav:TabNavigator;
+	public function set tabnav(p:TabNavigator):void
+	{
+	    _tabnav = p;
+	}
+
+	public function set mbeanInfo(value:MBeanInfo):void
+	{
+                var i:int;
+
+		_mbeanInfo = value;
+		// Remove any existing children.
+		for (i = numChildren - 1; i >= 0; --i)
+		{
+			removeChildAt(i);
+		}
+		if (value != null)
+		{
+			var n:int = value.operations.length;
+
+            // If there are no operations for this MBean, disable the Operations tab.
+            if (n == 0)
+                _tabnav.getTabAt(1).enabled = false;
+
+            // Otherwise, build UI for the set of operations exposed by this MBean.
+            else
+            {
+                _tabnav.getTabAt(1).enabled = true;
+                for (i = 0; i < n; ++i)
+                {
+                    var op:Operation = new Operation(this);
+                    addChild(op);
+                    op.operationInfo = value.operations[i];
+                }
+            }
+		}
+	}
+
+	/**
+	 *  Raises an operation invoke event for a nested Operation.
+	 */
+	public function dispatchInvokeEvent(name:String, values:Array, signature:Array):void
+	{
+		var event:ManagementOperationInvokeEvent = new ManagementOperationInvokeEvent(_mbeanName, name, values, signature);
+		dispatchEvent(event);
+	}
+
+}
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/PollableAttributeChart.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/PollableAttributeChart.as b/apps/ds-console/console/containers/PollableAttributeChart.as
new file mode 100755
index 0000000..a8470c5
--- /dev/null
+++ b/apps/ds-console/console/containers/PollableAttributeChart.as
@@ -0,0 +1,42 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.containers
+{
+    import mx.charts.LineChart;
+    import mx.charts.series.LineSeries;
+
+    public class PollableAttributeChart extends LineChart
+    {
+        function PollableAttributeChart(provider:Object):void
+        {
+            super();
+            
+            dataProvider = provider;
+            this.percentHeight = 100;
+            this.percentWidth = 100;
+            
+            var series:LineSeries = new LineSeries;
+            series.dataProvider = provider;
+            series.yField = "value";
+            this.addChild(series);
+            
+            initialize();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/ServerManager.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/ServerManager.as b/apps/ds-console/console/containers/ServerManager.as
new file mode 100755
index 0000000..719556c
--- /dev/null
+++ b/apps/ds-console/console/containers/ServerManager.as
@@ -0,0 +1,138 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.containers
+{
+    import console.ConsoleManager;
+    import mx.collections.ArrayCollection;
+    import mx.events.ListEvent;
+    import flash.events.Event;
+    import mx.charts.LineChart;
+    import mx.charts.series.LineSeries;
+    import mx.utils.ObjectProxy;
+    import flash.utils.setInterval;
+    import mx.collections.ICollectionView;
+    import console.data.Bindable3DHashMap;
+    import flash.events.TextEvent;
+    import console.events.ManagementOperationInvokeEvent;
+    import mx.controls.DataGrid;
+    import mx.events.DataGridEvent;
+    import mx.events.FlexEvent;
+    
+    public class ServerManager extends UpdateListener
+    {
+        private var _manager:ConsoleManager;
+        private var display:ServerManagerDisplay;
+        private var dataCache:Bindable3DHashMap;
+        private var pollableAttributes:Object;
+        private var visibleTypes:Array;
+        
+        public function ServerManager():void
+        {
+            super();
+            display = new ServerManagerDisplay;
+            this.addChild(display);
+            
+            this.label = "Server Management";
+            display.scalarProperties.addEventListener(ListEvent.CHANGE, selectedScalar);
+            display.pollableProperties.addEventListener(ListEvent.CHANGE, selectedPollable);
+            _manager = ConsoleManager.getInstance();
+            _manager.registerListener(this, [{type: ConsoleManager.GENERAL_OPERATION, poll: false},
+                                             {type: ConsoleManager.GENERAL_SERVER, poll: false},
+                                             {type: ConsoleManager.GENERAL_POLLABLE, poll: true}]);
+            setupDataCache();
+        }
+        
+        public override function dataUpdate(type:int, data:Object):void
+        {
+            var dataArray:ArrayCollection = new ArrayCollection;
+            
+            for (var name:String in data)
+            {
+
+                var propertyArrayForMBean:Array = data[name];
+                
+                for (var i:int = 0; i < propertyArrayForMBean.length; i++)
+                {
+                    dataCache.update(String(type), propertyArrayForMBean[i].name, propertyArrayForMBean[i].value);
+                }
+            }
+            
+            if (type == ConsoleManager.GENERAL_POLLABLE)
+                pollableAttributes = data;
+        }
+              
+        private function setupDataCache():void
+        {
+            dataCache = new Bindable3DHashMap();
+            dataCache.update(String(ConsoleManager.GENERAL_OPERATION),null,null);
+            dataCache.update(String(ConsoleManager.GENERAL_POLLABLE),null,null);
+            dataCache.update(String(ConsoleManager.GENERAL_SERVER),null,null);
+            
+            display.scalarProperties.dataProvider = dataCache.getBindableKeyArray(String(ConsoleManager.GENERAL_SERVER));
+            display.pollableProperties.dataProvider = dataCache.getBindableKeyArray(String(ConsoleManager.GENERAL_POLLABLE));
+        }
+        
+        private function invokeOp(mbean:String, operation:String, value:String):void
+        {
+            _manager.invokeOperation(
+                new ManagementOperationInvokeEvent(mbean, operation, [value], ["java.lang.String"]),
+                function (e:Event):void {
+                    
+                }
+            );
+        }
+        
+        private function selectedScalar(e:Event):void
+        {
+            // It's possible that the data has changed since it was clicked because of polling
+            // if the selected item is null, then return.
+            // TODO: Handle this more gracefully.
+            if (display.scalarProperties.selectedItem == -1) return;
+            
+            var attr:String = display.scalarProperties.selectedItem.propertyName;
+            var mbean:String = display.scalarProperties.selectedItem.mbeanName;
+            display.selectedProperty.text = attr;
+            display.pollableProperties.selectedIndex = -1;
+        }
+        
+        private function selectedPollable(e:Event):void
+        {
+            // It's possible that the data has changed since it was clicked because of polling
+            // if the selected item is null, then return.
+            // TODO: Handle this more gracefully.
+            if (display.pollableProperties.selectedItem == null) return;
+            
+            var attr:String = display.pollableProperties.selectedItem.Property
+            display.selectedProperty.text = attr;
+            
+            display.attrgraph.dataProvider = dataCache.getBindableDataArray(String(ConsoleManager.GENERAL_POLLABLE), attr);
+            display.attrgraphSeries.dataProvider = dataCache.getBindableDataArray(String(ConsoleManager.GENERAL_POLLABLE), attr);
+            display.scalarProperties.selectedIndex = -1;
+        }
+        
+        public override function appChanged(s:String):void
+        {
+            display.attrgraph.dataProvider = null;
+            display.attrgraphSeries.dataProvider = null;
+            display.selectedProperty.text = "None";
+            setupDataCache();
+            _manager.updateData(this);
+        }                
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/ServerManagerDisplay.mxml
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/ServerManagerDisplay.mxml b/apps/ds-console/console/containers/ServerManagerDisplay.mxml
new file mode 100755
index 0000000..2bf1152
--- /dev/null
+++ b/apps/ds-console/console/containers/ServerManagerDisplay.mxml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+  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.
+
+-->
+<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%">
+    <mx:HDividedBox width="100%" height="100%">
+        <mx:VBox height="100%" width="400">
+            <mx:DataGrid id="scalarProperties" width="100%">
+                <mx:columns>
+                    <mx:DataGridColumn dataField="mbeanName" visible="false" />
+                    <mx:DataGridColumn headerText="Scalar Property" dataField="Property" />
+                    <mx:DataGridColumn headerText="Value" dataField="Value" />
+                </mx:columns>
+            </mx:DataGrid>
+            <mx:DataGrid id="pollableProperties"  width="100%">
+                <mx:columns>
+                    <mx:DataGridColumn dataField="mbeanName" visible="false" />
+                    <mx:DataGridColumn headerText="Graphable Property" dataField="Property" />
+                    <mx:DataGridColumn headerText="Value" dataField="Value" />
+                </mx:columns>
+            </mx:DataGrid>
+        </mx:VBox>
+        <mx:VDividedBox height="100%">
+            <mx:HBox>
+                <mx:Label text="Selected Attribute" />
+                <mx:Text id="selectedProperty" />
+            </mx:HBox>
+            <mx:LineChart id="attrgraph" width="100%" height="100%">
+                <mx:verticalAxis>
+                    <mx:LinearAxis id="attrgraphAxis" baseAtZero="false" />
+                </mx:verticalAxis>
+                <mx:series>
+                    <mx:LineSeries id="attrgraphSeries" yField="Value" />
+                </mx:series>
+            </mx:LineChart>
+        </mx:VDividedBox>
+    </mx:HDividedBox>
+    
+</mx:Panel>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/UpdateListener.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/UpdateListener.as b/apps/ds-console/console/containers/UpdateListener.as
new file mode 100755
index 0000000..bd3a464
--- /dev/null
+++ b/apps/ds-console/console/containers/UpdateListener.as
@@ -0,0 +1,109 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.containers
+{
+    import mx.containers.Canvas;
+    import console.data.Bindable3DHashMap;
+    import mx.collections.ArrayCollection;
+    import mx.messaging.management.ObjectName;
+    
+    public class UpdateListener extends Canvas
+    {
+        protected var _name:String;
+        protected var _model:Object;
+
+        /**
+        * Invoked when the names of the mbeans are retrieved from the server.
+        */
+        public function mbeanModelUpdate(mbeanModel:Object):void
+        {
+            
+        }
+        
+        /**
+        * Invoked when the data for a given type is updated if the implementing class
+        * is registered with the ConsoleManager for the type, and if the implementing class
+        * is set to active in the ConsoleManager.
+        */
+        public function dataUpdate(type:int, data:Object):void
+        {
+            
+        }
+        
+        /**
+        * Invoked when the selected application has changed.  An implementing class might
+        * want to clear any data it is holding onto since the data will be belonging to
+        * objects in an application's MBeans that are no longer being queried.
+        */
+        public function appChanged(s:String):void
+        {
+            
+        }
+
+        /**
+        * If the container only wishes to query a select number of MBeans upon dataUpdate, they should be
+        * visible in a map keyed on the display type containing arrays of the MBean names.
+        * 
+        * If a null value, or any object that the ConsoleManager can't parse, then all
+        * MBeans for all active types are returned upon dataUpdate.
+        */
+        public function get specificMBeansMap():Object
+        {
+            return null;
+        }
+        
+        protected function traverseTreeForObject(node:Object, searchType:String = null, searchObject:String = null):Object
+        {
+            if (node == null)
+            {
+                return null;
+            }
+            else if (node.hasOwnProperty("type"))
+            {
+                // Node is a container of objects of 'type'
+                if (searchType != null)
+                {
+                    if (node.type == searchObject)
+                        return node;
+                }
+            }
+            else if (node.hasOwnProperty("objectName"))
+            {
+                // Node is a specific object, an instance of parent 'type'
+                if (searchObject != null)
+                {
+                    if ((node.objectName as ObjectName).getKeyProperty("id") == searchObject)
+                        return node;
+                }
+            }
+            
+            // recur
+            if (node.hasOwnProperty("children") && (node.children is Array))
+            {
+                for each (var child:Object in (node.children as Array))
+                {
+                    traverseTreeForObject(child, searchType, searchObject);
+                }
+            }
+            
+            // not found
+            return null;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/containers/UpdateManager.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/containers/UpdateManager.as b/apps/ds-console/console/containers/UpdateManager.as
new file mode 100755
index 0000000..1f6d7ec
--- /dev/null
+++ b/apps/ds-console/console/containers/UpdateManager.as
@@ -0,0 +1,28 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.containers
+{
+    public interface UpdateManager
+    {
+        function registerListener(listner:UpdateListener, types:Array):void;
+        function unregisterListener(listner:UpdateListener):void;
+        function activateListener(listener:UpdateListener):void;
+        function deactivateListener(listener:UpdateListener):void;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/data/Bindable3DHashMap.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/data/Bindable3DHashMap.as b/apps/ds-console/console/data/Bindable3DHashMap.as
new file mode 100755
index 0000000..5e4088f
--- /dev/null
+++ b/apps/ds-console/console/data/Bindable3DHashMap.as
@@ -0,0 +1,110 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.data
+{
+    import mx.collections.ArrayCollection;
+    import mx.utils.ObjectProxy;
+    import flash.events.Event;
+    import mx.events.PropertyChangeEvent;
+    import mx.events.CollectionEvent;
+    import mx.controls.listClasses.ListBase;
+    
+    public class Bindable3DHashMap
+    {
+        public var objects:ObjectProxy;
+        public var objectsForKeyArray:ObjectProxy;
+        
+        public function Bindable3DHashMap()
+        {
+            objects = new ObjectProxy;
+            objectsForKeyArray = new ObjectProxy;
+        }
+        
+        public function updateNoPollable(object:String, key:String, value:*):void
+        {
+		    if (!objectsForKeyArray.hasOwnProperty(object))            
+		        objectsForKeyArray[object] = new ArrayCollection;
+		        
+		    if (!key)
+		        return;
+		        
+		    var keysForKeyArray:ArrayCollection = objectsForKeyArray[object] as ArrayCollection;
+            
+			var foundKey:Boolean = false;
+			for (var i:int = 0; i < keysForKeyArray.length; i++)
+			{
+			    if ((keysForKeyArray[i].hasOwnProperty("Property")) && (keysForKeyArray[i]["Property"] == key))
+			    {
+			        keysForKeyArray[i]["Value"] = value;
+			        foundKey = true;
+			        break;
+			    }
+			}
+			
+			if (!foundKey)
+			    keysForKeyArray.addItem({Property: key, Value:value});
+			    
+			keysForKeyArray.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
+        }
+        
+		public function update(object:String, key:String, value:*):void
+		{
+		    if (!objects.hasOwnProperty(object))
+		    {
+		        objects[object] = new ObjectProxy;
+		    }
+		    
+		    if (!key)
+		        return;
+		        
+		    var keys:ObjectProxy = objects[object] as ObjectProxy;
+		    
+			if (!keys.hasOwnProperty(key))
+			    keys[key] = new ArrayCollection;
+
+			(keys[key] as ArrayCollection).addItem({Name: key, Value: value});
+			(keys[key] as ArrayCollection).dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE));
+			
+			updateNoPollable(object, key, value);
+		}
+		
+		public function getBindableKeyArray(object:String):ArrayCollection
+		{
+		    if (!objectsForKeyArray.hasOwnProperty(object))            
+		        objectsForKeyArray[object] = new ArrayCollection;
+		        
+		    return (objectsForKeyArray[object] as ArrayCollection);
+		}
+		
+		public function getBindableDataArray(object:String, key:String):ArrayCollection
+		{
+		    if (!objects.hasOwnProperty(object))
+		        objects[object] = new ObjectProxy;
+		        
+		    var keys:ObjectProxy = objects[object] as ObjectProxy;
+		    return keys[key] as ArrayCollection;
+		}
+		
+		public function clearData():void
+		{
+		    objects = new ObjectProxy;
+		    objectsForKeyArray = new ObjectProxy;
+		}
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/ds-console/console/events/ManagementOperationInvokeEvent.as
----------------------------------------------------------------------
diff --git a/apps/ds-console/console/events/ManagementOperationInvokeEvent.as b/apps/ds-console/console/events/ManagementOperationInvokeEvent.as
new file mode 100755
index 0000000..1390c4d
--- /dev/null
+++ b/apps/ds-console/console/events/ManagementOperationInvokeEvent.as
@@ -0,0 +1,99 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 console.events
+{
+
+import flash.events.Event;
+
+/**
+ * Used to request that an MBean operation be invoked.
+ */
+public class ManagementOperationInvokeEvent extends Event
+{
+    /**
+     * Constructs an instance of this event with the specified type, target,
+     * and message.
+     */
+    public function ManagementOperationInvokeEvent(mbean:String, name:String, values:Array, signature:Array)
+    {
+        super(INVOKE, false, false);
+        _mbean = mbean;
+        _name = name;
+        _values = values;
+        _signature = signature;
+    }
+    
+    /**
+     * The mbean of the operation to invoke.
+     */
+    public function get mbean():String
+    {
+        return _mbean;
+    }
+    
+    /**
+     * The name of the operation to invoke.
+     */
+    public function get name():String
+    {
+        return _name;
+    }
+    
+    /**
+     * The argument values for the operation.
+     */
+    public function get values():Array
+    {
+    	return _values;	
+    }
+    
+    /**
+     * The type signature for operation arguments.
+     */
+    public function get signature():Array
+    {
+    	return _signature;
+    }
+
+	/**
+     * Because this event can be re-dispatched we have to implement clone to
+     * return the appropriate type, otherwise we will get just the standard
+     * event type.
+	 *
+     * @return Clone of this <code>ManagementOperationInvokeEvent</code>
+	 */
+	override public function clone():Event
+	{
+	    return new ManagementOperationInvokeEvent(_mbean, _name, _values, _signature);
+	}
+
+    /**
+     * The event type.
+     */
+    public static const INVOKE:String = "invoke";
+	
+    // private members    
+    private var _name:String;
+    private var _values:Array;
+    private var _signature:Array;
+    private var _mbean:String;
+}
+
+}

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/README.txt
----------------------------------------------------------------------
diff --git a/apps/samples-spring/README.txt b/apps/samples-spring/README.txt
new file mode 100755
index 0000000..16c2166
--- /dev/null
+++ b/apps/samples-spring/README.txt
@@ -0,0 +1,5 @@
+All of the files contained in this directory and any subdirectories are 
+considered "Sample Code" under the terms of the end user license agreement 
+that accompanies this product. Please consult such end user license agreement 
+for details about your rights with respect to such files.
+

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/classes/commons-logging.properties
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/classes/commons-logging.properties b/apps/samples-spring/WEB-INF/classes/commons-logging.properties
new file mode 100755
index 0000000..46c3be4
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/classes/commons-logging.properties
@@ -0,0 +1,19 @@
+# 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.
+
+# suppress logging for 3rd-party libraries using commons-logging
+# Flex logging is not configured here. It is configured through in the logging section of flex-config.xml
+org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
+org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-servlet.xml
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-servlet.xml b/apps/samples-spring/WEB-INF/flex-servlet.xml
new file mode 100755
index 0000000..158453b
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-servlet.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  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.
+
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:flex="http://www.springframework.org/schema/flex"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+        http://www.springframework.org/schema/flex 
+        http://www.springframework.org/schema/flex/spring-flex-1.5.xsd">
+ 
+    <flex:message-broker>
+        <flex:message-service
+            default-channels="my-streaming-amf,my-longpolling-amf,my-polling-amf" />
+        <flex:secured />
+    </flex:message-broker>
+
+    <!-- Expose the productService bean for BlazeDS remoting -->
+    <flex:remoting-destination ref="productService" />
+
+    <!-- Expose the contactService bean for BlazeDS remoting -->
+    <flex:remoting-destination ref="contactService" />
+
+    <!-- Expose the securedProductService bean for BlazeDS remoting -->
+    <flex:remoting-destination ref="securedProductService" />
+    
+    <!-- Helper for getting the currently authenticated user -->
+    <bean id="securityHelper" class="org.springframework.flex.samples.secured.Security3Helper">
+        <flex:remoting-destination/>
+    </bean>
+
+    <!-- Messaging destinations -->
+    <flex:message-destination id="chat" />
+    <flex:message-destination id="simple-feed" />
+    <flex:message-destination id="market-feed" allow-subtopics="true" subtopic-separator="." />
+
+    <!-- MessageTemplate makes it easy to publish messages -->
+    <bean id="defaultMessageTemplate" class="org.springframework.flex.messaging.MessageTemplate" />
+
+    <!-- Pojo used to start and stop the data feed that pushes data in the 'simple-feed' destination -->
+    <bean id="simpleFeedStarter" class="org.springframework.flex.samples.simplefeed.SimpleFeed">
+        <constructor-arg ref="defaultMessageTemplate" />
+        <flex:remoting-destination />
+    </bean>
+
+    <!-- Pojo used to start and stop the data feed that pushes data in the 'market-feed' destination -->
+    <bean id="marketFeedStarter" class="org.springframework.flex.samples.marketfeed.MarketFeed">
+        <constructor-arg ref="defaultMessageTemplate" />
+        <constructor-arg value="stocklist.xml" />
+        <flex:remoting-destination />
+    </bean>
+
+</beans>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/.actionScriptProperties
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/.actionScriptProperties b/apps/samples-spring/WEB-INF/flex-src/chat/.actionScriptProperties
new file mode 100755
index 0000000..b5390a8
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/.actionScriptProperties
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+  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.
+
+-->
+<actionScriptProperties mainApplicationPath="chat.mxml" projectUUID="46e6c4ea-bda5-466a-9d9a-a020928ae0f8" version="6">
+  <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">
+    <compilerSourcePath/>
+    <libraryPath defaultLinkType="0">
+      <libraryPathEntry kind="4" path="">
+        <excludedEntries>
+          <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flex.swc" useDefaultLinkType="false"/>
+        </excludedEntries>
+      </libraryPathEntry>
+      <libraryPathEntry kind="1" linkType="1" path="libs"/>
+    </libraryPath>
+    <sourceAttachmentPath/>
+  </compiler>
+  <applications>
+    <application path="chat.mxml"/>
+  </applications>
+  <modules/>
+  <buildCSSFiles/>
+</actionScriptProperties>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/.flexProperties
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/.flexProperties b/apps/samples-spring/WEB-INF/flex-src/chat/.flexProperties
new file mode 100755
index 0000000..1d99468
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/.flexProperties
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+
+  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.
+
+-->
+<flexProperties enableServiceManager="false" flexServerFeatures="0" flexServerType="0" toolCompile="true" useServerFlexSDK="false" version="2"/>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/.project
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/.project b/apps/samples-spring/WEB-INF/flex-src/chat/.project
new file mode 100755
index 0000000..0cb0ea0
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/.project
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  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.
+
+-->
+<projectDescription>
+	<name>chat</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.adobe.flexbuilder.project.flexbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>com.adobe.flexbuilder.project.flexnature</nature>
+		<nature>com.adobe.flexbuilder.project.actionscriptnature</nature>
+	</natures>
+</projectDescription>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/build.xml
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/build.xml b/apps/samples-spring/WEB-INF/flex-src/chat/build.xml
new file mode 100755
index 0000000..e5ee6d4
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/build.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0"?>
+<!--
+
+  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.
+
+-->
+<project name="samples-spring.war/build.xml" default="main" basedir="../../../../../">
+    
+    <property environment="env" />
+    <property file="${basedir}/build.properties"/>
+    <property name="samples-spring.war" value="${basedir}/apps/samples-spring"/>
+    <property name="context.root" value="samples-spring" />
+    <property name="application.name" value="chat" />
+    <property name="application.file" value="chat" />
+    <property name="application.bin.dir" value="${samples-spring.war}/chat" />
+    <property name="application.src.dir" value="${samples-spring.war}/WEB-INF/flex-src/chat/src" />
+
+    <target name="main" depends="clean,compile-swf" />
+    
+    <target name="compile-swf">
+
+        <taskdef resource="flexTasks.tasks" classpath="${basedir}/ant/lib/flexTasks.jar" />
+        
+        <property name="FLEX_HOME" value="${basedir}"/>
+
+        <mxmlc file="${application.src.dir}/${application.file}.mxml" 
+            output="${application.bin.dir}/${application.file}.swf"
+            actionscript-file-encoding="UTF-8"
+            keep-generated-actionscript="false"
+            incremental="false"
+            services="${samples-spring.war}/WEB-INF/flex/services-config.xml"
+            context-root="${context.root}" 
+            locale="en_US">
+            <load-config filename="${basedir}/frameworks/flex-config.xml"/>
+            <license product="flexbuilder3" serial-number="${env.fb3_license}"/>
+            <source-path path-element="${basedir}/frameworks"/>
+            <external-library-path/>
+            <metadata>
+                <publisher name="${manifest.Implementation-Vendor}" />
+                <creator name="${manifest.Implementation-Vendor}" />
+            </metadata>
+        </mxmlc>
+
+        <html-wrapper title="${application.name}"
+            height="100%"
+            width="100%"
+            application="app"
+            swf="${application.file}"
+            version-major="10"
+            version-minor="0"
+            version-revision="0"
+            output="${application.bin.dir}"/>
+
+    </target>
+
+    <target name="clean" description="--> Removes jars and classes">
+        <delete quiet="true" includeemptydirs="true">
+            <fileset dir="${application.bin.dir}" includes="*.swf,index.html"/>
+            <fileset dir="${application.bin.dir}/history" />
+        </delete>
+    </target>
+
+</project>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/flex-src/chat/html-template/history/history.css
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/flex-src/chat/html-template/history/history.css b/apps/samples-spring/WEB-INF/flex-src/chat/html-template/history/history.css
new file mode 100755
index 0000000..4a7f791
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/flex-src/chat/html-template/history/history.css
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
+
+#ie_historyFrame { width: 0px; height: 0px; display:none }
+#firefox_anchorDiv { width: 0px; height: 0px; display:none }
+#safari_formDiv { width: 0px; height: 0px; display:none }
+#safari_rememberDiv { width: 0px; height: 0px; display:none }