Changes With Apache Tuscany SCA 1.6.1 November 2010 
===================================================

Fix the following JIRA issues (http://issues.apache.org/jira/browse/TUSCANY):
TUSCANY-3765 itest/wsdlgen creates classes that don't run on JDK 5
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