Changes With Apache Tuscany SCA 1.6.1 November 2010 
===================================================

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
TUSCANY-3759 binding-erlang-runtime isn't compatible with the current version of Erlang/OTP
TUSCANY-3743 binding.atom returns incorrect HTTP response code from If-Unmodified-Since
TUSCANY-3742 binding.atom service problems with If-Modified-Since and If-Unmodified-Since headers
TUSCANY-3737 feed-aggregator and feed-agggregator-webapp samples throw java.io.CharConversionException
TUSCANY-3735 binding.atom can't connect to Apache Tuscany blog Atom feed
TUSCANY-3734 binding.atom renders non-ASCII UTF-8 characters incorrectly
TUSCANY-3730 Store tutorial fails to run from binary distribution because of missing database files
TUSCANY-3729 Delete directories from 1.6.1 branch and 1.x trunk
TUSCANY-3726 The store-dojo sample and its runtime dependencies should be included in the binary distribution
TUSCANY-3723 binding-erlang modules and samples should be included in the binary distribution
TUSCANY-3722 Tuscany SCA Java 1.x binary distribution could include an incorrect jaxws-api-2.1.jar
TUSCANY-3707 itest/databindings/jaxb-bottom-up fails if not connected to internet
TUSCANY-3706 Build failures in itests when using JDK 5
TUSCANY-3699 samples/helloworld-ws-sdo README instructions are wrong and produce incorrect results
TUSCANY-3698 JMS Binding erases the stack trace of RuntimeException's
TUSCANY-3697 samples/osgi-supplychain ant script builds incorrect jar files
TUSCANY-3693 tutorials/store/warehouse-spring doesn't work
TUSCANY-3692 tutorials/store/store-eu doesn't work
TUSCANY-3690 demos/xml-bigbank fails because remote services aren't available
TUSCANY-3689 databinding-saxon corrupts XML documents when transforming from XMLStreamReader to NodeInfo
TUSCANY-3685 build.xml file in samples/implementation-pojo-extension doesn't have a run target
TUSCANY-3684 build.xml file in samples/domain-management doesn't work
TUSCANY-3683 Service with RMI Binding cannot be promoted
TUSCANY-3680 "clean" target in generated build.xml files fails with empty target directory
TUSCANY-3678 Tuscany SCA source distribution contents don't match binary distribution
TUSCANY-3676 Problems using Eclipse with samples in the Tuscany SCA Java binary distribution
TUSCANY-3639 Wire interceptors not created until binding interceptors have executed in Service wire
TUSCANY-3634 JMS Session is not closed when replyDest is null, then OutOfMemoroy
TUSCANY-3625 Issue converting case on methodName for WSDL-derived operation used with binding.ejb reference
TUSCANY-3615 itest/implementation-osgi produces bundle cache errors
TUSCANY-3589 Domain manager produces "get - Error getting data" message when doing a search
TUSCANY-3588 NullPointerException when adding composite in Domain Manager GUI
TUSCANY-3587 Domain manager produces "post - Error getting data" message when adding a composite
TUSCANY-3569 PolicyConfigurationException: The are unfulfilled intents for binding in reference
TUSCANY-3561 Domain manager throws policy exception if definitions.xml file is read after .composite file
TUSCANY-3551 ClassCastException in SCA Store Tutorial Integration Test
TUSCANY-3550 Build failure in itest/osgi-implementation DSInterfacesTestCase
TUSCANY-3540 Axis2SCAReferenceBindingProvider throws exception if servlet host not present
TUSCANY-3490 Tuscany SCA binary distribution doesn't include implementation.web support
TUSCANY-3475 Travel sample launcher for payment-bpel hangs before returning
TUSCANY-3466 Cannot stop component or its services and references if one of them fails to start
TUSCANY-3193 Domain Manager GUI does not put <binding.sca> entries in generated node confiig files
TUSCANY-3037 binding-notification-producer failure on message send
TUSCANY-1794 mvn builds larger sample-calculator-webapp.war than ant package
TUSCANY-242  SCDL loader should trim the whitespaces when the element text is parsed

Other commits:
r1028770 Update LICENSE file
r1028725 Update LICENSE file to match the binary distribution lib directory contents
r1028703 Remove SNAPSHOT from namespace string
r1028696 Fix copyright notice dates
r1028691 Fix copyright notice dates
r1027738 Change release date and update list of changes
r1027728 Update version number of jar file in README description
r1026272 Add note to README about possible delays receiving chat messages
r1026251 Remove explicit host name and port number from sample files
r1026240 Change RSS feed to Atom feed so that it works with the atomAggregator service
r1025930 Add test to ensure If-Modified-Since returns 304 if feed is unmodified
r1025533 Fix typos
r1023826 Use jar file contributions so that the store tutorial works when running from the binary distribution
r1023378 Replace target/classes by target/demo-bigbank.jar in test classpath
r1023375 Change run target to unzip jar file into classes directory (fix problem introduced in r1003117)
r1023240 Exclude unwanted files from source distribution
r1022055 Replace compile-time dependency on jaxws-rt by jaxws-api
r1006269 Replace compile-time dependency on jaxws-rt by jaxws-api
r1006263 Add compile-time dependency on binding-ws-axis2
r1003145 Add timeout for stock quote service invocation and improve handling of connectivity errors
r1003122 Remove redundant classpath dependencies
r1003119 Remove redundant saxon dependency
r1003117 Fix run target problem with using classes directory instead of jar file, and remove redundant saxon dependency
r1003051 Remove redundant classpath entries
r1003026 Fix incorrect shutdown instructions
r1002885 Remove bundle jars under target/.felix from binary distribution
r1002862 Add instructions for building the tutorial
r1002859 Add build.xml to tutorials directory in binary distribution
r1002848 Replace tabs by spaces
r1002835 Fix indentation
r1002816 Delete duplicate lines
r1002811 Delete duplicate line
r1002093 Fix resource exclusion patterns so that files under the target directory aren't incorrectly treated as resources
r1002090 Use consistent resource exclusion patterns in all build files for the Store tutorial
r1002088 Update README instructions
r1002086 Add main class so that a run target is generated in build.xml
r1002085 Add explicit ${basedir} references to ensure paths are correct when running from a top-level build
r1002083 Add run targets to launch the nodes
r1002077 Fix cut and paste error
r1002075 Use hand-built build.xml file containing code to create the sample database
r1002074 Use hand-built build.xml file containing code to create the sample database
r1001759 Fix tuscany.version property setting
r1001737 Fix main class name
r1001710 Fix incorrect substitution parameters in message template
r1001709 Add missing samples to README and tidy up some text
r1001702 Update properties for generated build.xml
r1001694 Generate build.xml instead of build-dependency.xml
r1001501 Fix typos
r1001069 Describe running and building the demo separately
r1001060 Describe running and building the demo separately
r1001054 Decouple run target from compile target
r1001047 Put dojo files in correct location in jar file and include dijit
r1001042 Delete redundant files and redundant entries in pom.xml and build.xml
r1001036 Fix typo on web page
r1000963 Fix typos and add maven build information
r1000905 Explain that the WAR file is intentionally omitted from the binary distribution
r1000902 Fix problems with the README file
r1000896 Update README instructions to cover the case of the servlet container not using port 8080
r1000887 Include dijit in maven build as well as ant build
r1000878 Delete temporary dojo directory after maven packaging
r1000868 Remove unused dojo dependency
r1000787 Improvements to the README instructions
r1000769 Minor improvements to the README instructions
r1000768 Fix a numbe of problems in the README instructions
r1000642 Add code to avoid a hang on exit with Tuscany SCA 1.6.1 (workaround for TUSCANY-3277)
r1000626 Tidy up the README instructions to not require compiling before running
r1000619 Tidy up the README instructions to cover all options for building and running
r1000425 Update CORBA sample READMEs to include instructions for using ant
r1000266 Fix notification sample build.xml and README files to provide clear instructions that work
r1000237 Fix confusing prompt message
r1000026 Add junit test dependency
r999922 Exclude generated eclipse project files from the binary distribution and fix other inconsistencies
r999921 Exclude generated eclipse project files from the source distribution
r999920 Keep the generated tuscany-sca-manifest.jar in sync with the contents of the lib directory
r999910 Update instructions for running this sample without needing to compile it first, and document the issue described in TUSCANY-1994
r999904 Unzip files to target/database and target/classes before running sample (see TUSCANY-1994)
r999902 Exclude geronimo-activation_1.1_spec and junit dependencies
r999901 Fix incorrect version number for commons-lang and exclude junit dependencies
r999899 Change junit dependency to test scope
r999898 Change junit dependency to test scope
r998521 Reorganize directory structure to make import into Eclipse work
r998370 Reorder modules to satisfy dependency relationships
r998367 Reorder modules to satisfy dependency relationships
r998365 Fix svn:ignore property to add build.xml
r998341 Add build.xml to samples directory
r998332 Fix README references to incorrect module name
r998330 Make "compile" the default target in build.xml
r998328 Add missing code generation to build.xml file
r998270 Add build.xml file to demos directory
r998259 Add build.xml file to tutorials/store directory
r998250 Replace generated build.xml file by a handwritten one
r998248 Correct dependency in pom so that generated build.xml file is correct
r998247 Generate a build.xml file from the maven build
r998238 Add source directory to make the generated build.xml file work correctly
r998237 Add build.xml file to svn with generated dependencies
r998155 Delete generated build.xml files from svn
r998083 Update recommended MAVEN_OPTS setting
r998082 Add build.xml file with generated dependencies
r998069 Add build.xml file with generated dependencies
r998020 Generate build.xml instead of build-dependency.xml
r997853 Delete .project file from svn
r997848 Fix svn properties to ignore generated files
r997840 Delete .project files from svn
r997683 Fix incorrect mvn project names
r997651 Fix svn properties to ignore generated files
r997254 Remove tutorials/travelsample directory from source and binary distributions
r996380 Update release documentation files for 1.6.1
r959912 Add java.net2 repository (needed for mimepull-1.2.jar)
r959536 Add build-dependency.xml to svn:ignore list
r942469 Exclude junit 3.8 dependency brought in by wss4j and use junit 4.5 instead
r921260 add ignores
r915259 Correct the composite name

Changes With Apache Tuscany SCA 1.6 January 2010 
==================================================
Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):

