APACHE TUSCANY ENABLES SERVICE ORIENTED ARCHITECTURE SOLUTIONS TO MORE
EASILY RESPOND TO NEW BUSINESS REQUIREMENTS

New Service Component Architecture for Java Lowers Development Costs with
Improved Agility and Flexibility

FOREST HILL MD – 14 October 2008 – Apache Tuscany, a new Top-Level Project
of the Apache Software Foundation (ASF), today announced the release of
version 1.3.2 of its Service Component Architecture (SCA) for Java – the
Project's latest release since its graduation from the ASF Incubator four
months ago.

Apache Tuscany provides a robust, highly extensible infrastructure for
building, deploying, running and managing Service Oriented Architecture
(SOA) solutions, streamlining the development process of service-based
application networks and addressing real business problems posed in SOA.
Service Oriented Architecture solutions utilize new and existing services to
create brand new applications that may consist of different technologies.

"Over the past two years, the Tuscany community has focused on developing
fully open, standards-based, large-scale SOA solutions," said Anthony Elder,
ASF Vice President and Chair of the Apache Tuscany Project Management
Committee. "We continue to receive enthusiastic support for Tuscany's
simple, highly extensible Service Component Architecture (SCA), Service Data
Objects (SDO), and Data Access Service (DAS) subprojects. Becoming an ASF
Top-Level Project and great ideas for future development – including
improvements in application server integration, distributed runtimes and Web
2.0 support – underscore how Tuscany continues to go from strength to
strength."

"We are very pleased that Tuscany has graduated to a top-level Apache
project. Tuscany offers a great open source implementation of the SCA
specifications and it demonstrates the value of the Service Component
Architecture specifications in making it easier to build applications which
integrate functionality using an SOA approach to services," said OASIS
Technical Committee Co-chairs Dave Booz (SCA Policy and SCA-J), and Mike
Edwards (SCA Assembly).

Service Component Architecture (SCA) Support Across Protocols and
Technologies

Service Component Architecture defines a simple, service-based model for the
construction, assembly and deployment of a network of services (both
existing and new ones) that are defined in a language-neutral way. SCA can
be used with a wide variety of existing middleware technologies, enabling
existing assets to be leveraged.

"IBM Software Group is using the Apache Tuscany project to deliver a Java
implementation of SCA 1.0 to its WebSphere Application Server customers,"
said Erik P. Kristiansen, Websphere Product Manager of IBM Software Group.
"Delivered as an optional product extension, the WebSphere Application
Server version 7 Feature Pack for SCA is currently available in Beta (at
http://www.ibm.com/websphere/was/sca)."

The Apache Tuscany SCA programming model provides a level of abstraction
that separates the concerns of developing business solutions from
infrastructure and technology details. This lowers development costs, making
it easier to evolve SOA solutions in response to new business requirements.

Apache Tuscany supports many different binding protocols and programming
technologies and works with a variety of container models. Its modular
architecture makes it easy to integrate with other technologies and runs on
Apache's Tomcat, and Geronimo projects, as well as other application
servers.

"Using Tuscany helps our leading banking customers to fulfill the SOA
architecture and business component specification," said Chris Cheng, Vice
President of Primeton Technologies Ltd. "Primeton has done a consulting
service for one of China's leading financial services company, to help them
to fulfill the SOA architecture, business component specifications and the
container implementation. Now the enterprise architecture, business
component specifications and container implementation have been approved to
be used in all the Enterprise-wide applications in the future."

In addition, Apache Tuscany implements the SCA Version 1.0 specifications as
defined by the Open Service Oriented Architecture Collaboration. Apache
Tuscany also supports the specifications being standardized by OASIS Open
CSA and provides additional support for OSGI, scripting languages, and
Web2.0 related technologies such as RSS and DWR.

"The work of the Tuscany project has made valuable contributions to the
evolution of the SCA specifications, through surfacing specification bugs
and requesting clarifications in a number of areas. Tuscany's achievements
give us confidence that SCA is of wide applicability and can be implemented
by a range of runtimes," added Booz and Edwards. "As well as implementations
of the current SCA specifications, it is interesting to see the community
that has developed around Tuscany pioneering a series of component
implementation and binding extensions to SCA, particularly in the area of
Web 2.0 capabilities, such as HTTP and REST bindings - including ATOMPub and
JSON wire data formats - and the innovative implementation.widget type."

Those interested in learning more about Apache Tuscany and SCA are invited
to attend ApacheCon US, the official conference of the Apache Software
Foundation, taking place 3-7 November 2008 in New Orleans, Louisiana.
Register online at http://www.us.apachecon.com/

To download Apache Tuscany SCA v1.3.2, access mailing list archives and
documentation, or to get involved with the Project, visit
http://tuscany.apache.org/.

ABOUT THE APACHE SOFTWARE FOUNDATION
Established in 1999, The Apache Software Foundation provides organizational,
legal, and financial support for a broad range of Open Source software
projects, including Apache HTTP Server — the world's most popular Web server
software for more than a decade. The Foundation provides an established
framework for intellectual property and financial contributions that
simultaneously limits contributors' potential legal exposure. Through a
collaborative and meritocratic development process, Apache projects deliver
enterprise-grade, freely available software products that attract large
communities of users. The pragmatic Apache License makes it easy for all
users, commercial and individual, to deploy Apache products. For more
information, please see http://www.apache.org/
