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:14 UTC

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

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/modules/common/src/flex/messaging/errors.properties
----------------------------------------------------------------------
diff --git a/modules/common/src/flex/messaging/errors.properties b/modules/common/src/flex/messaging/errors.properties
new file mode 100755
index 0000000..f76c681
--- /dev/null
+++ b/modules/common/src/flex/messaging/errors.properties
@@ -0,0 +1,432 @@
+# 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.
+
+# IMPORTANT: Error messages are now split between two files in BlazeDS and LCDS.
+# This file is for BlazeDS error messages (which can be used by LCDS code as well).
+# LCDS only messages now live in a separate file in the LCDS branch. While editing
+# these files, keep in mind that both files are part of the same numeric sequence.
+#
+# Error and details messages for LocalizedMessageExceptions are stored in the following format:
+# Error message: {number}[-{variant}]={message}
+# Details message: {number}[-{variant}]-details={details}
+#
+# Server error numbers start at 10000.
+#
+# Error numbers are chosen by taking the next available value in a numeric sequence.
+# Each functional component or group of components should claim a unique block of 50
+# numbers to use for error and details messages. If this initial set of 50 values
+# are exhausted, the component should claim the next available block of 50 values for
+# its use. This means that an error-ridden component may well use a disjoint set of
+# error numbers. Here's an example:
+# Feature        Error numbers claimed
+# -----------------------------------
+# Security      10050-10099
+# Configuration 10100-10149
+# Security      10150-10199 <- Security exhausted its first block, so it claims the next
+#                              available block of 50 values for its continued use.
+#
+# Constants to lookup error/details strings by 'number', and optional 'variant',
+# should be defined in the classes that use them. When a class needs to define a new
+# error and/or details string, add the necessary string(s) to this file using the next
+# available numeric value in the corresponding range.
+#
+# The structure of this file should be maintained according to increasing error number. This
+# means that for features that throw many errors, blocks of corresponding message strings
+# won't necessarily be contiguous, but this simplifies identifying the starting value for
+# the next available block of values and simplifies validation that duplicate error numbers
+# are not being used.
+# * Caution: Reusing a property key doesn't generate any error, so watch for typos.
+#            The last defined property with a duplicate key clobbers the earlier values.
+
+# 10000-10049: General LocalizedException messages (in MessageBrokerFilter and MessageBroker).
+10000=There was an unhandled failure on the server. {0}
+10001=Null endpoint id arrived on message.
+10002=No such endpoint: {0}
+10003=No configured channel has an endpoint path ''{0}''.
+10004=The supplied destination id is not registered with any service.
+10005=Destination ''{0}'' not accessible over channel ''{1}''.
+10006=Error occurred while attempting to convert an input argument''s type.
+10007=Cannot invoke method ''{0}''.
+10007-0-details=Method ''{0}'' not found.
+10007-1-details={0} arguments were sent but {1} were expected.
+10007-2-details=The expected argument types are ({0}) but the supplied types were ({1}) and converted to ({2}).
+10007-3-details=The expected argument types are ({0}) but the supplied types were ({1}) with none successfully converted.
+10007-4-details=The expected argument types are ({0}) but no arguments were provided.
+10007-5-details=No arguments were expected but the following types were supplied ({0}).
+10008=Cannot create class of type ''{0}''.
+10008-0-details=Type ''{0}'' not found.
+10009=Given type ''{0}'' is not of expected type ''{1}''.
+10010=Unable to create a new instance of type ''{0}''.
+10010-0-details=Types must have a public, no arguments constructor.
+10010-1-details=Interfaces cannot be instantiated.
+10010-2-details=Abstract types cannot be instantiated.
+10010-3-details=Types cannot be instantiated without a public, no arguments constructor.
+10011=A security exception occurred while creating an instance of type ''{0}''.
+10012=An unknown exception occurred while creating an instance of type ''{0}''.
+10013=Invalid target specified. Target must not be null.
+10014=Categories must be at least one character in length.
+10015=Categories can not contain any of the following characters: ''{0}''
+10016=Error for filter ''{0}''. The following characters are not valid: {1}
+10017=Error for filter ''{0}''. ''*'' must be the right most character.
+10018=The server configuration parser requires an instance of MessagingConfiguration.
+10019=The FlexSession is invalid.
+10020=Unknown remote credentials format.
+10021=Failed to get property ''{0}'' on type ''{1}''.
+10022=Failed to set property ''{0}'' on type ''{1}''.
+10023=Property ''{0}'' is not readable on class ''{1}''.
+10024=Property ''{0}'' is not writable on class ''{1}''.
+10025=Property ''{0}'' not found on class ''{1}''.
+10026=Cannot send a null Map key for type ''{0}''.
+10027=The FlexClient is invalid.
+10028=The client has no active subscriptions over endpoint ''{0}''.
+10029=MessageBroker cannot service the message because message has null id.
+10030=Destination ''{0}'' requires FlexClient support which was introduced in version 2.5. Please recompile the client application with an updated client framework.
+10031=LogManager has a null Log reference.
+10032=Session map not initialized for session with id: ''{0}''.
+10033=FlexClient ''{0}'' already has a push listener registered for endpoint ''{1}''.
+10034=Channel endpoint does not support polling.
+10034-details=Client attempted to contact a server endpoint that does not support a polling channel.
+10035=Duplicate HTTP-based FlexSession error: A request for FlexClient ''{0}'' arrived over a new FlexSession ''{1}'', but FlexClient is already associated with  FlexSession ''{2}'', therefore it cannot be associated with the new session.
+10036=The client has no active subscriptions over endpoint ''{0}'' but this may be due to mismatched client and server libraries. Old versions of rpc.swc do not handle URL session tokens correctly which may cause this issue. Please ensure that the client application has been compiled using version 3.1 of rpc.swc or newer.
+10037=Invalid request type of ''{0}'' which is not of type flex.messaging.messages.Message.
+10038={0} ''{1}'' cannot service message ''{2}'' in stopped state.
+10039=Cannot create ''{0}'' with null id.
+10040=Cannot create ''{0}'' with id ''{1}''; another ''{0}'' is already registered with the same id.
+
+# 10050-10099: SecurityException messages.
+10050=Invalid login.
+10051=Login required.
+10053=External login command required. Please check your security configuration.
+10054=Cannot re-authenticate in the same session.
+10055=Access denied. User not authorized.
+10056=Login required before authorization can proceed.
+10057=A resource protected by a security constraint ''{0}'' that specifies Basic security was accessed via the ''{1}'' endpoint which does not support HTTP Basic security. Please use custom security or an alternate endpoint.
+10060=Authentication failed.
+10061=No security manager found on this application server. Cannot authenticate.
+10062=Security constraint {0} is not defined.
+10063=It is an error to specify both a security constraint and run-as for a DataService object adapter operation.
+10064=Invalid credential format.
+10065=Cannot use application server authentication together with per client authentication.
+10066=Secure endpoint ''{0}'' must be contacted via a secure protocol.
+10067=SSO Cookie created sessions may only be invalidated by removal of Cookie on the client.
+10068=HTTP endpoint ''{0}'' must be contacted via a HTTP request with proper content type.
+
+# 10100-10149: Server configuration error messages.
+10100=Error initializing configuration parser.
+10101=An internal error occurred while parsing the services configuration.
+10102=Configuration error encountered on line {0}, column {1}: ''{2}''
+10103=The services configuration root element must be ''{0}''.
+10104=Child element ''{0}'' must be specified for element ''{1}''.
+10105=Attribute ''{0}'' must be specified for element ''{1}''.
+10106=Unexpected child element ''{0}'' found in ''{1}'' from file: {2}.
+10107=Unexpected attribute ''{0}'' found in ''{1}'' from file: {2}.
+10108=''{0}'' must occur no more than once for ''{1}''.
+10109={0} not found for reference ''{1}''.
+10110=Invalid {0} id ''{1}''.
+10110-details=An id must be non-empty and not contain any list delimiter characters, i.e. commas, semi-colons or colons.
+10111=Invalid endpoint port ''{0}'' specified for channel definition ''{1}''.
+10112=The {0} root element in file {1} must be ''{2}'' or ''{3}''.
+10113=Duplicate service definition ''{0}''.
+10114=Class not specified for {0} ''{1}''.
+10115=Message type(s) not specified for {0} ''{1}''.
+10116=A default channel was specified without a reference for service ''{0}''.
+10117=Duplicate default adapter ''{0}'' in service ''{1}''. ''{2}'' has already been selected as the default.
+10118=The element ''{0}'' must specify either the ''{1}'' or ''{2}'' attribute.
+10119=Invalid {0} id ''{1}'' for service ''{2}''.
+10120={0} not found for reference ''{1}'' in destination ''{2}''.
+10121=Invalid {0} reference ''{1}'' in destination ''{2}''.
+10122=Duplicate destination ''{0}'' in service ''{1}''.
+10123=Destination ''{0}'' must specify at least one channel.
+10124=Destination ''{0}'' is configured to use an unsupported throttle policy, ''{1}''.
+10125=Invalid channel endpoint class ''{0}'' specified for ''{1}''.
+10126=Invalid logging target class ''{0}''.
+10127=Destination ''{0}'' must specify at least one adapter.
+10128=Cannot add ''{0}'' with null url to the ''{1}''.
+10129={0} token cannot be resolved in the url. Please specify the url completely.
+10129-0={0} token cannot be resolved in the url as the destination was not accessed via HTTP. Please switch to an HTTP based channel or specify the url completely.
+10130={0} token cannot be resolved in the url. Please specify the url completely, using * to indicate all ports.
+10131=Error parsing dynamic URLs.
+10132=Invalid {0} reference ''{1}'' in channel ''{2}''.
+10133=No <keystore-file> property was specified for the secure RTMP channel.
+10134=A <keystore-password> or <keystore-password-file> property must be specified for the secure RTMP channel.
+10135=Secure RTMP endpoints are only supported on Java 1.5 or above.
+10136=Invalid RTMP Endpoint URI: {0}
+10137=MessageBroker already defined from MessageBrokerServlet with init parameter messageBrokerId = ''{0}''
+10138=Unable to create a parser to load messaging configuration.
+10139=The minimum required Java version was not found. Please install JDK 1.4.2_06 or above. Current version is {0}.
+10140=The minimum required Java version was not found. Please install JDK 1.4.2 or above. Current version is {0}.
+10141=This RTMP channel with id ''{0}'' requires that ''websphere-workmanager-jndi-name'' be defined.
+10142=WebSphere RTMP Server failed to find WorkManager at {0}.
+10143=Unable to start WebSphere RTMP Server.
+10144=The RTMP channel bind address, ''{0}'', is not valid.
+10145=The secure RTMP channel could not be constructed: {0}
+10146=The whitelist ip, ''{0}'', is not valid.
+10146-pattern=The whitelist ip pattern, ''{0}'', is not valid.
+10147=The blacklist ip, ''{0}'', is not valid.
+10147-pattern=The blacklist ip pattern, ''{0}'', is not valid.
+10148=The bind address, ''{0}'', is not a defined address for any local network interface.
+10149=Unrecognized tag found in <properties>.  Please consult the documentation to determine if the tag is invalid or belongs inside of a different tag: {0}
+10149-pattern-details=''{0}'' in {1} with id: ''{2}'' from file: {3}
+#No more here - continues to 11100-11150 block
+
+# 10150-10199: DataService error messages (in LCDS errors.properties)
+# These two were in DataService error messages block even though they are general server errors, so they are kept here.
+10163=Unable to locate a MessageBroker initialized with server id ''{0}''
+10169=Unexpected multiple values for property ''{0}''.
+
+# 10200-10249: Clustering error messages
+10200=Unable to create a cluster id named {0}.
+10201=Could not create replicated map of cluster nodes for cluster id {0}.
+10202=The cluster library is not available, please configure the destination ''{0}'' for single-host deployment.
+10203=In order to use the channel with a clustered destination, the endpoint for channel ''{0}'' must be a fully-qualified URL.
+10204=Unable to broadcast a replicated service operation to the service peers for cluster id ''{0}''.
+10205=Unable to replicate a service operation received from a broadcast on cluster id ''{0}''.
+10206=A cluster named ''{0}'' already exists. The same cluster id may not be configured more than once.
+10207=The destination ''{0}'' contains a reference to cluster ''{1}'' which does not exist, please check the cluster name.
+10208=The cluster properties file ''{0}'' does not exist.
+10209=The clustered destination ''{0}'' cannot use the channel ''{1}'' because the endpoint URI for the channel contains the token ''{2}''. Token replacement is not supported for clustered destinations when url-load-balancing is true for that destination.
+10210=The cluster implementation does not provide the expected constructor.
+10211=The cluster implementation cannot be instantiated.
+10212=Unable to broadcast a replicated service operation to the service peers for cluster id ''{0}'' because ''{1}'' is not Serializable.
+10213=The cluster properties file ''{0}'' cannot be read.
+10214=Only one cluster tag can have the default=true attribute ''{0}'' and ''{1}'' both have default set to true.
+10215=Default attribute to cluster tag: ''{0}'' must be true or false not: ''{1}''.
+10216=url-load-balancing attribute in cluster tag: ''{0}'' must be true or false not: ''{1}''
+10217=Destination ''{0}'' is referencing an undefined cluster ''{1}''. Please correct your destination configuration and restart.
+10218=Unable to create a cluster id named {0} because the root region could not be found.
+10219=Unable to service an endpoint operation received from a broadcast on cluster id ''{0}''.
+
+# 10300-10349: Serialization error messages
+10300=Error deserializing typed AMF object because the target server type ''{0}'' cannot be found.
+10301=Unknown AMF type ''{0}''.
+10302=Unsupported type found in AMF stream.
+10303=Unexpected object end tag in AMF stream.
+10304=AMF Recordsets are not supported.
+10305=Class ''{0}'' must implement java.io.Externalizable to receive client IExternalizable instances.
+10306=An unhandled error occurred while processing client request(s).
+10307=Error deserializing client message.
+10308=Error serializing response.
+10309=Unsupported RTMP extended command message data format {0}.
+10310=Unsupported AMF version {0}.
+10311=Creation validation for class ''{0}'' failed.
+10312=Assignment validation of the object with type ''{0}'' for the property ''{1}'' failed.
+10313=Assignment validation of the object with type ''{0}'' for the index ''{1}'' failed.
+10314=Error deserializing the string with length ''{0}'', it exceeds the max-string-bytes limit of ''{1}''.
+10315=Error serialization exceeds the max object nest level of ''{0}''.
+10316=Error serialization exceeds the max collection object nest level of ''{0}''.
+
+# 10400-10449: Management error messages
+10400=The specified object name, ''{0}'', is malformed and cannot be used to create an ObjectName instance.
+10401=The MBean, ''{0}'', could not be unregistered because its preDeregister() method threw an exception.
+10402=The MBean, ''{0}'', could not be unregistered because it is not currently registered.
+10403=The MBean, ''{0}'', could not be registered because its preRegister() method threw an exception.
+10404=The MBean, ''{0}'', could not be registered because it is already registered.
+10405=The MBean, ''{0}'', is not compliant and could not be registered.
+10406=An exception was thrown while introspecting the MBean, ''{0}''.
+10407=The MBean, ''{0}'', could not be found.
+10408=An exception was thrown trying to invoke the getMBeanInfo method for the dynamic MBean, ''{0}''.
+10409=The attribute, ''{0}'', was not found in the MBean, ''{1}''.
+10410=The getter for the attribute, ''{0}'', on MBean, ''{1}'', threw an exception.
+10411=A reflection exception was thrown while invoking the getter for the attribute, ''{0}'', on MBean, ''{1}''
+10412=The attribute name to get is null. Please provide a non-null attribute name.
+10413=A reflection exception was thrown while invoking the getAttributes method for the dynamic MBean, ''{0}''
+10414=One of the supplied attribute names is null. Please ensure that all attribute names are not null.
+10415=A reflection exception was thrown while trying to invoke the method, ''{0}'', on MBean, ''{1}''.
+10416=An exception was thrown by the invoked method, ''{0}'', on MBean, ''{1}''.
+10417=An exception was thrown creating MBean, ''{0}''.
+10418=The MBean, ''{0}'', already exists and is registered with the MBean server.
+10419=The MBean class, ''{0}'', is not JMX compliant.
+10420=The preRegister method of the MBean, ''{0}'', threw an exception so the MBean was not registered.
+10421=The preDeregister method of the MBean, ''{0}'', threw an exception so the MBean was not unregistered.
+10422=A reflection exception was thrown while invoking the setter for the attribute, ''{0}'', on MBean, ''{1}''
+10423=The setter for the attribute, ''{0}'', on MBean, ''{1}'', threw an exception.
+10424=The value, ''{0}'', specified for the attribute, ''{1}'', on MBean, ''{2}'', is not valid.
+10425=A reflection exception was thrown while invoking the setAttributes method for the dynamic MBean, ''{0}''
+10426=The MBean, ''{0}'', cannot be registered because the previous MBean with the same name could not be unregistered possibly due to some security setting on the application server. This can be avoided by setting manageable property to false in the configuration file.
+10427=MBeanServerLocator ''{0}'' failed to retrieve MBeanServer.
+10428=The admin console registrar could not be found.
+
+# 10450-10499: Service error messages
+10450=Unable to create service ''{0}'' for ''{1}'' due to the following error: {2}.
+10451=Command forbidden on service ''{0}''.
+10452=Unable to create service ''{0}'' for ''{1}'' due to the following error: class ''{2}'' could not be found in the classpath.
+10453=Unable to create service ''{0}'' for ''{1}'' due to a dependency on commons-logging.jar. To resolve this, copy commons-logging.jar from WEB-INF/flex/jars to WEB-INF/lib or add your desired version of commons-logging.jar to the classpath for this web application.
+10454=The ''{0}'' service can only process messages of type ''{1}''.
+10455=Destination ''{0}'' is not registered with service ''{1}''.
+
+
+# 10500-10549: Data adapter error messages. (in LCDS errors.properties)
+
+# 10550-10599: MessageService error messages.
+10550=The selector expression is not valid: {0}
+10551=Not subscribed to destination ''{0}''.
+10552=Unknown CommandMessage operation: {0}
+10553=Attempt to subscribe or unsubscribe to the subtopic, ''{0}'', on destination, ''{1}'', that does not allow subtopics failed.
+10554=The subtopic, ''{0}'', is not valid.
+10556=The sent message contains a subtopic wildcard, ''{0}'', which is not allowed.
+10557=Your subscribe request to the subtopic, ''{0}'', was denied.
+10558=Your sent message to the subtopic, ''{0}'', was blocked.
+10559=Duplicate subscription. Another client has already subscribed with the clientId, ''{0}''.
+10560=Attempt to subscribe to the subtopic, ''{0}'', on destination, ''{1}'', that does not allow wildcard subtopics failed.
+
+# 10600-10649: Message selector error messages.
+10600=Failed to parse the selector ''{0}''. {1}
+10601=Selector ''{0}'' attempted to match a value using an incompatible data type. Please review your selector expression and ensure that any string values you intend to match are quoted and non-string values are not.
+10602=Matching the selector ''{0}'' generated a parser error. {1}
+
+# 10650 - 10699: Remoting Service error messages.
+10650=Destination ''{0}'' is not registered with the Remoting Service.
+10652=Cannot create session scoped component for destination ''{0}'' because a session is not available.
+10653=Invalid scope setting for remoting destination ''{0}''. Valid options are {1}.
+10654=Invalid class found in attribute-id ''{0}'' for component of scope ''{1}'' for destination ''{2}''.  Expected an instance of class: ''{3}'' but found class ''{4}''.
+10656=Error instantiating application scoped instance of type ''{0}'' for destination ''{1}''.
+10657=MessageBroker with server id ''{0}'' does not contain a service with class flex.messaging.services.RemotingService
+10658=The remoting method being configured for remoting destination ''{0}'' must have a non-null name.
+10659=The remoting method ''{0}'' for remoting destination ''{1}'' is attempting to reference security constraint ''{2}'' that is not defined.
+10660=The remoting method ''{0}'' is not defined by the source class for remoting destination ''{1}''.
+
+# 10700 - 10749: HTTP Proxy Service error messages.
+10700=Can't use ''..'' in URLs (security violation).
+10701=A destination that allows multiple domains or ports does not allow authentication.
+10702=The URL specified ''{0}'' is not allowed by the selected destination ''{1}''.
+Dynamic URL is not configured in the whitelist.
+10703=Flex does not allow {0} cookies to be sent in a single request.
+10704=The relative URL ''{0}'' cannot be supported as the request was not made via HTTP.
+10705=A valid target URL was not specified: ''{0}''
+10706=Error sending request
+10706-1-details={0}
+10707=Unknown Host: {0}
+10708={0}
+10708-1-details={0}
+10709=HTTP Proxy response stream was null.
+10710=Cannot stream response to client. Request was not sent via HTTP.
+10711=Error writing response from HTTP Proxy: {0}
+10712=Invalid URL - only HTTP or HTTPS URLs allowed.
+10713=Invalid URL - can''t access HTTPS URLs when accessing proxy via HTTP.
+10714=Cannot support Basic Authentication. Request was not sent via HTTP.
+10715=A disallowed status code was returned - the proxy does not allow BASIC authentication attempts on a web service. Please secure your WSDL or use custom authentication.
+10716=The Flex proxy and the specified endpoint do not have the same domain, and so basic authentication cannot be used.  Please set use-custom-auth to true or set remote-username and remote-password services not located on the same domain as the Flex proxy.
+10717=Login required.
+10718=Access denied. User not authorized.
+10719=Invalid HTTP method ''{0}''
+
+# 10750-10799: RTMPS error messages. (in LCDS errors.properties)
+
+# 10800-10849: JMSAdapter error messages.
+10800=A <property> element for the <initial-context-environment> settings for the ''{0}'' destination does not specify both <name> and <value> subelements.
+10801=A <property> element for the <initial-context-environment> settings for the ''{0}'' destination specifies an invalid javax.naming.Context field for its <name>: {1}
+10802=A <property> element for the <initial-context-environment> settings for the ''{0}'' destination specifies an inaccessible javax.naming.Context field for its <name>: {1}
+10803=The <initial-context-environment> settings for the ''{0}'' destination does not include any <property> subelements.
+10804=JMS connection factory of message destinations with JMS Adapters must be specified.
+10805=JMS Adapter destination type must be Topic or Queue.
+# 10806=Client with the id ''{0}'' is not subscribed with the JMS adapter.
+10807=JNDI names for message destinations with JMS Adapters must be specified.
+10808=Invalid Acknowledge Mode ''{0}''. Valid values are AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE, and CLIENT_ACKNOWLEDGE.
+10809=Invalid Delivery Mode ''{0}''. Valid values are DEFAULT_DELIVERY_MODE, PERSISTENT, and NON_PERSISTENT.
+10810=The body of the Flex message could not be converted to a Serializable Java Object.
+10811=Unsupported JMS Message Type ''{0}''. Valid values are javax.jms.TextMessage, javax.jms.ObjectMessage, and javax.jms.MapMessage.
+10812=The body of the Flex message could not be converted to a Java Map object.
+10813=JMS queue proxy for JMS destination ''{0}'' has a destination type of ''{1}'' which is not Queue.
+10814=JMS queue proxy for JMS destination ''{0}'' has a connection factory type of ''{1}'' which is not QueueConnectionFactory.
+10815=JMS topic proxy for JMS destination ''{0}'' has a destination type of ''{1}'' which is not Topic.
+10816=JMS topic proxy for JMS destination ''{0}'' has a connection factory type of ''{1}'' which is not TopicConnectionFactory.
+10817=Invalid delivery-settings mode ''{0}''. Valid values are async and sync.
+10818=JMS consumer for JMS destination ''{0}'' is configured to use async message receiver but the application server does not allow ''{1}'' call used in async message receiver. Please switch to sync message receiver.
+10819=JMS topic consumer for JMS destination ''{0}'' is configured to use durable subscriptions but the application server does not permit javax.jms.Connection.setClientID method needed to support durable subscribers. Set durable property to false.
+10820=Client is unsubscribed because its corresponding JMS consumer for JMS destination ''{0}'' encountered an error during message delivery: {1}
+10821=Client is unsubscribed because its corresponding JMS consumer has been removed from the JMS adapter.
+10822=Client is unsubscribed because its corresponding JMS consumer for JMS destination ''{0}'' has been stopped.
+10823=JMS topic consumer for JMS destination ''{0}'' is configured to use durable subscriptions but it does not have a durable subscription name.
+10824=JMS invocation caught exception: {0}.
+# 10850-10899: RTMP error messages. (in LCDS errors.properties)
+
+# 11100-11149: Server configuration error messages. (continuation from 10100-10149 block)
+11100=Invalid channel endpoint URI, {0}, must begin with {1}.
+11101=The factory tag with class ''{0}'' does not implement the flex.messaging.FlexFactory interface.
+11102=An error occurred trying to construct FlexFactory ''{0}''.   The underlying cause is: ''{1}''.
+11103=Invalid factory id: ''{1}'' for destination ''{0}''.  Look for a factory tag with this id under the factories tag for your configuration.
+11104=Unexpected text ''{0}'' found in ''{1}'' from file: {2}.
+11105=Please specify a valid ''flex.write.path'' in web.xml.
+11106=Please specify a valid <services/> file path in flex-config.xml.
+11107=Please specify a valid include file. ''{0}'' is invalid.
+11108=Please specify a valid ''services.configuration.file'' in web.xml. You specified ''{0}''. This is not a valid file system path reachable via the app server and is also not a path to a resource in your J2EE application archive.
+11109=Could not register endpoint ''{0}'' because its URL, ''{1}'', is already used by endpoint ''{2}''
+11110=Cannot add null ''{0}'' to the ''{1}''
+11111=Cannot add ''{0}'' with null id to the ''{1}''
+11112=Cannot add a {0} with the id ''{1}'' that is already registered with the {2}
+11113=Please specify a valid include directory. ''{0}'' is invalid.
+11114=No adapter with id ''{0}'' is registered with the service ''{1}''.
+11115=Cannot change the ''{0}'' property of a component after startup.
+11116=The ''{0}'' property of a component cannot be null.
+11117=Destination cannot create adapter ''{0}'' without its Service set.
+11118=Factory cannot be returned without ''{0}'' set.
+11119=Cannot add destination with id ''{0}'' to service with id ''{1}'' because another service with id ''{2}'' already has a destination with the same id.
+11120=The services configuration includes a channel-definition ''{0}'' that has an endpoint with a context.root token but a context root has not been defined. Please specify a context-root compiler argument.
+11121=The value of the cluster-message-routing attribute needs to be either the value 'server-to-server' (the default) or 'broadcast'.
+11122=Invalid location: ''{0}''. Please specify a valid LiveCycle Data Services Configuration file via the LiveCycle Admin UI.
+11123=Invalid <timeout-minutes> value ''{0}'' in the <flex-client> configuration section. Please specify a positive value or leave the element undefined in which case flex client instances on the server will be timed out when all associated sessions/connections have shut down.
+11124=Invalid default-security-constraint reference ''{0}'' in service ''{1}''.
+11125=Token ''{0}'' in ''{1}'' was not replaced. Either supply a value to this token with a JVM option or remove it from the configuration.
+11126=Invalid ''{0}'' value, ''{1}'', for ''{2}'' with id ''{3}''.
+11127=Cannot have multiple channels with the same id ''{0}''.
+11128=The endpoint, ''{0}'', is attempting to use a referenced server, ''{1}'', but no shared server is defined with this id.
+11129=The configuration is attempting to use functionality that requires the flex.messaging.services.AdvancedMessagingSupport service to be registered. This includes 'reliable' network settings for destinations, buffer/conflate throttling policies, and adaptive server-to-client message frequency settings.
+11130=Invalid inbound throttle policy ''{0}'' for destination ''{1}''. Valid values are 'NONE', 'ERROR', and 'IGNORE'.
+11131=Invalid {0} for destination ''{1}''. {0} ''{2}'' cannot be more than the incoming destination frequency ''{3}''.
+11132=Invalid {0} for destination ''{1}''. {0} ''{2}'' cannot be less than the incoming client frequency ''{3}''.
+11133=Invalid {0} for destination ''{1}''. {0} ''{2}'' cannot be more than the outgoing destination frequency ''{3}''.
+11134=Invalid {0} for destination ''{1}''. {0} ''{2}'' cannot be less than the outgoing client frequency ''{3}''.
+11135=Invalid {0} for destination ''{1}''. {0} cannot be negative.
+11136=Cannot add multiple validators with the same type ''{0}''.
+11137=Invalid <reliable-reconnect-duration-millis> value ''{0}'' in the <flex-client> configuration section. Please specify a positive value or leave the element undefined.
+11138=Failed to add an asynchronous message filter with id ''{0}'' to broker''s filter chain.
+11139=Endpoint ''{0}'' needs to have either class or server-only attribute defined.
+11140=Endpoint ''{0}'' cannot have both class and server-only attribute defined.
+11141=Invalid {0} configuration for endpoint ''{1}''; no urls defined.
+11142=Invalid {0} configuration for endpoint ''{1}''; cannot add empty url.
+11143=Failed to add a synchronous message filter with id ''{0}'' to broker''s filter chain.
+11144=The filter with id ''{0}'' registered within <async-message-filters> does not subclass the asynchronous flex.messaging.filters.BaseAsyncMessageFilter either directly or indirectly.
+11145=The filter with id ''{0}'' registered within <sync-message-filters> does not subclass the synchronous flex.messaging.filters.BaseSyncMessageFilter either directly or indirectly.
+11146=Invalid <heartbeat-interval-millis> value ''{0}'' in the <flex-client> configuration section. Please specify a positive value or leave the element undefined.
+11147=Invalid {0} configuration for endpoint ''{1}''; cannot add url with tokens.
+11148=UUID Generator class is not a valid subclass of ''{0}''.
+11149=Flex Configuration does not allow external entity defined by publicId ''{0}'' and SystemId ''{1}''
+# continued again in the 11400-11449 block
+
+# 11150-11199: license messages (in LCDS errors.properties)
+
+# 11200-11249: Data adapter error messages. (in LCDS errors.properties)
+
+# 11250-11300: SQL assembler error messages. (in LCDS errors.properties)
+
+# 11300-11349: Live Cycle Remoting error messages. (in LCDS errors.properties)
+
+# 11350-11399: WSRP Generation error messages. (in LCDS errors.properties)
+
+# 11400-11449: Server configuration error messages. (continuation from 11100-11149 block)
+11400=Only one validator is allowed to implement DeserializationValidator.  ''{0}'' has already been added.  ''{1}'' cannot be added as a validator.
+
+# 12000-12499: PDF Services error messages. (in LCDS errors.properties)
+
+# 13000-13499: Collaboration Services error messages.
+
+# 13500-13549: General SSL error messages. (in LCDS errors.properties)
+
+# 13550-13599: General socket server error messages (in LCDS errors.properties)
+
+# 13600-13649: flex.messaging.util.concurrent.Executor and related error messages.
+13600=Cannot create AsyncBeansWorkManagerExecutor because no WorkManager is bound in JNDI under the name ''{0}''.
+
+# 13650-13699: General NIO Endpoints error messages (in LCDS errors.properties)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/modules/common/src/flex/messaging/log/AbstractTarget.java
----------------------------------------------------------------------
diff --git a/modules/common/src/flex/messaging/log/AbstractTarget.java b/modules/common/src/flex/messaging/log/AbstractTarget.java
new file mode 100755
index 0000000..82b455f
--- /dev/null
+++ b/modules/common/src/flex/messaging/log/AbstractTarget.java
@@ -0,0 +1,268 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package flex.messaging.log;
+
+import flex.messaging.LocalizedException;
+import flex.messaging.config.ConfigMap;
+import flex.messaging.util.UUIDUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @exclude
+ */
+public abstract class AbstractTarget implements Target
+{
+    private static final int INVALID_FILTER_CHARS = 10016;
+    private static final int INVALID_FILTER_STAR = 10017;
+
+    protected final String id;
+    protected List filters;
+    protected volatile short level;
+    protected volatile int loggerCount;
+    private final Object lock = new Object();
+    private boolean usingDefaultFilter = false;
+
+    //--------------------------------------------------------------------------
+    //
+    // Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Default constructor.
+     */
+    public AbstractTarget()
+    {
+        id = UUIDUtils.createUUID();
+        level = LogEvent.ERROR;
+        filters = new ArrayList();
+        filters.add("*");
+        usingDefaultFilter = true;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Initialize, validate, start, and stop methods.
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Initializes the target with id and properties. Subclasses can overwrite.
+     *
+     * @param id id for the target which is ignored.
+     * @param properties ConfigMap of properties for the target.
+     */
+    public void initialize(String id, ConfigMap properties)
+    {
+        // No-op
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Public Getters and Setters for AbstractTarget properties
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Return a read-only snap-shot of the current filters for this target.
+     *
+     * @return An unmodifiable list of filters.
+     */
+    public List getFilters()
+    {
+        return Collections.unmodifiableList(new ArrayList(filters));
+    }
+
+    /**
+     * Adds a filter to this target.
+     *
+     * @param value Filter to be added.
+     */
+    public void addFilter(String value)
+    {
+        if (value != null)
+            validateFilter(value);
+        else // Default to "*"
+            value = "*";
+
+        boolean filterWasAdded = false;
+        synchronized (lock)
+        {
+            if (!filters.contains(value))
+            {
+                // If the default filter is being used, remove it.
+                if (usingDefaultFilter)
+                {
+                    removeFilter("*");
+                    usingDefaultFilter = false;
+                }
+                filters.add(value);
+                filterWasAdded = true;
+            }
+        }
+        if (filterWasAdded)
+            Log.processTargetFilterAdd(this, value);
+    }
+
+    /**
+     * Removes a filter from this target.
+     *
+     * @param value Filter to be removed.
+     */
+    public void removeFilter(String value)
+    {
+        boolean filterWasRemoved;
+        synchronized (lock)
+        {
+            filterWasRemoved = filters.remove(value);
+        }
+        if (filterWasRemoved)
+            Log.processTargetFilterRemove(this, value);
+    }
+
+    /**
+     * Sets the list of filters for this target.
+     *
+     * @param value List of filters.
+     */
+    public void setFilters(List value)
+    {
+        if (value != null && value.size() > 0)
+        {
+            // a valid filter value will be fully qualified or have a wildcard
+            // in it.  the wild card can only be located at the end of the
+            // expression.  valid examples  xx*, xx.*,  *
+            for (int i = 0; i < value.size(); i++)
+            {
+                validateFilter((String) value.get(i));
+            }
+        }
+        else
+        {
+            // if null was specified then default to all
+            value = new ArrayList();
+            value.add("*");
+        }
+
+        Log.removeTarget(this);
+        synchronized (lock)
+        {
+            filters = value;
+            usingDefaultFilter = false;
+        }
+        Log.addTarget(this);
+    }
+
+    /**
+     * Return the log level for this target.
+     */
+    public short getLevel()
+    {
+        return level;
+    }
+
+    /**
+     * Return the target's unique ID.
+     */
+    public String getId()
+    {
+        return id;
+    }
+
+    /**
+     * Sets the log level for this target. If not set, defaults to <code>LogEvent.ERROR</code>.
+     */
+    public void setLevel(short value)
+    {
+        level = value;
+        Log.resetTargetLevel();
+    }
+
+    /**
+     * Sets up this target with the specified logger.
+     * This allows this target to receive log events from the specified logger.
+     *
+     * @param logger this target should listen to.
+     */
+    public void addLogger(Logger logger)
+    {
+        if (logger != null)
+        {
+            synchronized (lock)
+            {
+                loggerCount++;
+            }
+            logger.addTarget(this);
+        }
+    }
+
+    /**
+     * Stops this target from receiving events from the specified logger.
+     *
+     * @param logger this target should ignore.
+     */
+    public void removeLogger(Logger logger)
+    {
+        if (logger != null)
+        {
+            synchronized (lock)
+            {
+                loggerCount--;
+            }
+            logger.removeTarget(this);
+        }
+    }
+
+    /**
+     * @param filter category to check against the filters defined for this target
+     * @return whether filter is defined
+     */
+    public boolean containsFilter(String filter)
+    {
+        return filters.contains(filter);
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Protected/private methods.
+    //
+    //--------------------------------------------------------------------------
+
+    private void validateFilter(String value)
+    {
+        // check for invalid characters
+        if (Log.hasIllegalCharacters(value))
+        {
+            //Error for filter '{filter}'. The following characters are not valid: {Log.INVALID_CHARS}
+            LocalizedException ex = new LocalizedException();
+            ex.setMessage(INVALID_FILTER_CHARS, new Object[]{value, Log.INVALID_CHARS});
+            throw ex;
+        }
+
+        int index = value.indexOf('*');
+        if ((index >= 0) && (index != (value.length() - 1)))
+        {
+            //Error for filter '{filter}'. '*' must be the right most character.
+            LocalizedException ex = new LocalizedException();
+            ex.setMessage(INVALID_FILTER_STAR, new Object[]{value});
+            throw ex;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/modules/common/src/flex/messaging/log/ConsoleTarget.java
----------------------------------------------------------------------
diff --git a/modules/common/src/flex/messaging/log/ConsoleTarget.java b/modules/common/src/flex/messaging/log/ConsoleTarget.java
new file mode 100755
index 0000000..d33c1e0
--- /dev/null
+++ b/modules/common/src/flex/messaging/log/ConsoleTarget.java
@@ -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 flex.messaging.log;
+
+/**
+ * @exclude
+ */
+public class ConsoleTarget extends LineFormattedTarget
+{
+    //--------------------------------------------------------------------------
+    //
+    // Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Default constructor.
+     */
+    public ConsoleTarget()
+    {
+        super();
+    }
+
+    protected void internalLog(String message)
+    {
+        System.out.println(message);
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/modules/common/src/flex/messaging/log/LineFormattedTarget.java
----------------------------------------------------------------------
diff --git a/modules/common/src/flex/messaging/log/LineFormattedTarget.java b/modules/common/src/flex/messaging/log/LineFormattedTarget.java
new file mode 100755
index 0000000..d72387b
--- /dev/null
+++ b/modules/common/src/flex/messaging/log/LineFormattedTarget.java
@@ -0,0 +1,286 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package flex.messaging.log;
+
+import flex.messaging.config.ConfigMap;
+import flex.messaging.util.ExceptionUtil;
+import flex.messaging.util.StringUtils;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @exclude
+ */
+public class LineFormattedTarget extends AbstractTarget
+{
+    /**
+     * Indicates if the date should be added to the trace.
+     */
+    protected boolean includeDate;
+
+    /**
+     * Indicates if the time should be added to the trace.
+     */
+    protected boolean includeTime;
+
+    /**
+     * Indicates if the level for the event should added to the trace.
+     */
+    protected boolean includeLevel;
+
+    /**
+     * Indicates if the category for this target should added to the trace.
+     */
+    protected boolean includeCategory;
+
+    /**
+     * A prefix to prepend onto each logged message.
+     */
+    protected String prefix = null;
+
+    /**
+     * The formatter to write the date as part of the logging statement.
+     * Defaults to MM/dd/yyyy format.
+     */
+    protected DateFormat dateFormater = new SimpleDateFormat("MM/dd/yyyy");
+
+    /**
+     * The formatter to write the time as part of the logging statement.
+     * Defaults to HH:mm:ss.SSS format.
+     */
+    protected DateFormat timeFormatter = new SimpleDateFormat("HH:mm:ss.SSS");
+
+    //--------------------------------------------------------------------------
+    //
+    // Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Default constructor.
+     */
+    public LineFormattedTarget()
+    {
+        super();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Initialize, validate, start, and stop methods.
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Initializes the target with id and properties. Subclasses can overwrite.
+     *
+     * @param id id for the target which is ignored.
+     * @param properties ConfigMap of properties for the target.
+     */
+    public void initialize(String id, ConfigMap properties)
+    {
+        super.initialize(id, properties);
+
+        includeTime = properties.getPropertyAsBoolean("includeTime", false);
+        includeDate = properties.getPropertyAsBoolean("includeDate", false);
+        includeCategory = properties.getPropertyAsBoolean("includeCategory", false);
+        includeLevel = properties.getPropertyAsBoolean("includeLevel", false);
+        prefix = properties.getPropertyAsString("prefix", null);
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Public Getters and Setters for AbstractService properties
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Returns includeCategory property.
+     *
+     * @return <code>true</code> if category is included; <code>false</code> otherwise.
+     */
+    public boolean isIncludeCategory()
+    {
+        return includeCategory;
+    }
+
+    /**
+     * Sets includeCategory property.
+     *
+     * @param includeCategory the include category
+     */
+    public void setIncludeCategory(boolean includeCategory)
+    {
+        this.includeCategory = includeCategory;
+    }
+
+    /**
+     * Returns includeDate property.
+     *
+     * @return <code>true</code> if date is included; <code>false</code> otherwise.
+     */
+    public boolean isIncludeDate()
+    {
+        return includeDate;
+    }
+
+    /**
+     * Sets includeDate property.
+     *
+     * @param includeDate the include date 
+     */
+    public void setIncludeDate(boolean includeDate)
+    {
+        this.includeDate = includeDate;
+    }
+
+    /**
+     * Returns includeLevel property.
+     *
+     * @return <code>true</code> if level is included; <code>false</code> otherwise.
+     */
+    public boolean isIncludeLevel()
+    {
+        return includeLevel;
+    }
+
+    /**
+     * Sets includeLevel property.
+     *
+     * @param includeLevel the include level
+     */
+    public void setIncludeLevel(boolean includeLevel)
+    {
+        this.includeLevel = includeLevel;
+    }
+
+    /**
+     * Returns includeTime property.
+     *
+     * @return <code>true</code> if time is included; <code>false</code> otherwise.
+     */
+    public boolean isIncludeTime()
+    {
+        return includeTime;
+    }
+
+    /**
+     * Sets includeTime property.
+     *
+     * @param includeTime the include time
+     */
+    public void setIncludeTime(boolean includeTime)
+    {
+        this.includeTime = includeTime;
+    }
+
+    /**
+     * Returns prefix property.
+     *
+     * @return The prefix for log messages.
+     */
+    public String getPrefix()
+    {
+        return prefix;
+    }
+
+    /**
+     * Sets prefix property.
+     *
+     * @param prefix the prefix string
+     */
+    public void setPrefix(String prefix)
+    {
+        this.prefix = prefix;
+    }
+
+    /**
+     * This method handles a <code>LogEvent</code> from an associated logger.
+     * A target uses this method to translate the event into the appropriate
+     * format for transmission, storage, or display.
+     * This method will be called only if the event's level is in range of the
+     * target's level.
+     * @param event the log event
+     */
+    public void logEvent(LogEvent event)
+    {
+        String pre = "";
+        if (prefix != null)
+        {
+            pre = prefix + " "; // any space is stripped from config
+        }
+
+        String date = "";
+        if (includeDate || includeTime)
+        {
+            StringBuffer buffer = new StringBuffer();
+            Date d = new Date();
+            if (includeDate)
+            {
+                buffer.append(dateFormater.format(d));
+                buffer.append(" ");
+            }
+            if (includeTime)
+            {
+                buffer.append(timeFormatter.format(d));
+                buffer.append(" ");
+            }
+            date = buffer.toString();
+        }
+
+        String cat = includeCategory ?
+                           ("[" + event.logger.getCategory() + "] ") : "";
+        String level = "";
+        if (includeLevel)
+        {
+            StringBuffer buffer = new StringBuffer();
+            buffer.append("[");
+            buffer.append(LogEvent.getLevelString(event.level));
+            buffer.append("]");
+            buffer.append(" ");
+            level = buffer.toString();
+        }
+        StringBuffer result = new StringBuffer(pre);
+        result.append(date).append(level).append(cat).append(event.message);
+
+        if (event.throwable != null)
+            result.append(StringUtils.NEWLINE).append(ExceptionUtil.toString(event.throwable));
+
+        internalLog(result.toString());
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Protected/private methods.
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Descendants of this class should override this method to direct the
+     * specified message to the desired output.
+     *
+     * @param  message String containing preprocessed log message which may
+     * include time, date, category, etc. based on property settings,
+     * such as <code>includeDate</code>, <code>includeCategory</code>,
+     * etc.
+     */
+    protected void internalLog(String message)
+    {
+        // override this method to perform the redirection to the desired output
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/modules/common/src/flex/messaging/log/Log.java
----------------------------------------------------------------------
diff --git a/modules/common/src/flex/messaging/log/Log.java b/modules/common/src/flex/messaging/log/Log.java
new file mode 100755
index 0000000..4ae4d20
--- /dev/null
+++ b/modules/common/src/flex/messaging/log/Log.java
@@ -0,0 +1,704 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package flex.messaging.log;
+
+import flex.messaging.LocalizedException;
+import flex.messaging.config.ConfigMap;
+import flex.messaging.util.PrettyPrinter;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.HashSet;
+
+/**
+ * @exclude
+ */
+public class Log
+{
+
+    /** @exclude **/
+    public static final String INVALID_CHARS = "[]~$^&\\/(){}<>+=`!#%?,:;\'\"@";
+
+    // Errors
+    private static final int INVALID_TARGET = 10013;
+    private static final int INVALID_CATEGORY = 10014;
+    private static final int INVALID_CATEGORY_CHARS = 10015;
+
+    private static Log log;
+    private static PrettyPrinter prettyPrinter;
+    private static String prettyPrinterClass = "BasicPrettyPrinter";
+
+    private static final HashSet excludedProperties = new HashSet();
+    /** @exclude **/
+    public static final String VALUE_SUPRESSED = "** [Value Suppressed] **";
+
+    private volatile short targetLevel;
+    private final Map loggers;
+    private final List targets;
+    private final Map targetMap;
+    private static final Object staticLock = new Object();
+
+
+    //--------------------------------------------------------------------------
+    //
+    // Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Private constructor.
+     */
+    private Log()
+    {
+        targetLevel = LogEvent.NONE;
+        loggers = new HashMap();
+        targets = new ArrayList();
+        targetMap = new LinkedHashMap();
+    }
+
+
+    /**
+     * Creates the log on first access, returns already created log on
+     * subsequent calls.
+     *
+     * @return log.
+     */
+    public static Log createLog()
+    {
+        synchronized (staticLock)
+        {
+            if (log == null)
+                log = new Log();
+
+            return log;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Initialize, validate, start, and stop methods.
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Initializes Log with id and properties.
+     *
+     * @param id Id for the Log which is ignored, though is used by the ManageableComponent superclass
+     * @param properties ConfigMap of properties for the Log.
+     */
+    public static synchronized void initialize(String id, ConfigMap properties)
+    {
+        String value = properties.getPropertyAsString("pretty-printer", null);
+        if (value != null)
+            prettyPrinterClass = value;
+
+        // Create a HashSet with the properties that we want to exclude from the
+        // list of properties given by 'getPropertiesAsList'
+        ConfigMap excludeMap = properties.getPropertyAsMap("exclude-properties", null);
+        if (excludeMap != null)
+        {
+            if (excludeMap.getPropertyAsList("property", null) != null)
+                excludedProperties.addAll(excludeMap.getPropertyAsList("property", null));
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Public Getters and Setters for Log properties
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * Indicates whether a fatal level log event will be processed by a log target.
+     * @return boolean true if it is Fatal level
+     */
+    public static boolean isFatal()
+    {
+        return log == null ? false : log.targetLevel <= LogEvent.FATAL;
+    }
+
+    /**
+     * Indicates whether an error level log event will be processed by a log target.
+     * @return boolean true if it is Error level
+     */
+    public static boolean isError()
+    {
+        return log == null ? false : log.targetLevel <= LogEvent.ERROR;
+    }
+
+    /**
+     * Indicates whether a warn level log event will be processed by a log target.
+     * @return boolean true if it is Warn level
+     */
+    public static boolean isWarn()
+    {
+        return log == null ? false : log.targetLevel <= LogEvent.WARN;
+    }
+
+    /**
+     * Indicates whether an info level log event will be processed by a log target.
+     * @return boolean true if it is Info level
+     */
+    public static boolean isInfo()
+    {
+        return log == null ? false : log.targetLevel <= LogEvent.INFO;
+    }
+
+    /**
+     * Indicates whether a debug level log event will be processed by a log target.
+     * @return boolean true if it is debug level
+     */
+    public static boolean isDebug()
+    {
+        return log == null ? false : log.targetLevel <= LogEvent.DEBUG;
+    }
+
+    /**
+     * Indicates whether a log property should be excluded.
+     * @param property the property to check
+     * @return boolean true if the property should be excluded
+     */
+    public static boolean isExcludedProperty(String property)
+    {
+        return !excludedProperties.isEmpty() && excludedProperties.contains(property);
+    }
+
+
+    /**
+     * Given a category, returns the logger associated with the category.
+     *
+     * @param category Categogry for the logger.
+     * @return Logger associated with the category.
+     */
+    public static Logger getLogger(String category)
+    {
+        if (log != null)
+            return getLogger(log, category);
+
+        // Return a dummy logger?
+        return new Logger(category);
+    }
+
+    /**
+     * @exclude
+     */
+    public static Logger getLogger(Log log, String category)
+    {
+        checkCategory(category);
+
+        synchronized (staticLock)
+        {
+            Logger result = (Logger) log.loggers.get(category);
+            if (result == null)
+            {
+                result = new Logger(category);
+
+                // Check to see if there are any targets for this logger.
+                for (Iterator iter = log.targets.iterator(); iter.hasNext();)
+                {
+                    Target target = (Target) iter.next();
+                    if (categoryMatchInFilterList(category, target.getFilters()))
+                        target.addLogger(result);
+                }
+
+                log.loggers.put(category, result);
+            }
+            return result;
+        }
+    }
+
+    /**
+     * Returns an unmodifiable snapshot of the targets registered with this Log when the
+     * method is invoked.
+     * @return List the list of targets 
+     */
+    public static List getTargets()
+    {
+        if (log != null)
+        {
+            List currentTargets;
+            // Snapshot the current target list (shallow copy) and return it.
+            synchronized (staticLock)
+            {
+                currentTargets = Collections.unmodifiableList(new ArrayList(log.targets));
+            }
+            return currentTargets;
+        }
+        return null;
+    }
+
+    /**
+     * Return the Log's map of targets keyed on their human-readable ids (e.g. ConsoleTarget0, ConsoleTarget1, etc.)
+     * @return Map the target map
+     */
+    public static Map getTargetMap()
+    {
+        if (log != null)
+        {
+            Map currentTargets;
+            synchronized (staticLock)
+            {
+                currentTargets = new LinkedHashMap(log.targetMap);
+            }
+            return currentTargets;
+        }
+        return null;
+    }
+
+    /**
+     * Returns the target associated with the unique ID searchId.  Returns null if no
+     * such target exists.
+     * @param searchId the search ID
+     * @return Target the associated target
+     */
+    public static Target getTarget(String searchId)
+    {
+        if (log != null)
+        {
+            synchronized (staticLock)
+            {
+                return (Target) log.targetMap.get(searchId);
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Return the categories for all of the loggers
+     * @return String[] the categories for all of the loggers
+     */
+    public String[] getLoggers()
+    {
+        String[] currentCategories;
+        if (log != null)
+        {
+            synchronized (staticLock)
+            {
+                Object[] currentCategoryObjects = loggers.keySet().toArray();
+                currentCategories = new String[currentCategoryObjects.length];
+                for (int i = 0; i < currentCategoryObjects.length; i++)
+                {
+                    currentCategories[i] = (String)(currentCategoryObjects[i]);
+                }
+            }
+        }
+        else
+        {
+            currentCategories = new String[0];
+        }
+
+        return currentCategories;
+    }
+
+    /**
+     * Adds a target to the log.
+     *
+     * @param target Target to be added.
+     */
+    public static void addTarget(Target target)
+    {
+        if (log != null)
+        {
+            if (target != null)
+            {
+                synchronized (staticLock)
+                {
+                    List filters = target.getFilters();
+
+                    // need to find what filters this target matches and set the specified
+                    // target as a listener for that logger.
+                    Iterator it = log.loggers.keySet().iterator();
+                    while (it.hasNext())
+                    {
+                        String key = (String) it.next();
+                        if (categoryMatchInFilterList(key, filters))
+                            target.addLogger((Logger) log.loggers.get(key));
+                    }
+                    // if we found a match all is good, otherwise we need to
+                    // put the target in a waiting queue in the event that a logger
+                    // is created that this target cares about.
+                    if (!log.targets.contains(target))
+                        log.targets.add(target);
+
+                    if (!log.targetMap.containsValue(target))
+                    {
+                        String name = target.getClass().getName();
+
+                        if (name.indexOf(".") > -1)
+                        {
+                            String[] classes = name.split("\\.");
+                            name = classes[classes.length - 1];
+                        }
+
+                        log.targetMap.put(new String(name + log.targetMap.size()), target);
+                    }
+
+                    // update our global target log level if this target is more verbose.
+                    short targetLevel = target.getLevel();
+                    if (log.targetLevel == LogEvent.NONE)
+                        log.targetLevel = targetLevel;
+                    else if (targetLevel < log.targetLevel)
+                    {
+                        log.targetLevel = targetLevel;
+                    }
+                }
+            }
+            else
+            {
+                // Invalid target specified. Target must not be null.
+                LocalizedException ex = new LocalizedException();
+                ex.setMessage(INVALID_TARGET);
+                throw ex;
+            }
+        }
+    }
+
+    /**
+     * Removes a target from the log.
+     *
+     * @param target The target to be removed.
+     */
+    public static void removeTarget(Target target)
+    {
+        if (log != null)
+        {
+            if (target != null)
+            {
+                synchronized (staticLock)
+                {
+                    // Remove the target from any associated loggers.
+                    List filters = target.getFilters();
+                    Iterator it = log.loggers.keySet().iterator();
+                    while (it.hasNext())
+                    {
+                        String key = (String) it.next();
+                        if (categoryMatchInFilterList(key, filters))
+                            target.removeLogger((Logger) log.loggers.get(key));
+                    }
+                    // Remove the target from the Log set.
+                    log.targets.remove(target);
+                    resetTargetLevel();
+                }
+            }
+            else
+            {
+                // Invalid target specified. Target must not be null.
+                LocalizedException ex = new LocalizedException();
+                ex.setMessage(INVALID_TARGET);
+                throw ex;
+            }
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Other Public APIs
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     * This method removes all of the current loggers and targets from the cache.
+     * and resets target level.
+     */
+    public static synchronized void reset()
+    {
+        flush();
+    }
+
+    /**
+     * @exclude
+     */
+    public static void flush()
+    {
+        if (log != null)
+        {
+            log.loggers.clear();
+            log.targets.clear();
+            log.targetLevel = LogEvent.NONE;
+        }
+    }
+
+    /**
+     * @exclude
+     */
+    public static short readLevel(String l)
+    {
+        short lvl = LogEvent.ERROR;
+        if ((l != null) && (l.length() > 0))
+        {
+            l = l.trim().toLowerCase();
+            char c = l.charAt(0);
+            switch (c)
+            {
+                case 'n':
+                    lvl = LogEvent.NONE;
+                    break;
+                case 'e':
+                    lvl = LogEvent.ERROR;
+                    break;
+                case 'w':
+                    lvl = LogEvent.WARN;
+                    break;
+                case 'i':
+                    lvl = LogEvent.INFO;
+                    break;
+                case 'd':
+                    lvl = LogEvent.DEBUG;
+                    break;
+                case 'a':
+                    lvl = LogEvent.ALL;
+                    break;
+                default:
+                    lvl = LogEvent.ERROR;
+            }
+        }
+
+        return lvl;
+    }
+
+    /**
+     * @exclude
+     * This method checks the specified string value for illegal characters.
+     *
+     * @param value to check for illegal characters.
+     *              The following characters are not valid:
+     *              []~$^&amp;\/(){}&lt;&gt;+=`!#%?,:;'"&amp;#64;
+     * @return <code>true</code> if there are any illegal characters found,
+     *         <code>false</code> otherwise
+     */
+    public static boolean hasIllegalCharacters(String value)
+    {
+        char[] chars = value.toCharArray();
+        for (int i = 0; i < chars.length; i++)
+        {
+            char c = chars[i];
+            if (INVALID_CHARS.indexOf(c) != -1)
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * @exclude
+     * Returns the PrettyPrinter used by the Log.
+     */
+    public static PrettyPrinter getPrettyPrinter()
+    {
+        if (prettyPrinter == null ||
+                !prettyPrinter.getClass().getName().equals(prettyPrinterClass))
+        {
+            try
+            {
+                Class c = Class.forName(prettyPrinterClass);
+                prettyPrinter = (PrettyPrinter)c.newInstance();
+            }
+            catch (Throwable t)
+            {
+            }
+        }
+        return (PrettyPrinter)prettyPrinter.copy();
+    }
+
+    /**
+     * @exclude
+     * Returns the current target level for the Log.
+     */
+    public static short getTargetLevel()
+    {
+        return log == null ? LogEvent.NONE : log.targetLevel;
+    }
+
+    /**
+     * @exclude
+     * Sets the pretty printer class name used by the log.
+     *
+     * @param value Name of the pretty printer class.
+     */
+    public static void setPrettyPrinterClass(String value)
+    {
+        prettyPrinterClass = value;
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    // Protected/private methods.
+    //
+    //--------------------------------------------------------------------------
+
+    /* package */ static void resetTargetLevel()
+    {
+        if (log != null)
+        {
+            synchronized (staticLock)
+            {
+                short maxTargetLevel = LogEvent.NONE;
+                for (Iterator iter = log.targets.iterator(); iter.hasNext();)
+                {
+                    short targetLevel = ((Target) iter.next()).getLevel();
+                    if (maxTargetLevel == LogEvent.NONE || targetLevel < maxTargetLevel)
+                        maxTargetLevel = targetLevel;
+                }
+                log.targetLevel = maxTargetLevel;
+            }
+        }
+    }
+
+    /* package */ static void processTargetFilterAdd(Target target, String filter)
+    {
+        if (log != null)
+        {
+            synchronized (staticLock)
+            {
+                List filters = new ArrayList();
+                filters.add(filter);
+
+                // Find the loggers this target matches and add the
+                // target as a listener for log events from these loggers.
+                Iterator it = log.loggers.keySet().iterator();
+                while (it.hasNext())
+                {
+                    String key = (String) it.next();
+                    if (categoryMatchInFilterList(key, filters))
+                        target.addLogger((Logger) log.loggers.get(key));
+                }
+            }
+        }
+    }
+
+    /* package */ static void processTargetFilterRemove(Target target, String filter)
+    {
+        if (log != null)
+        {
+            synchronized (staticLock)
+            {
+                // Remove the target from any matching loggers.
+                List filters = new ArrayList();
+                filters.add(filter);
+                Iterator it = log.loggers.keySet().iterator();
+                while (it.hasNext())
+                {
+                    String key = (String) it.next();
+                    if (categoryMatchInFilterList(key, filters))
+                        target.removeLogger((Logger) log.loggers.get(key));
+                }
+            }
+        }
+    }
+
+    /**
+     * This method checks that the specified category matches any of the filter
+     * expressions provided in the filters array.
+     *
+     * @param category to match against
+     * @param filters  - list of strings to check category against.
+     * @return <code>true</code> if the specified category matches any of the
+     *         filter expressions found in the filters list, <code>false</code>
+     *         otherwise.
+     */
+    private static boolean categoryMatchInFilterList(String category, List filters)
+    {
+        if (filters == null)
+            return false;
+
+        for (int i = 0; i < filters.size(); i++)
+        {
+            String filter = (String) filters.get(i);
+            // match category to filter based on the presence of a wildcard
+            if (checkFilterToCategory(filter,category))
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * Check whether the category match with the filter.
+     * @param filter The filter string to check against a specific category
+     * @param category The category which the filter could match
+     * @return whether the filter matches a specific category
+     */
+    public static boolean checkFilterToCategory(String filter, String category)
+    {
+        int index = -1;
+        index = filter.indexOf("*");
+
+        if (index == 0) // match all
+        {
+            return true;
+        }
+        else if (index < 0) // match full category to filter
+        {
+            if (category.equals(filter))
+            {
+                return true;
+            }
+        }
+        else // match partial category to filter
+        {
+            if ((category.length() >= index) && category.substring(0, index).equals(filter.substring(0, index)))
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * This method will ensure that a valid category string has been specified.
+     * If the category is not valid an exception will be thrown.
+     *
+     * Categories can not contain any blanks or any of the following characters:
+     * []`*~,!#$%^&amp;()]{}+=\|'";?&gt;&lt;./&amp;#64; or be less than 1 character in length.
+     */
+    private static void checkCategory(String category)
+    {
+        if (category == null || category.length() == 0)
+        {
+            // Categories must be at least one character in length.
+            LocalizedException ex = new LocalizedException();
+            ex.setMessage(INVALID_CATEGORY);
+            throw ex;
+        }
+
+        if (hasIllegalCharacters(category) || (category.indexOf("*") != -1))
+        {
+            // Categories can not contain any of the following characters: 'INVALID_CHARS'
+            LocalizedException ex = new LocalizedException();
+            ex.setMessage(INVALID_CATEGORY_CHARS, new Object[]{INVALID_CHARS});
+            throw ex;
+        }
+    }
+
+    /**
+     * Clean up static member variables.
+     */
+    public static void clear()
+    {
+        log = null;
+        prettyPrinter = null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/modules/common/src/flex/messaging/log/LogCategories.java
----------------------------------------------------------------------
diff --git a/modules/common/src/flex/messaging/log/LogCategories.java b/modules/common/src/flex/messaging/log/LogCategories.java
new file mode 100755
index 0000000..3f6945b
--- /dev/null
+++ b/modules/common/src/flex/messaging/log/LogCategories.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package flex.messaging.log;
+
+/**
+ * @exclude
+ *
+ * This class contains all the log categories used in our classes. When adding
+ * a new log category, make sure the sample configuration file is updated
+ * as well.
+ *
+ */
+public interface LogCategories
+{
+    String CLIENT_FLEXCLIENT = "Client.FlexClient";
+    String CLIENT_FLEXCLIENT_ADAPTIVE = "Client.FlexClient.Adaptive";
+    String CLIENT_MESSAGECLIENT = "Client.MessageClient";
+
+    String CONFIGURATION = "Configuration";
+    String CONFIGURATION_SPRING = "Configuration.Spring";
+
+    String ENDPOINT_GENERAL = "Endpoint.General";
+    String ENDPOINT_AMF = "Endpoint.AMF";
+    String ENDPOINT_NIO_AMF = "Endpoint.NIOAMF";
+    String ENDPOINT_FLEXSESSION = "Endpoint.FlexSession";
+    String ENDPOINT_GATEWAY = "Endpoint.Gateway";
+    String ENDPOINT_HTTP = "Endpoint.HTTP";
+    String ENDPOINT_NIO_HTTP = "Endpoint.NIOHTTP";
+    String ENDPOINT_RTMP = "Endpoint.RTMP";
+    String ENDPOINT_STREAMING_AMF = "Endpoint.StreamingAMF";
+    String ENDPOINT_STREAMING_NIO_AMF = "Endpoint.StreamingNIOAMF";
+    String ENDPOINT_STREAMING_HTTP = "Endpoint.StreamingHTTP";
+    String ENDPOINT_STREAMING_NIO_HTTP = "Endpoint.StreamingNIOHTTP";
+    String ENDPOINT_WEBSOCKET_NIO_AMF = "Endpoint.WebSocketNIOAMF";
+    String ENDPOINT_TYPE = "Endpoint.Type";
+
+    String EXECUTOR = "Executor";
+
+    String MANAGEMENT_GENERAL = "Management.General";
+    String MANAGEMENT_MBEANSERVER = "Management.MBeanServer";
+
+    String MESSAGE_GENERAL = "Message.General";
+    String MESSAGE_COMMAND = "Message.Command";
+    String MESSAGE_DATA = "Message.Data";
+    String MESSAGE_FILTER = "Message.Filter";
+    String MESSAGE_REMOTING = "Message.Remoting";
+    String MESSAGE_RPC = "Message.RPC";
+    String MESSAGE_SELECTOR = "Message.Selector";
+    String MESSAGE_TIMING = "Message.Timing";
+
+    String PROTOCOL_AMFSOCKET = "Protocol.AMFSocket";
+    String PROTOCOL_HTTP = "Protocol.HTTP";
+    String PROTOCOL_RTMP = "Protocol.RTMP";
+    String PROTOCOL_RTMPT = "Protocol.RTMPT";
+
+    String RESOURCE = "Resource";
+
+    String SERVICE_GENERAL = "Service.General";
+    String SERVICE_CLUSTER = "Service.Cluster";
+    String SERVICE_COLLABORATION = "Service.Collaboration";
+    String SERVICE_DATA = "Service.Data"; // Not a category but used by TargetSettings to replace DataService
+    String SERVICE_DATA_GENERAL = "Service.Data.General";
+    String SERVICE_DATA_HIBERNATE = "Service.Data.Hibernate";
+    String SERVICE_DATA_SQL = "Service.Data.SQL";
+    String SERVICE_DATA_TRANSACTION = "Service.Data.Transaction";
+    String SERVICE_ADVANCED_MESSAGING = "Service.AdvancedMessaging";
+    String SERVICE_NOTIFICATION = "Service.Notification";
+    String SERVICE_GATEWAY = "Service.Gateway";
+    String SERVICE_GATEWAY_CONNECTOR = "Service.Gateway.Connector";
+    String SERVICE_HTTP = "Service.HTTP";
+    String SERVICE_MESSAGE = "Service.Message";
+    String SERVICE_MESSAGE_JMS = "Service.Message.JMS";
+    String SERVICE_REMOTING = "Service.Remoting";
+
+    String SECURITY = "Security";
+
+    String SOCKET_SERVER_GENERAL = "SocketServer.General";
+    String SOCKET_SERVER_BYTE_BUFFER_MANAGEMENT = "SocketServer.ByteBufferManagement";
+
+    String SSL = "SSL";
+
+    String STARTUP_MESSAGEBROKER = "Startup.MessageBroker";
+    String STARTUP_SERVICE = "Startup.Service";
+    String STARTUP_DESTINATION = "Startup.Destination";
+
+    String TIMEOUT = "Timeout";
+
+    String TRANSPORT_RELIABLE = "Transport.Reliable";
+    String TRANSPORT_THROTTLE = "Transport.Throttle";
+    String TRANSPORT_THROTTLE_BUFFER = "Transport.Throttle.Buffer";
+    String TRANSPORT_THROTTLE_CONFLATE = "Transport.Throttle.Conflate";
+
+    String WSRP_GENERAL = "WSRP.General";
+
+    String RDS = "RDS";
+
+    String FBSERVICES_INTROSPECTION = "FBServices.Introspection";
+}

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/modules/common/src/flex/messaging/log/LogEvent.java
----------------------------------------------------------------------
diff --git a/modules/common/src/flex/messaging/log/LogEvent.java b/modules/common/src/flex/messaging/log/LogEvent.java
new file mode 100755
index 0000000..04a168b
--- /dev/null
+++ b/modules/common/src/flex/messaging/log/LogEvent.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package flex.messaging.log;
+
+/**
+ * @exclude
+ */
+public class LogEvent
+{
+    public static final short NONE = 2000;
+    public static final short FATAL = 1000;
+    public static final short ERROR = 8;
+    public static final short WARN = 6;
+    public static final short INFO = 4;
+    public static final short DEBUG = 2;
+    public static final short ALL = 0;
+
+    /**
+     * Provides access to the level for this log event.
+     * Valid values are:
+     * <ul>
+     * <li><code>LogEvent.DEBUG</code> designates informational
+     * level messages that are fine grained and most helpful when
+     * debugging an application.</li>
+     *
+     * <li><code>LogEvent.INFO</code> designates informational messages
+     * that highlight the progress of the application at
+     * coarse-grained level.</li>
+     *
+     * <li><code>LogEvent.WARN</code> designates events that could be
+     * harmful to the application operation.</li>
+     *
+     * <li><code>LogEvent.ERROR</code> designates error events that might
+     * still allow the application to continue running.</li>
+     *
+     * <li><code>LogEvent.FATAL</code> designates events that are very
+     * harmful and will eventually lead to application failure.</li>
+     *
+     * </ul>
+     */
+    public short level;
+
+    /**
+     * Provides access to the message that was logged.
+     */
+    public String message;
+
+    /**
+     * Logger instance that raised the log event.
+     */
+    public Logger logger;
+
+    /**
+     * Related exception, if applicable.
+     */
+    public Throwable throwable;
+
+    /**
+     * Constructor.
+     *
+     * @param lgr Logger instance that raised the log event.
+     * @param msg Message that was logged.
+     * @param lvl The level for the log event.
+     * @param t Related exception, if applicable.
+     */
+    public LogEvent(Logger lgr, String msg, short lvl, Throwable t)
+    {
+        logger = lgr;
+        message = msg;
+        level = lvl;
+        throwable = t;
+    }
+
+    /**
+     * Returns a string value representing the level specified.
+     *
+     * @param value the level a string is desired for.
+     * @return the level specified in english
+     */
+    public static String getLevelString(short value)
+    {
+        switch (value)
+        {
+            case NONE:
+                return ("NONE");
+            case FATAL:
+                return ("FATAL");
+            case ERROR:
+                return ("ERROR");
+            case WARN:
+                return ("WARN");
+            case INFO:
+                return ("INFO");
+            case DEBUG:
+                return ("DEBUG");
+            case ALL:
+                return ("ALL");
+            default:
+                return ("UNKNOWN");
+        }
+    }
+}