TUSCANY-3448 - SCA Property and Reference annotation processing in web application results in incorrect computed names
TUSCANY-3438 - Add calculator-corba samples to 1.6 release
TUSCANY-3435 - store-secure is missing build.xml
TUSCANY-3434 - Simple-bigbank-spring fails with ContributionReadException: Error reading manifest null
TUSCANY-3430 - Domain-management sample fails when trying to add deployables to a domain composite and wire them
TUSCANY-3429 - Databinding sample fails with AxisFault: The system cannot infer the transport information from the /ComponentA URL.
TUSCANY-3428 - Callbacks-jms fails with NPE
TUSCANY-3427 - Calculator distributed fails when starting domain manager
TUSCANY-3418 - <wireFormat.jmsText> is broken in some use cases
TUSCANY-3408 - Fix reference to missing namespace hortname in generated WSDL
TUSCANY-3394 - PropertyAnnotationtestCase vtest failing
TUSCANY-3389 - Tuscany Policies is returning an error code of 401 instead of 403 when an authenticated user requests a service which is not authorized for their role
TUSCANY-3382 - 1.x seems to have a dependency on a SNAPSHOT release of Lucene somewhere?
TUSCANY-3379 - useParentHandlers in JDKLoggingPolicy cannot be set
TUSCANY-3348 - PERF: handleCallback is not optimized
TUSCANY-3347 - composites that repesent implementation.jee component type are registered in the composite model resolver under a single name
TUSCANY-3312 - Potential memory leak in Java interface handling
TUSCANY-3309 - Invoker recieves a Message with no header data for a request that contained a SOAP header
TUSCANY-3303 - Concurrent access issue during wsdlgen
TUSCANY-3288 - Can't use non-Item type with atom Collection
TUSCANY-3283 - Generated WSDL not WS-I compliant in some cases
TUSCANY-3275 - alert-aggregator-webapp failes to start
TUSCANY-3272 - holder-ws-service falure
TUSCANY-3269 - Server name incorrect in WSDL when using separate web server
TUSCANY-3267 - <binding.ws> doesn't work when <interface.java> is used
TUSCANY-3266 -  Run As Tuscany fails with NPE
TUSCANY-3265 - JMS itest PropertiesTestCase failure
TUSCANY-3264 - tutorial/store-test failure
TUSCANY-3260 - CORBA Extension test to ensure ORB is stopped fails in recent SUN JDK 6_014
TUSCANY-3259 - wireFormat.jsonrpc removed from binding
TUSCANY-3256 - PolicyConfigurationException raised incorrectly when using operation level policy
TUSCANY-3255 - Consolidate JMS session management in JMSResourceFactory
TUSCANY-3250 - Implement multiple application context support using MANIFEST header
TUSCANY-3247 - Cannot get WidgetImplementationFactory (NoSuchMethodException)
TUSCANY-3240 - SpringXMLComponentTypeLoader leaves open a file handle to the application-context.xml
TUSCANY-3238 - Use of WS binding results in exception when returning data
TUSCANY-3237 - Use of collections for implicit SCA reference/property injection in constructors
TUSCANY-3235 - Exception thrown in JAXBContentCache.getPackages() when running applications with Java 2 security enabled
TUSCANY-3232 - Remove non-ASCII character from host-webapp LICENSE file
TUSCANY-3213 - ProblemImpl resides in assembly and means that other module have to access an impl packed to create a problem
TUSCANY-3202 - Bean name as service names for implicit services
TUSCANY-3200 - Correct a small inconsistency between the NOTICE file in web-javascript-dojo and the binary distro NOTICE file
TUSCANY-3199 - WebImplementationProcessor should prefix web.componentType URI with WEB-INF
TUSCANY-3198 - impl.jee : Generated EJBImplementation type has wrong information when more than one bean is present in a EJB module
TUSCANY-3195 - Inherently-provided intents do not work at operation level
TUSCANY-3185 - Warning message of duplicates during multiple application context processing
TUSCANY-3178 - The runtime doesn't read the validation schema extension point from the extension point registry and hence doesn't pick up any schemas that are added programatiically.
TUSCANY-3177 - The extension registry is no created until after runtime start and hence it's not available for updating in a way that will be taken note of at start time
TUSCANY-3174 - Allow extension points to be updated and exercised programmatically
TUSCANY-3173 - Restarting webapp leads to OutOfMemory: Permgen space in JSONRPC binding
TUSCANY-3167 - Look to cache JAXBPropertyDescriptor in XMLRootElementUtil
TUSCANY-3166 - Atom fails to set wrapper handler in top down case
TUSCANY-3165 - Failures in itest/contribution-jee
TUSCANY-3163 - Non-ascii characters in Corba binding code cause compile error
TUSCANY-3162 - problem building JAXBContext when package has mixed JAXBs, non-JAXBs
TUSCANY-3156 - Provide itest for the no-manifest scenarios in spring implementation module
TUSCANY-3153 - imported XSDefinition should be set with XmlSchema as well
TUSCANY-3149 - Restarting webapp leads to OutOfMemory: Permgen space
TUSCANY-3148 - Remove explicit version dependence from JEE zip based itests.
TUSCANY-3141 - Generated WSDL for void unwrapped operations has a return part for the response message
TUSCANY-3140 - Implementation.jee: The interface bound to the Runtimewire is not loaded with the class loader from implementation
TUSCANY-3128 - Spring app context classloader doesn't find contribution artifacts if the contribution isn't also on the application classpath
TUSCANY-3127 - NPE in JMS binding when it appear in same service a JSONRPC binding and $self$ reference is obtained
TUSCANY-3125 - policySets & intents not resolved on binding.http
TUSCANY-3124 - Check for wireFormat/OperationSelector before "get" operation
TUSCANY-3121 - binding.atom should leverage introspection when setting up call to mediator
TUSCANY-3120 - JMSBindingProcessor does not preserve file contents
TUSCANY-3116 - operationProperties attribute gets discarded
TUSCANY-3114 - There are no unit tests for the RSS binding
TUSCANY-3113 - RSS Binding is failing to detect whether the Java component implementation supports RSS feeds
TUSCANY-3112 - Links for the feed items are missing for an RSS feed created by the RSS binding on a Java component implentation that uses the Tuscany Dayta APIs
TUSCANY-3110 - Extend the Atom binding so that the description of the feed can be set
TUSCANY-3310 - JCA_10050/51 has incorectly named composite file
TUSCANY-3109 - NullPointerException thrown when using Atom binding on a Java component implementation class that does not have a get() method
TUSCANY-3104 - Using "FileSystemXmlApplicationContext" to load multiple application context files has problems with relative path identification
TUSCANY-3099 - NumberFormatException occurs when parsing a JMSPriority attribute with string value
TUSCANY-3098 - NPE in JMSBindingProcessor writing out property with no name
TUSCANY-3097 - External ear contribution processes all composite files in a Java EE Application and its modules.
TUSCANY-3096 - Switch off SCA Annotation support for Implementation.Spring
TUSCANY-3095 - DefaultBeanModelProcessor contror expects Class<implementation> but bindings need to use this processor also
TUSCANY-3086 - DefaultContributionFactory does not directly implement ContributionFactory interface
TUSCANY-3080 - NPE thrown while checking for Spring Version
TUSCANY-3078 - substitutionGroup is missing in ATOM binding, HTTP binding, and Widget impl
TUSCANY-3077 - SCA node cannot be stopped as ConversationManagerImpl holds a thread pool using ScheduledExecutorService
TUSCANY-3076 - Dealock in binding.ws for 2 concurrent callbacks
TUSCANY-3075 - The composite processor shouldn't write out references and services generated to handle callbacks.
TUSCANY-3070 - ModuleActivators being picked up twice from the classpath
TUSCANY-3069 - Implementation.spring cannot resolve the location or bean classes if the contribution is not on the TCCL
TUSCANY-3068 - Validate wire format and operation selection SCDL elements
TUSCANY-3065 - Double use exposure in JAXBDataSource
TUSCANY-3063 - Handle special characters when generating JSON-RPC SMD
TUSCANY-3059 - OperationProperties JMSDeliveryMode set in headers JMSDeliveryMode
TUSCANY-3058 - JMSBindingProcessor write methods write out 'JMSCorrelationId' instead of 'JMSCorrelationID'
TUSCANY-3052 - Component and Services not recognized from application composite of EAR used in impl.jee
TUSCANY-3057 - binding.jms fails to lookup ConnectionFactory
TUSCANY-3056 - Webapp samples are failing in Geronimo (issues caused by inverse-classloading)
TUSCANY-3054 - Introduce JavaInterfaceFactory impl employing caching of JavaInterface(s) based on Class
TUSCANY-3053 - Spring Jar Location testcase failing because of the URI issue
TUSCANY-3052 - Component and Services not recognized from application composite of EAR used in impl.jee
TUSCANY-3043 - Move the testcases available in implementation-spring-old module into itest/spring module.
TUSCANY-3042 - Fail to generate Widget JS when using binding http with json-rpc wire format/operation selector
TUSCANY-3041 - policySets & intents not resolved on implementation.jee
TUSCANY-3032 - ejb-linkType should be string
TUSCANY-3031 - Ensure that JMS jmsObject wore format works if the service interface is specified as WSDL
TUSCANY-3030 - itest\exceptions ExceptionsTestCase testRemote fails
TUSCANY-3018 - EarContributionProcessor's URL.setURLStreamHandlerFactory() fails with factory already defined error
TUSCANY-3017 - Validate Spring Binary Version used
TUSCANY-3011 - JMS binding schema contains a required headers element under OperationProperties
TUSCANY-3008 - Contribution-jee/testContributeEAR_Enhanced16 failing in maven but not in eclipse
TUSCANY-3005 - null one arg methods and void returns fail jmsdefault WF
TUSCANY-3002 - writeStartElement calls in JMSBindingProcessor do not pass namespace URI
TUSCANY-3000 - Turn databinding Mediator into a utility registered with UtilityExtensionPoint
TUSCANY-2999 - Property injection not working in implementation.widget js client
TUSCANY-2998 - Items added to store Shopping Cart not showing properly when using dojo based javaScript proxy
TUSCANY-2997 - Dojo based javascript for Atom Binding has unecessary dojo.require for XHR
TUSCANY-2996 - binding.jms/wireFormat.object - allow single parameters to be passed wrapped or unwrapped depending on user configuration
TUSCANY-2995 - BPEL error handling causes tests to block
TUSCANY-2993 - store-dojo sample doesn't work in IE
TUSCANY-2987 - Sort out jms operation selector mapping to service operations
TUSCANY-2986 - Separate callback processing from operation selector processing
TUSCANY-2984 - Potential IndexOutOfBounds in DojoModuleActivator
TUSCANY-2978 - sample apps for jee contribution processing tests
TUSCANY-2977 - determine implementation.jee component type from application composite if one is available
TUSCANY-2976 - Remove default "ConnectionFactory" in JMSBinding model
TUSCANY-2972 - Fix contribution classloader so that artifacts inside JEE archives can be found
TUSCANY-2968 - Provide support for binding.http based on OASIS draft specification
TUSCANY-2967 - For binding.jms, consider a more natural exception handling strategy for non-XML, non-Object wireFormats
TUSCANY-2966 - Adjust binding.jms code since JMS BytesMessage bytes payload can only be read once
TUSCANY-2965 - For JMS binding, add a jmsBytesXML wireFormat analogous to jmsTextXML
TUSCANY-2964 - Fix JMS operationSelector schema element name to operationSelector.jmsdefault to match OASIS
TUSCANY-2962 - Throw an exception if multiple same-name operations are detected by WSDL intf introspector
TUSCANY-2953 - Fix sca.tld in branches-1.x
TUSCANY-2937 - AtomAgreggator test cases failures
TUSCANY-2930 - Add wireFormat.jmsDefault for the JMS binding
TUSCANY-2906 - WSDL/XSD imports should use location/schemaLocation as hints and not fail due to locations that don't map to actual locations
TUSCANY-2900 - WSDL Generation does not respect all binding.ws entries
TUSCANY-2878 - Consider upgrade to dojo 1.3
TUSCANY-2868 - Vtest code for Java SCA assembly component of 2009_02_24
TUSCANY-2757 - Top down round trip problem where wrapper elements are marked as nillable by JAXB during WSDL generation
TUSCANY-2640 - Should use package(s) when possible in creating JAXBContext, not set of Classes
TUSCANY-2626 - Investigate why endpoint reference and wsdlLocation are not in the sca-binding-webservice.xsd schema file
TUSCANY-2552 - Implement a search function for the domain manager home page


