Changes With Apache Tuscany SCA 1.6.1 November 2010 
===================================================

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
TUSCANY-3764 Some LICENSE/NOTICE files in individual module jars aren't consistent with the LICENSE/NOTICE files in the binary distribution
TUSCANY-3762 Tuscany SCA Eclipse plugin doesn't install correctly
TUSCANY-3761 Using node-launcher to launch the domain manager doesn't work
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:
r1029129 Fix incorrect war name to exclude from binary distribution
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