Changes With Apache Tuscany SCA 1.5.1 October 2009 
==================================================

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):

TUSCANY-2640 - Should use package(s) when possible in creating JAXBContext, not set of Classes
TUSCANY-2878 - Moving to Dojo dependencies to Dojo 1.3.0 official release
TUSCANY-2906 - Resolve wsdl:import and xsd:import using namespace
TUSCANY-2967 - back out the trial change to bytes format messages so that all wire formats consistently return faults as JMS Object messages.
TUSCANY-2978 - Add more JEE tests to help show that the nested composites are resolved/built correctly.
TUSCANY-2984 - Adding prioritization while starting module activators to allow module activators dependencies to start first
TUSCANY-3018 - EarContributionProcessor's URL.setURLStreamHandlerFactory() fails with factory already defined error
TUSCANY-3052 - Update JEE processing to resolve the JEEImplementation composite.
TUSCANY-3058 - Correct use of JMSCorrelationID to use an uppercase trailing 'D'
TUSCANY-3059 - correct perationProperties JMSDeliveryMode set in headers JMSDeliveryMode
TUSCANY-3062 - another work round to get resolution doing something in the domain manager
TUSCANY-3063 - Adding new tests to ensure JSON-RPC binding can handle special characters when generating SMD
TUSCANY-3065 - fix double use exposure in JAXBDataSource
TUSCANY-3068 - Improve validation in JMS processors. 
TUSCANY-3069 - Implementation.spring cannot resolve the location or bean classes if the contribution is not on the TCCL
TUSCANY-3070 - Work round to treat the symptom of activators being discovered twice on the classpath.
TUSCANY-3075 - don't write out the services and references generated to handle callbacks.
TUSCANY-3076 - The DefaultWorkScheduler only has 10 threads in the pool and it causes deadlock. 
TUSCANY-3077 - Allow the thread pool for conversation manager to be shutdown
TUSCANY-3086 - Making DefaultContributionFactory implement contribution factory interface to avoid issues with model extention point
TUSCANY-3080 - NPE thrown while checking for Spring Version
TUSCANY-3096 - Switch off SCA Annotation support for Implementation.Spring
TUSCANY-3097 - Add test to see if the application composites of modules inside anEAR are processed (they shouldn't be)
TUSCANY-3098 - don't throw an NPE is a property doesn't have a name
TUSCANY-3099 - log an error if an invalid header priority is entered
TUSCANY-3104 - Using "FileSystemXmlApplicationContext" to load multiple application context files has problems with relative path identification
TUSCANY-3109 - Added unit test for using Atom binding on a Java component implementation class that does not have a get() method
TUSCANY-3110 - Updated the atom binding so that the description can be set using the description attribute. 
TUSCANY-3111 - Fixed NPE when using the RSS binding 
TUSCANY-3112 - Make sure that the feed entry has the links set on it otherwise the title of the item in the RSS feed will not be converted to a URL
TUSCANY-3113 - Added get() method to the rss.Collections interface 
TUSCANY-3114 - Added a basic get test for the RSS feed
TUSCANY-3116 - add support for the operationPropertyName attribute to the JMS binding model
TUSCANY-3120 - improve write processing so that it writes out what has been entered and ignores defaults where possible.
TUSCANY-3121 - binding.atom should leverage introspection when setting up call to mediator
TUSCANY-3124 - Check for wireFormat/operationSelector before other operations
TUSCANY-3125 - enable policy processing in binding.http
TUSCANY-3128 - force the bean factory classloader to be the contribution classloader as it's reset by the application context on refresh.
TUSCANY-3140 - Test for difference between loadtime and runtime classloaders
TUSCANY-3141 - Generated WSDL for void unwrapped operations has a return part for the response message
TUSCANY-3148 - remove version dependency from zip based JEE itests
TUSCANY-3149 - Generally be more careful about removing object references in host-webapp. 
TUSCANY-3153 - imported XSDefinition should be set with XmlSchema as well
TUSCANY-3155 - Support for spring implementation location as folder without manifest scenario
TUSCANY-3162 - problem building JAXBContext when package has mixed JAXBs, non-JAXBs
TUSCANY-3163 - Fixing non-ascii characters that were producing build failure when using IBM JDK 1.6
TUSCANY-3166 - Making the test case works using the generated java interface
TUSCANY-3167 - Look to cache JAXBPropertyDescriptor in XMLRootElementUtil
TUSCANY-3169 - invalid characters in generated reference binding names
TUSCANY-3170 - add callback URI configuration support to domain manager
TUSCANY-3171 - domain manager does not load definitions.xml files
TUSCANY-3172 - domain manager doesn't report errors cleanly to the nodes
TUSCANY-3174 - Add workspace manager updates to workspace 
TUSCANY-3177 - create the extension point registry earlier so that any programmatic changes to it are reflected in the runtime configuration
TUSCANY-3178 - read the validation schema extension point from the extension point registry rather than creating a local copy
TUSCANY-3185 - Warning message of duplicates during multiple spring application context processing
TUSCANY-3193 - fully support binding.sca in the domain manager
TUSCANY-3195 - merge fix from 1.x to 1.5.1 for Inherently-provided intents do not work at operation level
TUSCANY-3198 - keep generated EJB component implementations distinct.
TUSCANY-3199 - WebImplementationProcessor should prefix web.componentType URI with WEB-INF 
TUSCANY-3200 - Add the dojo copyright to the NOTICE file to be consistent with the top level binary NOTICE file
TUSCANY-3202 - Spring bean name as service names for implicit services
TUSCANY-3213 - ProblemImpl resides in assembly and means that other module have to access an impl packed to create a problem
TUSCANY-3235 - Java2 security problem
TUSCANY-3237 - Remove auto indexing logic for constructors
TUSCANY-3238 - Use of WS binding results in exception when returning data
TUSCANY-3240 - Closing reader after processing spring application-context.xml
TUSCANY-3247 - Making interfaces and instantiatng widget factory via extension point mechanism
TUSCANY-3248 - Removing quoted tokens to avoid issues on linux/mac os environment
TUSCANY-3249 - providing on/off feature for multiple application context support
TUSCANY-3251 - Fix interface compatibility checking for callback operations
TUSCANY-3254 - null returned by RequestContext.getCallbackReference()
TUSCANY-3255 - Consolidate JMS session management in JMSResourceFactory
TUSCANY-3264 - Tyiding up how we write the schema prefix as per StAX spec
TUSCANY-3267 - ensure wrapper elements have nillable=false
TUSCANY-3272 - create class to run holder tests when run from the distribution
TUSCANY-3292 - fixing how spring context path is calculated 

Changes With Apache Tuscany SCA 1.5 May 2009 
============================================

- Add dependency on jaxws (as the code now uses the Holder class) so it compiles on pre-JDK6
- Merge branch 'tuscany-2663'
- Remove unneeded deploy.xml and .componentType files
- Reverting changes from revision #734356 and there was some merge conflicts that were not supposed to get to svn.
- TUSCANY-2463 - Properly register default attribute processor to handle extended attributes
- Exclude xsd module from base
- Fixes for TUSCANY-2772
-  Renaming test cases to follow same naming pattern
- Updating testcase to JUnit 4
- TUSCANY-2463 - Storing extended attributes in a second list, wrapped into a extension class that stores the attribute QName, it's value
- Removing obsolet test composite
- TUSCANY-2663 - UPdating test scenarios to split valid extended element from invalid scenario where require attribute has empty value
- TUSCANY-2463 - Last adjustments to test processors to support the extension attribute wrapper
- TUSCANY-2463 - Fixing model object definition for extended attribute processor
- copy stest framework from 2.x to consider potentially reusing in 1.x
- Tuscany 2768 - sample showing web services Holder support (input/output parameters)
- Start adding resources for a test of folder and zip contributions which contain application jars
- TUSCANY-2783 - Adding schema for GData binding
- TUSCANY-2783 - Integrating GData schema to tuscany schema
- TUSCANY-2781 - Adding schema for Corba binding
- TUSCANY-2781 - Integrating Corba schema to tuscany schema
- TUSCANY-2781 - Fixing Corba schema with right binding name
- TUSCANY-2784 - Adding schema for Java EE implementation
- TUSCANY-2784 - Integrating Java EE schema to sca schema
- Move to a seperate itest as that makes the itest simpler
- Add an itest for folder contributions and zip contributions containing jars
- Demonstrate how the non-JAXWS base class can be used. Add some ignores.
- Start looking at seperating out the JMS service side listener functions into a pluggable module so different runtime environments can plug in their own runtime specific code. This should help the geronimo plugin support JMS using the Geronimo JMS provider and JCA, and any others who are using Tuscany deeply embedded in a container. Not in the build yet or used by the current JMS binding till it gets a bit further
- and related to r737718 a module for the current JMS binding listener code that uses the 'asf' approach of a JMS listener spawning unmanaged threads to process messages
- TUSCANY-2794 - JMS callback property variable ends with space - not a valid Javaidentifier
- Removing holder-ws-service from pom as it seems the sample is not available
- Process services in component pre-processing.
- Start to add some JMS host interfaces
- Start to add some JMS host default implementations
- Fixes for TUSCANY-2771
- Make jms host an extension point
- Make the default jms host use the jms host extension point
- Remove unused  code
- Add method to get the service destination to the jms host as you need that to get callbacks working
- Implement the getDestination method in the default jms host
- Intial cut at changing the jms binding to use the jms host for the service listener
- Update the pom.xml to include a jms host
- Update the pom.xml to include a jms host
- update the jms itests to include a jms host
- TUSCANY-2663 - Workaround for 'java.lang.IllegalStateException: The current state is not START_DOCUMENT' when in WebSphere env
- Refactoring common code to simplify processing extended attributes
- Adding support for extended attributes to webservices binding
- Fixing test failures by ignoring tuscany NS when processing extended attributes
- Adding support for extended attributes to EJB binding
- Adding support for writing extended attributes to EJB binding
- Adding support for extended attributes to java implementation
- Removing System.out from WS Policy processor
- Adding support for extended attributes to java interface
- Adding support for extended attributes to wsdl interface
- Remove some targetNamespace attributes
- Remove some targetNamespace attributes
- TUSCANY-2291, Separate the mixed callback error validation test from the other callback tests so that the error doesn't affect the rest of the tests
- Removing obsolete dependency
- Fixing sca.tld copy by adding rtexprvalue attribute
- TUSCANY-2798: Add an itest for a service sending the response to the response destination defined on the jms binding element if the request message doesn't have a replyTo set
- TUSCANY-2798: Fix the jms binding to use the destination in the binding response element when the request message has no replyto
- TUSCANY-2776 The JMSBindingProcessor does not perform validation of binding properties
- TUSCANY-2803 - Improvement to component matching in NodeImpl
- TUSCANY-2463 - New test case that exercises extended attributes in bindings
- Removing system.out from AnyAttribute test case
- Removing unused imports
- TUSCANY-2701  NPE when verifying conformance item ASM60006 in OASIS sepc
- TUSCANY-2799 - don't return responses inside arrays. Generally reorg the code so that the message processors only worry about getting data in and out of JMS message while the interceptors worry about whether the data should be wrapped as an array. In this way the forward path can do array wrapping in order to keep databinding happy while the response path can omit array wrapping
- Commit update to jms sca binding left off the change to the JMS binding to use the JMS Host
- TUSCANY-2799 Fix NPE in JMS Object wire format when a null object is returned. Add a test also.
- Remove target namespace from contribution.xml of distributed calculator
- Add jms host modules to the build
- TUSCANY-2820: start adding support for the varrious property elements on the jms binding
- Fixes for TUSCANY-2451
- Update validation tests for jms binidng updates
- Correct dependency with backlevel version
- TUSCANY-2823 Callback problem with COMPOSITE scoped implementation
- Add support for operation property properties to binding.jms
- Add support for resourceAdapter and its properties
- Add support for resourceAdapter and its properties
- TUSCANY-2821 Added JMS Binding APIs public Set&lt;String&gt; getOperationNames() and public Object getOperationProperty(String opName, String propName ).
- TUSCANY-2463 - Fixing Web Service binding processor to propertly get a reference to Extended Attribute processor
- Fixes for MTOM TestCase
- TUSCANY-2824 - Turn the binding.ws policy handlers back on. The ws policy handlers are now present but commented out as they are causing problems in the Axis 1.4.1 stack. Update the keys for the binding.ws tests cases so they remain valid for a long time. 
- TUSCANY-2835 JMS Binding does not save operation names unless there are properties.
- Merge branch 'bpel-resolver'
- Removing system.out used for debug
- Fix the TLD to use jsp taglib 2.1 xsd
- TUSCANY-2463 - Enabling extended attribute support for default sca binding
- Apply the  TLD fix to use jsp taglib 2.1 xsd in the other copy sca.tld
- Simplify so you can use createNode() instead of createNode(null, null)
- Add jms itest using a response ConnectionFactory
- Move jms responsecf itest to its own module to make it eaisier to debug
- Remove erronious warning about response connection factory not being processed
- TUSCANY-2841: start to add support for using a seperate response connection factory
- Update for resource factory changes
- Update noreply itest for change to not return Object arrays
- Add jms noreply itest to itest build
- Update jms response connectionFactory itest to correctly setup jndi resources
- TUSCANY-2839: Start at supporting services invoked by oneway requests not needing a response connection factory
- TUSCANY-2824 - turn WSSecurity based policy back on. Two not so great fixes here. Firstly WSSecurityPolicyHandler pushes a property into the Axis configuration context to force Rampart to recognize the policy. I haven't discovered what part of our configuration is required to do this properly. Secondly I fixed the helloworld-ws-service-secure test case to reference the wsdl on binding.ws. Without this you get a NPE in axis/rampart as it fails to map binding operations to port type operation using QNames (don't know why it thinks these are QNames). Our generated WSDL has the generated binding in a different namespace to the port type. Associating the wsdl binding with binding.ws means that the binding is not generated at the made up QNames match. I also updated a few key stores as the runtime was complaining about X509 certificate version numbers. 
- Add a jms oneway itest with a nondefault connection factory
- Set svn ignores
- Make sure resource factory gets set before use to avoid any NPEs
- TUSCANY-2825 JMSBindingProcessor missing 'write' method implementation
- TUSCANY-2847 - Updating composite used to verify any element processing
- TUSCANY-2836 remove DEFAULT_DESTINATION_NAME and DEFAULT_RESPONSE_DESTINATION_NAME and use null instead as these are just strings to indicated that there is no destination rather than being a default destination
- Fix for TUSCANY-2846
- Reenable a commented out test as the jira has been fixed
- Add a JMS test for exceptions using a non-SCA JMS client. Doesn't actually test the responses yet but the framework is there to send and receive the messages to the sca service
- UPdate jms exceptions testcase so the object format tests work
- Add the jms nonsca excpetions test to build
- Fixes for TUSCANY-2840
- Change XMLTextMessageProcessor to override the createFaultMessage to handle FaultExceptions
- Activate text and object tests in the jms nonsca client exxceptions test
- Activate the unchecked exception test, still need to establish what the response should really look like
- Correct test name
- Partial fix for exceptions for sca clients using text xml wireformat
- Update JAXWSFaultExceptionMapper to handle extra contsructor
- Comment out failing assertions for the time being
- Update with JIRA about the problem
- Fix for TUSCANY-2779. Thanks zhulei for the patch.
- Remove old test thats nolonger applicable
- TUSCANY-2839: Add checks to bypass response processing for oneway operations
- TUSCANY-2845: Change JMS binding so unchecked exceptions are returned as RuntimeExceptions
- Use Logger instead e.printStackTrace
- Fix for TUSCANY-2854: remove the use of "tempuri.org"
- TUSCANY 2855 - Adding Holder WS Sample
- TUSCANY-2855 Holder sample not appearing (part 2, missed a few files)
- Fix the JAXBException if package-info annotated with @XmlSchema is present without ObjectFactory
- Fix for TUSCANY-2702
- Fix for TUSCANY-2860
- Fixes for TUSCANY-2840-Part2
- Fixes for TUSCANY-2840-Part3
- Add a method that returns an unchecked exception
- Add ignores
- Commit some code to write out composite model during processing. Uncomment to use. 
- TUSCANY-2859: Add a closeResponseConnection method to the JMSResourceFactory
- TUSCANY-2849 Unable to define operation-level intents on binding.jms
- TUSCANY-2861: Add an itest for sending/receiving null
- Add jms-nulls itest to build
- TUSCANY-2861: Fix Object wireformat to deal with receiveing a null message correctly
- Fix already closed bug when the responseConnection is the same as the request connection
- Fix already closed bug with oneway requests
- Add BPEL document resolver to defer to namespace imports if document is not found in current contribution
- Make property ids optional
- Fix for TUSCANY-2550
- Fix for TUSCANY-2550
- TUSCANY-2867 - Pass checked exceptions as InvocationTargetExceptions. Don't rely on boolean fault flag for messages of object type. Thanks for the patch Kaushik
- TUSCANY-2857 Correct handling of JMSDeliveryMode and JMSPriority
- Improve some assembly component tests to be more specific
- TUSCANY-2856 'property' validation conflicts with osoa spec
- Correct the type of message that CompositeProcessor reports for a CompositeReadException and correct a few tests to take account of this and another couple of exception funnies. 
- Fix the push/pop out of sequence issue
- Adding new store-secure sample to exercise security policy in web 2.0 extensions
- Adding support to enable SSL when using binding-http using Confidentiality policy intent
- Minor cleanup on the policy properties
- Refactoring confidentiality policy support for http bindings to it's own module
- Updating NodeWebAppServletHost to provide new version of addServletMapping
- Updating WebAppServletHost to provide new version of addServletMapping
- Adding support for enabling and configuring authentication for embedded http server using policy
- Removing empty folder
- TUSCANY-2868 - Add more assembly/component test cases. Thanks for the patch Jun Guo
- TUSCANY-2864 - Fix end of test comment. Thanks for the patch emily
- TUSCANY-2874 - Add ASM_6030_TestCase - thanks for the patch Susan
- Fix for TUSCANY-2875
- Fix for TUSCANY-2875
- TUSCANY-2897 JMSBinding model should be QNames not Strings
- TUSCANY-2871 ClassCastException using atom-abdera binding
- Only create a transport description for the JMS transport if JMS is configured to be in use. 
- Fixes for TUSCANY-2642, 2909, 2910
- Fixes for TUSCANY-2642
- Remove SpringSCAPropertyElement.java.orig
- Removing empty folder
- TUSCANY-2905 Implement third rule which is supposed to look for an operation name in the root element of the XML payload
- TUSCANY-2907 Stest code
- Adding code to use full binding uri when provided, otherwise using relative path - note that code is commented out for now
- TUSCANY-2884 - more composite vtests. Thanks for the patch Susan.
- Updating-DWR-dependency-level-to-2.0.3
- Placing gif jpg files used for testing in test resource folder
- Moving to use DOJO 1.3.0b3
- Update scn urls required by continuuns builds
- Updating project name to help identify (1.x) versus (2.x) builds in continuuns environment
- Fix the J2W generation issue which misses the target namespace
- Make the artifactURI "" resolve to the sourceURL.
- Added an EAR packaging type. Updated WAR to use PackageType.WAR.
- o JavaEE processors to introspect WAR, JAR and EAR files and create model objects
- Missing and wrongly placed license headers.
- Updated the methods to throw ContributionReadException.
- Java EE Introspection code using OpenEJB.
- URI "" corresponds to the archive as an artifact.
- Fix a regression caused by r755474
- Use the JavaEE optional extension to compute SCA references and SCA properties from Remote EJB3 references and EnvEntries.
- Use the JavaEE extensions to compute SCA services, SCA references and SCA properties from EJB3 business interfaces, Remote EJB3 references and EnvEntries.
- Only introspect the fault type if the JAXWS interface processor hasn't figured out the databinding
- Produce xsi:type for local elements
- Add contribution-jee to the build to avoid break
- Removing obsolete schema file for binding-gdata
- Removing @author per Apache best practices
- Adding support for Jaas authentication policy to component services
- Removing system.out debug message
- Wrapping the invocation with a message, in order to pass extra information during invocation
- Removing @author per Apache best practices
- Properly handling business/runtime exception with new invocation method
- Small method name change
- Removing unused imports
- Adding support for LDAP Realm authentication policy
- Adding support for LDAP Realm authentication policy
- Fixes for TUSCANY-2914
- Fixes for TUSCANY-2922
- Fixes for TUSCANY-2922
- TUSCANY-2923 Stest code ASM_0024 - ASM_0043
- TUSCANY-2926 Stest code invalid ignore tag
- Use the JavaEE extensions to compute SCA services, SCA references and SCA properties from EJB3 business interfaces, Remote EJB3 references and EnvEntries.
- TUSCANY-2932 Throw org.apache.tuscany.sca.data.collection.NotFoundException on 404 errors if AtomReferenceBindingProvider.supportsFeedEntries() is false
- TUSCANY-2931 - Start of test for different in request and response wire formats. Infrastructure not working properly just yet. 
- Do not throw exception if the jar is not an EJB jar.
- TUSCANY-2932 Correctly handle NotFoundException as a 404 in AtomBindingListenerServlet
- Adding module to the build.
- TUSCANY-2935 Integration tests for Java EE contribution processing
- TUSCANY-2933 - Runtime changes to properly define widget functions in it's own namespace
- TUSCANY-2933 - Updating photo-gallery sample to use widget Java Script fuctions in the new tuscany.sca namespace
- TUSCANY-2933 - Updating store sample to use widget Java Script fuctions in the new tuscany.sca namespace
- TUSCANY-2933 - Updating store samples to use widget Java Script fuctions in the new tuscany.sca namespace
- TUSCANY-2933 - Updating domain manager ui to use widget Java Script fuctions in the new tuscany.sca namespace
- TUSCANY-2933 - Updating store tutorial to use widget Java Script fuctions in the new tuscany.sca namespace
- TUSCANY-2933 - Updating widget test html to use widget Java Script fuctions in the new tuscany.sca namespace
- Store scenario using widget packaged as a webapp
- Adding store-webapp to build
- TUSCANY-2838 - Updating implementation widget to properly register component java script in a webapp environment
- TUSCANY-2838 - Missing files required by implementation widget to properly register component java script in a webapp environment
- Update scadomain to support passing in the default port in the domain uri
- TUSCANY-2936 Extension point API for Java EE
- Commenting out since an issue in openejb is resulting in problems with WAR processing.
- Set some svn ignores
- TUSCANY-2936 Extension point API for Java EE
- Minor formatting
- Adding provided binding URI to avoid issues when service is deployed in a webapp environment
- Minor formatting and removing unused imports
- Adding test case to test atom feed reference using generic collection interface
- Move JAAS service policy provider from binding wire to the operation wire
- add some ignores
- add some ignores
- Set svn ignores
- TUSCANY-2918, Update jms support so that the service listener can be pluggable via host-jms
- Move fault type introspection to the the fault mapper
- Fixes for TUSCANY-2906
- Fixes for TUSCANY-2941
- Don't fall over if there is no introspector, e.g. if contribution-jee-impl is not loaded
- TUSCANY-2931 - allow separate request and response wire formats in binding.jms. The tuscany binding.jms XSD has been extended to allow a response wireFormat element to be specified. The knock on effect of all this is that the Operation interface has been changed to allow input and output wrapper info to be held separately. Also Interface has some new operations. There are changes across the code base to take account of this interface change. 
- Add a namespace to the missing component type composite
- Remove these files as they are no longer required. Replaced by RRB... versions.
- Example of how we could describe what exceptions are expected in stests
- Take testcase out of build as its now broken, see TUSCANY-2942
- Add jira number
- Take testcase out of build as its broken, see TUSCANY-2943
- Take store-test out of build as its broken, see TUSCANY-2944
- Remove old "getWireFormatInterfaceContract" operation
- Take fialing tests out of build, see TUSCANY-2945
- TUSCANY-2934 - wire up the wire format writers
- TUSCANY-2937 - Renaming FeedAggregatorTestCase and adding @Ignore on failing tests as described in jira
- TUSCANY-2837 - Adding Javascript extension points to be used by implementtion.widget and any web related extensions that have Javascript proxy dependencies
- TUSCANY-2837 - Updates to start using Javascript extension points to generate js client proxies
- TUSCANY-2837 - Atom Binding Javascript extension point implementation
- TUSCANY-2837 - JSONRPC Binding Javascript extension point implementation
- TUSCANY-2837 - Updating sample app dependencies to add javascript dependencies for atom and jsonrpc bindings
- TUSCANY-2837 - Adding new modules to build
- TUSCANY-2837 - Adding javadoc comments to JavascriptProxyFactory
- TUSCANY-2837 - Extending Javascript extension to provide the js proxy client file
- Removing duplicated file that is already available in main/resources
- TUSCANY-2837 - Adding new js dependencies
- TUSCANY-2837 - Adding new js dependencies
- TUSCANY-2946, take failing test out of build
- TUSCANY-2947, take itest out of build as its failing
- TUSCANY-2948, take jms-format test out of build for now
- TUSCANY-2944 don't raise NPE if the component type model cannot be determined
- TUSCANY-2950 enclose etags in speech marks
- TUSCANY-2937 uncomment ignored tests as underlying etag issue is fixed under TUSCANY-2950.
- Workaround the jaxws-api maven issue (merged from 2.x)
- TUSCANY-2944 - Enable tests as recent changes from slaws in revision #759149 fixes the problems we were seeing.
- TUSCANY-2931 - update operation matching to be based on operation name. Add a complex type based interface back into to the test case. 
- Process SCA Property and Reference annotations.
- TUSCANY-2935 Integration tests for Java EE contribution processing
- Reversing the changes committed accidentally in the last commit.
- Put back the TUSCANY-2946 failing test into the build to see if anyone else gets it
- Fixes for TUSCANY-2945, 2947, 2948
- Fixes for TUSCANY-2945, 2947, 2948
- Fixes for TUSCANY-2945, 2947, 2948
- Added the missing JSP spec dependency.
- Set svn:ignore
- Set svn:ignore
- Make sure SCA domain is closed 
- Move the componentType files into the resource folder so that maven copy them into the target/classes
- Removing obsolet place holder module
- Removing eclipse/maven generated files
- TUSCANY-2878 - New extensions to generate javascript proxies when using dojo
- TUSCANY-2878 - Module responsible to add register dojo toolkit in web environment under '/dojo'. This is usefull in embedded environment
- TUSCANY-2878 - JavaScript Generator extension point. Used by implementation.widget to allow multiple implementations of js generator (e.g. tuscany specific and dojo based)
- TUSCANY-2878 - Changes to support new JavaScript Generator extension point and new generators for tuscany specific scripts and dojo toolkit
- TUSCANY-2878 - New store sample app using dojo version of implementation widget
- TUSCANY-2878 - Adding new modules and sample apps to build
- TUSCANY-2878 - Removing obsolete file
- TUSCANY-2878 - Adjusting modules to add implementation-widget-runtime-tuscany as dependency
- TUSCANY-2878 - Adjusting modules to add implementation-widget-runtime-tuscany as dependency
- TUSCANY-2878 - Moving tests to implementation-widget-runtime-tuscany and minor pom adjusts
- TUSCANY-2955 SCA annotation processing for impl.web, impl.ejb, impl.jee
- Moving Erlang binding to 1.x branch
- TUSCANY-2935 Integration tests for Java EE contribution processing
- TUSCANY-2878 - Missed module activator files from last committs
- TUSCANY-2878 - Renaming resource bundle used by monitor to match name expected in code
- svn propset svn:ignore
- svn propset svn:ignore
- svn propset svn:ignore
- TUSCANY-2878 - Missed dojo javascript generator from last commit
- TUSCANY-2878 - Missed dojo javascript extension poing to atom binding
- TUSCANY-2878 - Missed dojo javascript extension poing to jsonrpc binding
- TUSCANY-2956 Java EE Archive introspection
- TUSCANY-2878 - Removing unnecessary .Service from generated dojo jsonrpc javascript proxy
- TUSCANY-2878 - Moving dojo.requires to before store.js and fixing invocation of services to follow dojo pattern
- TUSCANY-2878 - Moving dojo resources to it's own folder to avoid issues with clean target that was removing other non-dojo resources. 
- TUSCANY-2956 Java EE Archive introspection
- TUSCANY-2935 Integration tests for Java EE contribution processing
- TUSCANY-2935 Integration tests for Java EE contribution processing
- Added configurable thread pools, fixed problem with ReferenceServiceTestCase.testMultipleMethod() test case, added writing to binding processor - problems with testing
- TUSCANY-2935 Integration tests for Java EE contribution processing
- Minor typo on method declaration
- Renaming core-web-xxx modules to web-javascript-xxx modules
- Refactoring javascript extension points packages to follow the same naming pattern used by it's modules.
- Fix minor copy error in input vs. output var name
- Set svn:ignore and update the module names
- Make the openejb version consistent and fix the NPE &amp; UnsupportedModuleType
- Comment out the test case due to TUSCANY-2957
- Make sure the outputWrapperStyle is set
- TUSCANY-2952, fix jms listener to work in weblogic 10.x
- Copy zip/folder nested jar support change from 2.x to 1.x
- Added a configuration to work around http://jira.codehaus.org/browse/MECLIPSE-544
- TUSCANY-2862 - Fixing issues when calculating contribution location and provided composite had spaces
- TUSCANY-2862 - Fixing URI issues when processing jar contributions that had artifacts with space on it's name
- TUSCANY-2862 - Further changes to handled folder contributions that have artifacts with space in the name
- Fix TUSCANY-2957
- Add remotable check to avoid perf penality from Holder processing for local calls
- TUSCANY-2938 - Fixing how we calculate request path based on contextPath and ServletPath to make operations working in both embedded and webapp hosted environment
- TUSCANY-2871 - Providing better exception when feed entry is not supported
- Refacroting testcase to use same package pattern for the module
- Removing empty directory
- Removing empty directory
- TUSCANY-2958 JEEImplementationImpl, WebImplementationImpl and EJBImplementationImpl need to implement PolicySetAttachPoint
- General improvements for messaging, fixed some issues regarding communication with real Erlang nodes
- Change to use port 8085 as 8081 has a conflict on the continuum server
- Change JMS server port to try to avoid conflict on continuum server
- Add a println of the problem to see what it says when running on the continuum machine as the test is assing for me
- Exclude the module that has conflicting classes with the JDK
- Separate the contribution JEE sample scenarios from the contribution JEE itests so we can see the source for the samples and more easily mix and match to construct the various combinations required. Add a new test relating to a single sample scenario to explore the problem with classloading where the JEE archive classloader is not available during contribution resolution. 
- Set a bunch of svn ignores
- Messaging improvements
- TUSCANY-2851, start of an itest for exceptions in Java component initilization
- Add more complete test for the various lifecycle exceptions
- TUSCANY-2851, fix exceptions during init processing of java components to call destroy
- Use explicit version to fix continuum build
- Use explicit verison to fix continuum build
- Change to port 8085 to avoid conflict on continuum build
- Change some jms ports to try to fix continuum build conflicts
- Change some jms ports to try to fix continuum build conflicts
- Comment out tests which don't work on continuum build machine
- TUSCANY-2972 - Sample code for fixing up classloaders for JEE archives. No where near done yet but allows us to experiment and explore the problems.
- Added support for Erlang Atoms
- Try another port for the continuum machine build
- Comment out the http service as its not used by the test an seems to ause a problem in continuum
- Bump up 1.x trunk version to 1.6-SNAPSHOT
- General improvements
- TUSCANY-2976: Apply patch from Greg Dritschler to Remove default 'ConnectionFactory' in JMSBinding model
- TUSCANY-2972 instigate contribution type specific class loading to allow the JEE classloader to be used independently of jar, zip, dir classloading schemes
- Start adding some more JEE samples. No guarantee that these actually work yet as I haven't run them in a JEE runtime but a place to start. 
- Start of a testcase which show implemntation.jee pointing at an ear is processed correctly
- Add test dependency
- It should be EAR instead of EJB.
- Type should be WAR instead of EAR.
- Set the EJB classloader in EJBModuleInfo.
- Move testcase to an itest
- New itest for jee external ear's
- Set svn ignores
- Update to introspect external ear archives
- Rename testcase as it works now (as long as you've the NPE fixed openejb jar)
- Add exclusion to avoid the conflicting jdk classes from felix
- Add "Extensible" support for the ContributionMetaData/Contribution/Import/Export models (TUSCANY-2983)
- TUSCANY-2968 - Creating a new http binding based on current tuscany one
- Removing unecessary @Ignore
- TUSCANY-2968 - Adding new binding processor and making necessary adjustment to move to spec namespace
- Adding gdata dependencies to LICENSE file (copied from 1.4 release)
- Updating pom version to reflect changes made in trunk in preparation for release
- TUSCANY-2968 - Adding module to handle json-rpc wireformat and initial support for it
- Add an external ear modelresolver approach to the jee itest
- Improve the handling of INOUT and OUT parameters using JAX-WS Holder
- Remove bundle module from the pom.xml as it's now moved
- Put back distribution/bundle that was inadvertently removed in r766999
- Put back distribution\bundle into the build
- TUSCANY-2930 main part of separating wireFormat.jmsdefault out from wireFormat.jmsTextXML. I've spotted a few more things that need fixing but this basic functionality passes all of our current JMS tests and now better matched what the specification says about default format.
- TUSCANY-2930 extend default format test for the chase where default is specified on reference but not on the service
- Move the JAX-WS holder testing logic to interface-java-jaxws
- TUSCANY-2986 - move the callback processing into a separate interceptor to allow other operation selectors to use it. Don't have any others just yet but about to add another one. 
- TUSCANY-2987 code to make nativeOperation based operation selection work and add new operation selector (jmsUser) that allows you to specify what JMS message property holds the operation name. No test cases yet. 
- TUSCANY-2977 determine implementation.jee component type from application composite if one is available
- o Updated artifactId to the correct (long) one.
- TUSCANY-2987, TUSCANY-2964. Rename operation selector that allows the user to specify which message property holds the operation name. Add tests cases for this and the default selector. Rename default selector to be all lowers case (it's still in the Tuscany namespace though)
- TUSCANY-2965 - add a jmsBytesXML wireFormat analogous to jmsTextXML
- TUSCANY-2966 - reset bytes message after read in operation selector so that following wire format can re-read bytes if required. 
- Update the tuscany part of the JMS binding schema to take account of recent wireFormat and opertionSelector changes. These schema type are not wired into the binding.jms schema at the moment (we rely on anys) but it's useful to keep track of the shape of these elements. 
- Add some ignores
- TUSCANY-2626 - add EndpointReference back into the binding.ws schema. This is not the wsa:EnpointReference though. To get this to work I have had  EndpointReference goes in the target namespace. The code to read EndpointReference still reads wsa:EndpointReference so this shouldn't break anyone already using that but at least it gives the reader an idea about what can validly go in the schema. 
- Fix the ArrayOutofBoundException that causes the hang of itest/helloworld-bpel
- set svn:ignore
- Make sure the default mode is set to INOUT if the type is Holder.class
- TUSCANY-2626 add file missed in previous commit for this JIRA
- The war file generated by the jee sample project has a long name.  Updating the url accordingly.
- Code update to support external EAR has broken this test. Ignoring the test for now.
- TUSCANY-2953 Fix sca.tld in branches-1.x
- Uncommenting contribution-jee itest.
- TUSCANY-2997 - Removing unecessary load of dojo base component
- TUSCANY-2998 - Fixing sample usage of dojo based JavaScript proxies to avoid issues when invoking shopingCart service (e.g loading shoopingCart contents)
- TUSCANY-2999 - Fixing property initialization in implementation widget
- TUSCANY-2968 - Adding model and processors for JSONRPC Operation Selector
- TUSCANY-2968 - Starting to bring up JSON RPC runtime pieces as wire format for binding.http
- Add an itest for setting the JMS Time-To-Live header
- Remove unused xsds
- Add exclusion to avoid the conflicting jdk classes from felix
- Make sure the checked exception is tested against the target operation
- MOving data-engine-helper to contrib
- Removing data-engine-helper from pom as it was moved to contrib
- Fix for TUSCANY-3000
- Add a apace for the error message
- Fix the clone()
- TUSCANY-2996 - Add support for wrapSingle attribute that, when set true, ensures that single parameters are wrapped in an array on the wire. When set false single parameters will not be wrapped on the wire. Multiple parameters will always be wrapped. 
- Add ignore
- TUSCANY-2965 - add fault handling code for wireFormat.bytesXML
- TUSCANY-2993 Fix global variable handling that was causing store-dojo to fail with internet explorer
- Move the Holder logic into JAXWS interface processor
- Start to add contribution level SDO type registration
- Set svn:ignore
- Add annotation dependency as the provided scope is not transitive
- Update to cargo plugin 1.0
- Refactor the data transformation and copy logic into Mediator utility
- Add jee contribution samples to the build as the contribution-jee itest depends on it
- TUSCANY-3002: fix writeStartElement calls in JMSBindingProcessor do not pass namespace
- Clean up imports
- TUSCANY-3006 - Disabling failing test cases
- TUSCANY-2968 - Updating binding-http schema and moving wireFormat and operationSelector to tuscany-sca-core.xsd to be sharable
- TUSCANY-2968 - Changing binding to tuscany namespace and other small updates
- TUSCANY-2968 - Renaming new binding.http module to avoid confusion with the oasis draft, as we are not really implementing the whole spec but just following the wireFormat and operationSelector options implemented in binding.jms
- Double the time the test waits for the time to live to be set into the initial context as it's failing on my machine with the existing timeout. 
- TUSCANY-2978 - Add some more sample archives based on the scenarios here http://cwiki.apache.org/confluence/display/TUSCANYWIKI/Java+EE+Integration
- TUSCANY-2978 - Add test code to exercise new JEE sample archives including code to show how to process an archive that appears outside of the contribution that references it. See TestExternalEarModelResolver.java. Some jee processing changes were required to make this work.
- TUSCANY-3008 disable reference test in testContributeEAR_Enhanced16 until this problem is fixed
- Remove the unused mediator lookup
- TUSCANY-2968 - JSONRPC operation selector
- TUSCANY-2968 - Moving unit tests to iTest to avoid circular references
- TUSCANY-2968 - Further changes trying to add the json-rpc wireformat and operation selector interceptors to the invocation chain
- TUSCANY-2968 - Minor update to make serice providers follow the same implementation pattern
- Set context for mediateFault as well.
- Fixing NPE when no operation provided when creating invoker
- TUSCANY-2968 - Discovering and adding wire format and operation selector interceptors via extension point, but inside binding provider
- TUSCANY-2968 - JSONRPC invocation using operation selector and wire formats working end to end
- TUSCANY-2968 - Enabling test that invoke remote jsonrpc services using the new operation selector/wire format implementation
- TUSCANY-2968 - Adding databinding dependencies to integration tests
- TUSCANY-2968 - Setting JSON dataBinding on service interface contract
- TUSCANY-2968 - Enabling more tests that are currently passing
- Add host-jetty dependency as binging-http needs are servlet host. For some reason this test works OK in Eclipse but doesn't work in Maven. So eclipse is picking up the jetty dependency from somewhere else. Ass some ignores also. 
- Tidy comment
- TUSCANY-3005 - Take account of the case where there are either no input parameters or a void return type (or both). Thanks for the patch Kaushik.
- TUSCANY-2968 - Fixing data binding related issues to properly transform to/from json format as needed
- USCANY-2968 - Enabling more tests that are currently passing
- TUSCANY-2968 - Fixing exception handling issues to properly report exceptions as json error responses
- USCANY-2968 - Enabling more tests that are currently passing
- Small clean up and formatting on tests
- TUSCANY-2968 - Fixing NPE with pure http binding
- Removing unwanted files, got in accidentaly
- Renaming Spring modules as old
- Refactoring Spring module
- moving spring-runtime to spring-sca
- Refactoring Spring Module
- Changing Spring Dependencies
- Refactoring Spring Module
- Refactoring Spring Module
- TUSCANY-2959 - Store-android patch from Sanni Lookman
- Adding missing Apache headers to store-android
- Restoring catalog activity as backup/reference
- TUSCANY-2900 - Add code to generate JMS binding and service/port to generated wsdl. Add itest to explore the different ways of configuring generated WSDL. 
- TUSCANY-3011 correct JMS binding XSD to make OperationalProperties/Headers optional as per the OSOA spec
- Performance enhancement to avoid processing the deployable composite twice when starting a node
- Add a new soap/jms transport module copied from the Apache WS Commons transports but with the code backported to work with Axis2 1.4.1
- Merging changes from binding-http-new that introduces support to wire format and operation selector to the main binding-http.
- Fix for TUSCANY-2962
- Leverage optimization from the Axiom 1.2.7
- Remove unused classes
- Merging HTTPBindingProcessor from binding-http-new that introduces support to wire format and operation selector to the main binding-http.
- Renaming binding-http-new-jsonrpc* to binding-http-jsonrpc*
- Adjusting pom with recent module name refactoring/changes
- Removing obsolete modules that have been merged or renamed.
- Fix for TUSCANY-3017
- Abandon trying to use the new Axis2 JMS transport for now as its proving too messy tryingto backport it to the 1.4.1 release. Now trying a new approach which modifies the JMS transport from Axis2 1.4.1
- Start bringing up Tuscany version of JMS transport so the setMessageListener not allowed in a JEE container can be fixed
- Add support for using Tuscany threads instead on setMessageListener in a JEE container environment
- Fix NPE bug in TUSCANY-2962 fix
- TUSCANY-2967 Fix up just jmsBytes wire format to return exceptions as bytes to see if this is what we want
- TUSCANY-3031 Ensure that JMS wire formats that don't required a data transformation work when interface.wsdl is used. Use the component type interface rather than the service
- A tool to save to disc the WSDL for each service, with binding.ws, within all of the deployable composites in a specified contribution
- Exclude work session.ser from build
- Add missing license headers
- Add missing license headers
- Rename tests and add license header
- Add missing license header
- Add missing license header
- Exclude cruft from bin distro
- Excelude multiple sca bindings from bundle build
- Exclude bouncycastle
- Update legal files
- Remove provided csope from spring dependencies
- Add spring runtime module
- Mereg bouncy castle excludes from 1.5 to 1.x
- Exclude dojo files
- TUSCANY-3030 if the fault exception mapper is null try getting it from the registry before returning the fault unmapped. This takes care of the case there the mapper is null just because the JavaRuntimeModuleActivator is started before the DatabindingModuleActivator
- TUSCANY-3032 - fix binding.ejb schema so that ejb-link-name is a string not an NCName
- Correct typo in exclude
- TUSCANY-3025 - Appying Sanni Lookman patch plus small fixes to make it run successfully
- TUSCANY-2967 - to aid investigation of possible exception processing refactoring enhance format tests to test checked and unchecked exceptions. Also add a wf.jmsText test.
- Do BytesMessage.reset() on BytesMP, DefaultMP to be consistent across wire formats.
- Apply patch for TUSCANY-3033 from Pradeep. Thanks.
- Removing obsolete FIXME tags, as exceptions are handled ok on wireFormat interceptor already
- Reporting fault message with exception in json representation, when jsonrpc operation selector interceptor can't parse json request
- Updating java doc for HTTP JSON-RPC wireformat/operation selector extensions
- Properly handle SMD requests in JSON-RPC wire format/operation selector
- Reverting changes as this would make sample stop working due to TUSCANY-3042
- Add jms host to bundle to fix running jms samples

Changes With Apache Tuscany SCA 1.4 December 2008 
==================================================

- Features and/or Enhancements

Core
    * Enhancements to Spring integration
          o Support for Spring version 2.5.5
          o Spring Schema location changed to http://www.osoa.org/xmlns/sca/1.0/spring-sca.xsd
          o Support for Implementation Policies to Spring Components
          o Support for basic SCA annotations with Spring beans
          o Improved user guide documentation
    * Axis2 Runtime
          o Support for Axis2 version 1.4.1
          o Support for MTOM message optimization
    * JMS
          o Support for SCA callbacks with JMS binding
          o Support for new subscription Header element from latest WD3 spec draft
          o Support for @requestConnection / @responseConnection
          o Improved user guide documentation
    * Tracing
          o Support for Aspect Oriented Tracing

Web 2.0 Extensions
    * ATOM Binding
          o Support for eTags, last-modified headers, complete support for location header
          o Support for streaming postMedia and putMedia
          o Support for negotiated content types
    * HTTP Binding
          o Support for eTags

Other Extensions
    * Corba Binding (GSoC)
    * GData Binding (GSoC)

Tools
    * Tuscany Eclipse Plugins enhancements to be compatible with new Eclipse Ganymede release

Samples/Tutorial/Demos
    * Improved simple-bigbank-spring samples to demonstrate various SCA bindings with Spring

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
  * TUSCANY-2585 	 Support for <import/> tag in Spring Application Context 	 
  * TUSCANY-2623 	Atom binding JavaScript client needs model to XML serialization 	 
  * TUSCANY-2634 	Implementation Policies for implementation.spring 	 
  * TUSCANY-2654 	Support for SCA Annotations in Spring Implementation 	 
  * TUSCANY-2655 	Create itest for SCA annotations with Spring Implementation 	 
  * TUSCANY-2656 	More improvement to the spring itest 	 
  * TUSCANY-2665 	Issue noticed in itest-contribution while starting the CalculatorClient 	 
  * TUSCANY-2666 	Improvement in Spring BigBank Sample test 	 
  * TUSCANY-2672 	Compilation Error Building SCA CORBA Binding Runtime 	 
  * TUSCANY-2455 	Exception not thrown on duplicate component names within a composite 	 
  * TUSCANY-2550 	Ensure Spring Implementation works with binding.sca/jsonrpc/rss/atom 	 
  * TUSCANY-2549 	Documentation on Spring Implementation for SCA Java User Guide 	 
  * TUSCANY-2613 	Upgrade Implementation Spring version from 2.0.8 to 2.5.5 	 
  * TUSCANY-2641 	Enhancements to Tuscany Logging and tracing 	 
  * TUSCANY-2567 	Support for streaming postMedia and putMedia in Atom binding 	 
  * TUSCANY-2537 	Demonstrate Atom Binding end to end caching (ETag, Last-modified use) in 	 
  * TUSCANY-2504 	Atom binding support for negotiated content types 	 
  * TUSCANY-2516 	HTTP binding should support etag and if-modified headers 	 
  * TUSCANY-2597 	Generation of AtomPub workspace/service document 	 
  * TUSCANY-2477 	Atom binding support for eTags, last-modified header 	 
  * TUSCANY-2487 	Test Cases for different data type supported by JSONRPC binding 	 
  * TUSCANY-2517, TUSCANY-2520, TUSCANY-2521, TUSCANY-2522 	Improvements in spring big bank sample

Changes With Apache Tuscany SCA 1.3.3 Xxxxxxx 2008 
==================================================

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
  * TUSCANY-2635 Pool stateless-scoped Java impl instances


Changes With Apache Tuscany SCA 1.3.2 October 2008 
==================================================

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
  * TUSCANY-2628 Fix some other file license headers that should refer to the OSOA license
  * TUSCANY-2620 Fix license header for sca.tld
  * TUSCANY-2618 Add required attribute elements to sca.tld
  * TUSCANY-2615 Fix NPE in databinding and a nested exception test in vtests
  * TUSCANY-2614 Fix missing headers reported by RAT during release
  * TUSCANY-2598 Patch to support zip protocol type
  * TUSCANY-2592 Reduce size of demo/mortgage-loanapproval doc
  * TUSCANY-2591 Invalid JMS Message Property in binding.jms
  * TUSCANY-2590 Pool JAXB marshaller/unmarshallers for a given JAXBContext
  * TUSCANY-2587 Inconsistent service naming in promoted service scenarios
  * TUSCANY-2561 Soap intents are lower case while the policy framework says that they should be upper case
  * TUSCANY-2538 Tuscany object model does not handle unknown content in composite files
  * TUSCANY-2531 Problems with generated wsdl when using non service package
  * TUSCANY-2513 Java intfs with @WebService should be treated like @Remotable intfs wrt calculation of services implemented by a Java implementation
  * TUSCANY-2501 InterfaceContract is not established on reference when it's not calculated by introspection
  * TUSCANY-2463 Provide capability for handling attribute extensions to standard SCA elements in composite file
  * TUSCANY-2398 Problem with using interface.java on reference when using interface.wsdl in service with a doc/lit/bare wsdl

Changes With Apache Tuscany SCA 1.3.1 August 2008 
=================================================

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
  * TUSCANY-2539 File handle on composite affecting behaviour of tuscany deployments in websphere.
  * TUSCANY-2535 Tuscany dosn't run if install on a WebSphere server that has itself been installed in a directory with a space in the name
  * TUSCANY-2534 WebSphere issue java.lang.ClassCastException
  * TUSCANY-2531 Problems with generated wsdl when using non service package
  * TUSCANY-2519 "throws Exception" causes failure in JAXB type generation
  * TUSCANY-2514 tuscany-host-{tomcat,jetty} and jsr181-api should be optional dependencies for binding.ws clients
  * TUSCANY-2505 Problem in case: start with DLW wsdl, generate Java w/ wsimport, throw away WSDL and use <intf.java>, when wrapper elem used named type (not anonymous)
  * TUSCANY-2389 null elements in Object array not getting passed over binding.ws


Changes With Apache Tuscany SCA 1.3 August 2008 
===============================================

- Features and/or Enhancements

  We have graduated as a top level Apache project. The incubating disclaimer has been removed
  and the artifact names and version no longer containg the "-incubating" string.

  * Core
    - More improvements to the Distributed Domain story
      - Old domain and node code has been removed
    - Improved runtime Java2WSDL processing
      - No longer relies on Axis code
    - Support for core validation monitoring
      - A pluggable monitor can be used to trap and process validation messages 
    - Performance improvements
    - Java 2 security enablement across the code base
  * Extensions
    - Validation monitoring added to extension processors
    - Databinding improvements
    - JSR250 annotation support
    - OSGi support improvements 
    - Better BPEL support
  * Tools
    - No significant changes
  * Samples/Tutorial/Demos
    - No significant changes
  * Testing
    - more spec verifaction tests
    - validation itests

Changes With Apache Tuscany SCA 1.2.1 (incubating) June 2008 
============================================================

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
  * TUSCANY-2304 SCA client Hang Forver after getting exceptions from remote web service


Changes With Apache Tuscany SCA 1.2 (incubating) April 2008 
===========================================================

- Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
  * TUSCANY-2027
  * TUSCANY-1999
  * TUSCANY-2037
  * TUSCANY-2034
  * TUSCANY-2038
  * TUSCANY-2043
  * TUSCANY-2046
  * TUSCANY-2047
  * TUSCANY-2028
  * TUSCANY-1873
  * TUSCANY-2049
  * TUSCANY-2035
  * TUSCANY-1206
  * TUSCANY-2036 
  * TUSCANY-1771
  * TUSCANY-2013
  * TUSCANY-1926
  * TUSCANY-1917
  * TUSCANY-1949
  * TUSCANY-1941
  * TUSCANY-2045
  * TUSCANY-2057
  * TUSCANY-2055
  * TUSCANY-2056
  * TUSCANY-2072
  * TUSCANY-2047
  * TUSCANY-2073
  * TUSCANY-1977 
  * TUSCANY-2075
  * TUSCANY-1894
  * TUSCANY-2079
  * TUSCANY-2078
  * TUSCANY-2080
  * TUSCANY-2068
  * TUSCANY-1950
  * TUSCANY-2077
  * TUSCANY-2056
  * TUSCANY-2088
  * TUSCANY-2086
  * TUSCANY-2094
  * TUSCANY-2106 

  Features and/or Enhancements

  * Core
    - Interceptor Enhancements
      - Phase-based interceptor ordering to allow contribution of new interceptors and also define the order in witch they should be invoked
      - Pass-by-reference SPI to allow interceptors to indicate if they support pass-by-reference
      - PolicyProvider SPIs to allow extensions to plugin policy interceptors
    - Support for JAXWS annotations and mapping of faults to Java exceptions according to JAXWS specification
    - Improvement of contribution service to allow it to be used outside of the runtime environment 
    - Support for Contribution Import/Export resource
    - Enhanced Distributed Domain story using Workspace
      - Implementation of a SCA domain allowing a system administrator to manage contributions, composites and sca nodes that run these composites
        - Set of core services providing management capabilities
        - Administration web interface
        - This is a work in progress and you can see it in action in samples/calculator-distributed. Other samples that use distributed operation are yet to move over to the workspace.
    - Enhanced support for SCA Policy spec
      - Ability to apply external policy definitions to a SCA composition
      - Ability to spread policy definitions to multiple definitions.xml files available across the sca domain
      - Bug fixes
    - Improvements of http binding to support servlet components
    - Enable Tuscany to run inside an OSGi runtime

  * Web 2.0 Extensions
    - Enhancements to implementation.widget (support for properties)
    - New atom binding based on Apache Abdera
    - Refactoring of rss-rome binding
  * Other Extensions
    - Binding JMS
      - greatly simplified the use of the JMS binding, support locating JMS resources from JNDI, and better compliance with the SCA JMS binding spec
      - see the doc page for more details: http://incubator.apache.org/tuscany/sca-java-bindingjms.html
    - Enhancements to Binding RMI
      - Support shared RMI registry and use 999x as the ports in test case to avoid 1099 conflict
    - Enhancements to Groovy extension
      - Support for 'native' groovy classes
    - Enhancements to OSGi bundle contributions
      - Support Bundle URLs to be added as contributions

  * Tools
    - Eclipse plugin providing a Tuscany runtime Library and Tuscany launcher in Eclipse environment
       - An updatesite is also available to facilitate the plugin installation using the Eclipse update manager

  * Samples/Tutorial/Demos
    - calculator-distributed migrated to use new Tuscany Distributed Workspace
    - sample-calculator-ws-secure-webapp
    - sample-helloworld-jms-webapp
    - new jms samples
    - improve bigbank demo to include support for policies 
    - tutorial store changes
      - use of import/export
      - development of contribution without requiring dependencies on the Tuscany runtime
      - usage of new sca domain infrastructure

  * Testing
    - Web Container Testing Framework integrated with (Tomcat, Jetty, Geronimo and Websphere)


Changes With Apache Tuscany SCA 1.1 (incubating) January 2008 
===============================================================

- Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
  * TUSCANY-1939
  * TUSCANY-1914
  * TUSCANY-1854
  * TUSCANY-1931
  * TUSCANY-1547
  * TUSCANY-1909
  * TUSCANY-1919
  * TUSCANY-1930
  * TUSCANY-1806
  * TUSCANY-1804
  * TUSCANY-1916
  * TUSCANY-1913
  * TUSCANY-1834
  * TUSCANY-1857
  * TUSCANY-1687
  * TUSCANY-1801
  * TUSCANY-1742
  * TUSCANY-1762
  * TUSCANY-1945
  * TUSCANY-1595
  * TUSCANY-1594
  * TUSCANY-1849
  * TUSCANY-1836
  * TUSCANY-1934
  * TUSCANY-1902
  * TUSCANY-1608
  * TUSCANY-1943
  * TUSCANY-1896
  * TUSCANY-1626
  * TUSCANY-1797
  * TUSCANY-1601
  * TUSCANY-1415

- Better JMS support
  * binding.jms supporting point to point text based messaging only
  * New SOAP/JMS sample (helloworld-ws-reference/service-jms)

- Improvements in PolicyFramework Support
  * Support for policy specifications on operation elements in a composite definition
  * Separate sample (calculator-implementation-policies) to demonstrate use of Implementation Policies 
    (uses logging and JAAS Authentication)

- Modeling of client side java script components
  * See implementation.widget

- Evolving support for doman API suggested by assembly spec including a standalone node and nodes running 
  connected together in a domain. This is still experimental. 
 
- Class loading and OSGI improvements
  * Enable Tuscany to be run in a multi-classloader environment including inside OSGi. By default,
    Tuscany continues to run using a single CLASSPATH-based classloader.
  * Contributions no longer need to be in the CLASSPATH. All import/export dependencies across contributions should be 
    explicitly specified (as described in the spec).

- JAXB based POJO transformations

Changes With Apache Tuscany SCA 1.0.1 (incubating) November 2007 
================================================================

The Tuscany SCA Java 1.0.1 is mainly a bug-fix release. It also comes with some improvements as listed below.
 
- Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
  * TUSCANY-1848
  * TUSCANY-1857
  * TUSCANY-1859
  * TUSCANY-1801
  * TUSCANY-1823
  * TUSCANY-1839
  * TUSCANY-1814
  * TUSCANY-1818
  * TUSCANY-1834
  * TUSCANY-1637
  * TUSCANY-1826
  * TUSCANY-1823
  * TUSCANY-1819
  * TUSCANY-1821
  * TUSCANY-1822
  * TUSCANY-1806
  * TUSCANY-1808
  * TUSCANY-1756
  * TUSCANY-1757

- Fix build issues with Maven 2.0.7 and JDK 6

- Reduce memory consumption for WSDLs that import large XSDs

- Add more logging statements for better servicibility

- Add an extension point to allow extensions to plug-in extension schemas.

- Add a demo application to showcase XML integration story 

- Improve in databinding framework
  * Add support for JSON Databindings and other refactoring
  * Set databinding for introspected data type and enhance the checking of wrapper style
  * Improve the tree-based XMLStreamReader and convert Bean & DOM to use this approach
  * Add a tree-iterator based XMLStreamReader base impl
  * Add default element info to java interface
  * Rename Interface.setDefaultDataBinding to resetDataBinding

- Limit the method injection to setters and allow the setter annotation to override field annotation

- Evolving support in Intent and Policy handling
  * Add support for policies in implementation
  * Fix the algorithm for macthing policySets defined on bindings for the wire
  * Add policy intent for implementation.java
  * Extend java implementation type to recognize and apply policies, adding util support for this in Policy module
  * Add policy module for logging

- Evolving development in the SCA Domain/Node

- Update NOTICE files with missing dependencies


Changes With Apache Tuscany SCA 1.0 (incubating) September 2007 
===============================================================

- Tuscany Java SCA now implements V1.0 of the core SCA 
  specifications
        SCA Assembly Model V1.0
        SCA Java Common Annotations and APIs V1.0
        SCA Java Component Implementation V1.0
        SCA Web Services Binding V1.0
  Including callbacks, conversations and callable references
  

- Support for ws-security configurable in the web services binding
  thro Tuscany SCA policy intents and policysets using the policy framework 
  introduced in the last release.  
  
  Note : This release supports specifications of policies around axis2
         config params - see helloworld-ws-service-secure sample.  The policy
         intents that have been tested are authentication, integrity and 
         confidentiality.  
         There is no sample or test that exercises confidentiality since there
         are some unresolved licensing issue around bouncycastle libraries.  
         However, users who are not encumbered by the bouncycastle license 
         restrictions can try the 'confidentiality' intent. See FAQ - 
         http://incubator.apache.org/tuscany/tuscany-sca-java-faq.html
                
         This release does not include support for WS-Policy
         attachments in Tuscany Policysets for ws-security.
         
  
- An XQuery component implementation type 
        implementation-xquery
        

- A Databinding for converting data to and from nodes for XQuery 
  processing
        databinding-saxon
        

- OSGI support has been extended to allow Tuscany contributions 
  packaged as OSGI bundles hence taking advantage of OSGI's bundle
  loading an dependency management capabilities 
  

- A BPEL component implementation type experimental implementation
based on SCA BPEL Client and Implementation V1.0. At the moment only
supports BPEL process as services.
	implementation-bpel


- The distributed runtime implementation has been separated out 
  into 
        *) domain
        *) node
  It is now wrapped by a SCADomain interface as is the standalone 
  runtime.
  
  Note: This release does not include support for WebApp host deployment 
        for a distributed SCA Domain 
  


- The web service binding will now generate WSDL automatically
  based on the service interface if no WSDL is provided
  

- A new "store" sample and associated document show how a 
  simple store front application can be constructed 
        samples/store
        
- The following features of this release are still experimental:
     - BPEL implementation type, integrating with Apache ODE
     - OSGI implementation type, integrating with Apache Felix
     - XQuery implementation type

 

Changes With Apache Tuscany SCA 0.99 (incubating) August 2007 
=============================================================

The following are the significant additions to release 0.99 
over and above all of what was offered in release 0.91.

- A version of the default sca binding that works between
  components runing in separate Java virtual machines
       binding-sca-axis

- A simple node implementation and a service discovery 
  function for running sca applications distributed 
  across more than one node
       distributed
       distributed-impl 

- integration with OSGi runtimes is now supported with
  a new implementation-osgi component type

- PUB/SUB interactions are now supported by using new 
  notification binding and implementation types, and
  samples demonstrating the feature.

- The Tuscany runtime now has a policy framework supporting
  the SCA policy specification

- the endpoint URIs used by SCA bindings has been rationalized 
  and now follows the SCA Assembly specification

- binding-ajax has been renamed to binding-dwr

Changes With Apache Tuscany SCA 0.91 (incubating) July 2007 
===========================================================

The following are the significant additions to release 0.91 
over and above all of what was offered in release 0.90.


- Enhancements to support multiple contributions to the SCA Domain

- The inclusion of a alternative simplified extensions-helper
SPI layer to faciliate rapid development of extensions

- More Implementation Extenstions
        Spring
        WebResource

- More Binding Extensions
        AJAX
        EJB
        RSS/ATOM Feeds
        
- Demos that demonstrate the use of a mix of extensions
         alert-aggregator-webapp
         bigbank-account
         bigbank-calculator
         bigbank-stockquote


- Samples
        Samples to demostrate use of Spring, Resource, AJAX extensions

Changes With Apache Tuscany SCA 0.90 (incubating) June 2007 
===========================================================

- Implementations for all of the Java Annotations and API Specification V1.0 found at
  (http://www.osoa.org/display/Main/Service+Component+Architecture+Specifications) 
  apart from the following.
    @ComponentName
    Conversation
    RequestContext
    
- New assembly model implementation taking into account SCA 1.0 artifacts 
  Data duplication between assembly model and runtime removed

- Simple single process domain support
  Contribution support to scope items being deployed into the runtime

- Improved Package/Class naming consistency across modules

- Extensions now loaded via Java service mechanism
  Refactored extensions to use new SPIs (see below)

- Maven and Ant based sample builds in the binary distribution

- Implementation Extensions
    Java
    Script supporting (Ruby, Python, Groovy, JavaScript)

- Binding Extensions
    Axis2
    RMI
    JSONRPC

-Databinding Extensions
    Axiom
    JAXB
    SDO

- Host environments
    Embedded
    Tomcat
    Jetty
    RMI

- A clear set of SPIs intended to be stable over future releases
    SCA assembly model
      org.apache.tuscany.sca.assembly
      org.apache.tuscany.sca.interfacedef
      org.apache.tuscany.sca.interfacedef.java
      org.apache.tuscany.sca.interfacedef.wsdl
      org.apache.tuscany.sca.policy

    SCA contribution model
      org.apache.tuscany.sca.contribution

    Runtime extensions
      org.apache.tuscany.sca.core
      org.apache.tuscany.sca.invocation
      org.apache.tuscany.sca.provider
      org.apache.tuscany.sca.runtime
      org.apache.tuscany.sca.work

    Data binding support
      org.apache.tuscany.sca.databinding

    Embedding Tuscany
      org.apache.tuscany.sca.host.embedded

    Servlet container integration
      org.apache.tuscany.sca.http

- For this point release a partial set of JavaDoc is provided to 
  be filled out as we close on release 1.0