Professional Documents
Culture Documents
/ / / TECHNICAL DOCUMENT
TABLE OF CONTENTS
1 2 SUMMARY ................................................................................................ 3 INTRODUCTION ........................................................................................ 4 2.1 2.2 3 4 Key features .................................................................................. 4 Technical features ........................................................................... 4
ARTIFACT COMPONENTS ........................................................................... 5 EXECUTION ENVIRONMENT........................................................................ 6 4.1 4.2 4.3 Software required ........................................................................... 6 Architecture ................................................................................... 6 Deployment ................................................................................... 7
DEVELOPMENT ENVIRONMENT ................................................................... 9 5.1 5.2 5.3 5.4 5.5 Software required ........................................................................... 9 Developing a Web service ................................................................ 9 Testing a Web service ..................................................................... 9 Versioning a Web Service .............................................................. 10 WSDL Construction ....................................................................... 10
EXAMPLES ............................................................................................. 12 6.1 6.2 6.3 6.4 SOAP Message Parser .................................................................... 12 Simple service: dateFormatterService ............................................. 13 Service using digital signature: dateFormatterService ....................... 15 Versioning services: dateFormatterServiceV2 ................................... 15
7 8
REUSABILITY CONSIDERATIONS .............................................................. 18 OPEN SOURCE COMPONENTS DETAIL ........................................................ 19 8.1 8.2 8.3 Architecture ................................................................................. 19 Deployment ................................................................................. 20 Development................................................................................ 21
02 06 2008
l 2 l
SUMMARY
This guide details technical data and development instructions for the artifact Web services framework for high efficiency on execution and development. Following concepts are explained in this document: Core JEE architecture description Development process steps using the architecture provided Examples on developing a simple web service, a secured web service and a versioned web service Reusability considerations Open source components used description and license
02 06 2008
l 3 l
INTRODUCTION
Although Web Services production is a well known process in IT, simple and efficient solutions are few and poor documented. This artifact provides a Spring Web Services platform able to manage a high volume of requests on execution and a framework based on Eclipse for fast and easy development. Financial Entities aims to replace traditional host systems for open architectures without loosing real performance on the change. The JEE platform in which this artifact is a key component has become in the first non-host based backend serving real time operations inside Spanish Bank computing services.
2.1
KEY FEATURES
First JEE platform serving real life requests non based on a host system Currently serving in real about 20 requests per second with mean times around 150 milliseconds per request Easy to develop and fast to execute
2.2
TECHNICAL FEATURES
Based on Spring Framework 2.0 and Spring Web Services 1.0 Currently running on Weblogic 10, but easily adaptable to the most popular JEE application servers Unique end point for every web service invocation Document-driven design of Web Services1 Easy to extend or adapt by using interceptors, hooks and XML configuration Support for: o o o WSS (stands for Web Service Signature) Web service versioning Testing
When creating Web services, there are two development styles: Contract Last and Contract First. When using a contract-last or document-driven approach, you start with the Java code, and let the Web service contract be generated from that. When using contractfirst, you start with the WSDL contract, and use Java to implement said contract (extracted from Spring Web Services reference).
02 06 2008
l 4 l
ARTIFACT COMPONENTS
Following Eclipse projects are included as deliverables for the Web Services framework artifact: WSBArchitecture. Base architecture. o o Includes architecture classes Includes a set of utilities for testing
GenXMLBeans. Development tool. WSBackend. Template deployment for Weblogic 10 o Includes developed examples DateFormatterService DateFormatterService versioned
DateFormatterServiceMock. Template test environment o Includes testing examples Simple Web Service WSS web service Versioned Web Service
Moreover, additional JAR libraries for deployment on every application server supported are provided on DeploymentTemplates folder. Note. The architecture requires Sun J2SE 5.0 or above.
02 06 2008
l 5 l
EXECUTION ENVIRONMENT
This chapter describes the execution environment requisites and functionalities. Core architecture of this artifact is explained by describing WSBArchitecture project and deployment instructions are detailed by examining WSBackend template project.
4.1
SOFTWARE REQUIRED
Not included in this deliverable Application server: Oracle Weblogic Server 10g Included in this deliverable Web services framework: Spring Web Services 1.0.3 JEE framework: Spring Framework 2.0.2 Marshalling tool: XMLBeans 2.3 WSS tool: XWSS 3.0 WSDL tool: Wsdl4J 1.5.1 Logging: Log4J 1.2.8 Testing tool: JUnit 4.4
4.2
ARCHITECTURE
Eclipse project WSBArchitecture includes core architecture for this artifact. The architecture is distributed as a JAR Library named wsb-architecture.jar. Note that it works on several dependencies mainly described previously (Spring Web Services, Spring Framework,). Moreover, some other configuration resources, located on WSBArchitecture project folder conf, must be available on execution computer: conf/env.prop Architecture configuration file including keystore and truststore name and location, XSD validation options and XWSS configuration file location conf/security_config.xml XWSS policy configuration. The format of the policy file is documented in the Java Web Services Tutorial. conf/certs Truststore and keystore files
This artifact provides a JEE architecture based on Spring Framework and Spring Web Services which serves web services requests on one unique end point. So, no specific URL is needed for every different web service. On the other hand, document-driven design of Web Services avoids WSDL distribution or publication issues in development process. Just only an XSD file describing data contained by the request and the response is required to develop a Web Service and even this XSD file can be ignored on execution if no validation is configured. The artifact covers just only web services layer. Several JEE artifacts, such as a DAO or JPA, can be used to develop business logic relative to operations.
02 06 2008
l 6 l
Below main functionalities are exposed: XSD validation of request and responses XML to Java Bean transformation for the requests and Java Bean to XML transformation for the responses WSS validation for the requests and WSS signature for the responses
4.3
DEPLOYMENT
Eclipse project WSBackend includes a template deployment structure for this architecture as a Web Application packed as a WAR file for Weblogic 10.
02 06 2008
l 7 l
Validation interceptor o Require XSD files describing web services data located in folder WebContent/WEB-INF/schemas o o By default both requests and responses are validated Require a Java class to parse the request which must implement com.wsb.springws.domain.AbstractRequestParserData (by default com.wsb.springws.domain.RequestParserData class is provided)
WSS interceptor Keystore and Trustore locations (by default truststore on /apps/WSB/config/certs/sample-truststore.jks and keystore on /apps/WSB/config/certs/sample-keystore.jks)
02 06 2008
l 8 l
DEVELOPMENT ENVIRONMENT
5.1 SOFTWARE REQUIRED
Not included in this deliverable Development environment: Eclipse IDE for Java EE Developers Eclipse Plugin: Spring IDE Included in this deliverable Eclipse projects: WSBackend, GenXMLBeans and DateFormatterServiceMock
5.2
Projects required: GenXMLBeans and WSBackend. Process overview: Build XSD file Generate JAR library containing XMLBeans classes Develop business logic Java code
2. Eclipse: GenXMLBeans project Copy generated XSD file to schemas folder Execute ANT script build.xml wsb-XMLBeans.jar file containing XMLBeans classes to work with the XSD file is generated on lib folder 3. Eclipse: WSBackend project Copy XSD file to folder WebContent/WEB-INF/schemas Copy XMLBeans JAR library to folder WebContent/WEB-INF/lib Include bean in Services Catalog (WebContent/WEB-INF/spring-ws-services.xml) Develop business logic code in package com.wsb.springws.services by implementing base interface com.wsb.springws.services.IService
5.3
Projects required: DateFormatterServiceMock. Process overview: Copy XMLBeans JAR Library to folder lib Develop JUnit class code by extending base class com.wsb.springws.services.mock.util.AbstractTest Run JUnit tests
02 06 2008
l 9 l
5.4
Projects required: GenXMLBeans and WSBackend. Process overview: Build XSD file Generate JAR library containing XMLBeans classes Develop business logic Java code
1. XML Editor Build XSD file describing web service data including version number in front of namespaces. o For instance, http://beans.springws.eds.com namespace should change for http://v2.beans.springws.eds.com Perform desired modifications on XSD file
2. Eclipse: GenXMLBeans project Copy generated XSD file to schemas folder Execute ANT script build.xml wsb-XMLBeans.jar file containing XMLBeans classes to work with the XSD file is generated on lib folder 3. Eclipse: WSBackend project Copy XSD file to folder WebContent/WEB-INF/schemas Copy XMLBeans JAR library to folder WebContent/WEB-INF/lib Include bean in Services Catalog (WebContent/WEB-INF/spring-ws-services.xml) Develop business logic code in package com.wsb.springws.services.vN by implementing base interface com.wsb.springws.services.IService or extending previous version service
5.5
WSDL CONSTRUCTION
Projects required: WSBackend. Process overview: Modify Spring application context file (spring-ws-servlet.xml) Access WSDL URL
Although this artifact does not require any WSDL file, a service contract is generally expressed as a WSDL file. If WSDL publication is required, following steps must be included in any service construction. On the other hand, if its just only required WSDL distribution, this process belongs exclusively to development phase.
02 06 2008
l 10 l
1. Modify Spring application context file Include this entry on the spring-ws-servlet.xml file
<bean id="DateFormatterService" class="org.springframework.ws.wsdl.wsdl11.DynamicWsdl11Definition"> <property name="builder"> <bean class="org.springframework.ws.wsdl.wsdl11.builder. XsdBasedSoap11Wsdl4jDefinitionBuilder"> <property name="schema" value="/WEB-INF/schemas/dateFormatterService.xsd"/> <property name="portTypeName" value="DateFormatterService"/> <property name="locationUri" value="http://localhost:7001/WSBackend/services"/> </bean> </property> </bean> The bean id determines the URL where the WSDL can be retrieved. In this case, the bean id is DateFormatterService, which means that the WSDL can be retrieved as DateFormatterService.wsdl in the servlet context. Remember to start bean id name with a capital letter in order to not override services names. The schema property is set to the Date Formatter Service schema we located on WEBINF directory of the application. Next, we define the WSDL port type to be DateFormatterService. Finally, we set the location where the service can be reached: http://localhost:7001/WSBackend/services. For development, this will suffice, but obviously we need to change this to production URL when going live. A common way to accomplish this is to use a Spring PropertyPlaceholderConfigurer. 2. Access WSDL URL Publish the application on the application server WSDL file will be accessible at
http://localhost:7001/WSBackend/services/dateFormatterService/DateFormatterService.wsdl
o o
Use web services context path http://localhost:7001/WSBackend/services And complete with bean_id_name/bean_id_name.wsdl
02 06 2008
l 11 l
EXAMPLES
6.1 SOAP MESSAGE PARSER
Typically, once per project, a SOAP Message parser must be implemented in WSBackend project. This class extends from com.wsb.springws.domain.AbstractRequestParserData and it must be assigned to validatingInterceptor on deployment configuration file WebContent/WEB-INF/spring-ws-servlet.xml. All Web Services implemented using this artifact must contain on the request parameters the following information: Message Type. Name of the service to invoke, the name registered in the services catalog Version. Number of version of the service to invoke Secured. If true WSS validation and signature will be performed on web service
In the example, a DTD including an element named requestHeader has been defined. <!ELEMENT ts:dateFormatterServiceRequest (ts:requestHeader)> <!ELEMENT ts:requestHeader (ts:MessageType, ts:Version, ts:Secured?)> <!ELEMENT ts:MessageType EMPTY> <!ELEMENT ts:Version EMPTY> <!ELEMENT ts:Secured (#PCDATA)>
And com.wsb.springws.domain.RequestParserData class has been implemented. public class RequestParserData extends AbstractRequestParserData { // XSD Request private static private static private static private static fields names final String final String final String final String XSD_REQUEST_HEADER_ID = "requestHeader"; XSD_MESSAGE_TYPE_ID = "MessageType"; XSD_VERSION_ID = "Version"; XSD_SECURED_ID = "Secured";
/** * Default constructor. Not secured by default. */ public RequestParserData() { this.setSecured(false); } /** * Get <CODE>messageType</CODE>, <CODE>version</CODE> and * <CODE>secured</CODE> fields from message payload. * * @param domSource * message payload source */ public void init(DOMSource domSource) { // Default behavior this.setSecured(false);
02 06 2008
l 12 l
try { StringWriter strWtr = new StringWriter(); StreamResult strResult = new StreamResult(strWtr); TransformerFactory tfac = TransformerFactory.newInstance(); Transformer trans = tfac.newTransformer(); trans.transform(domSource, strResult); NodeList nodeList = domSource.getNode().getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (XSD_REQUEST_HEADER_ID.equals(node.getLocalName())) { NodeList elements = node.getChildNodes(); for (int j = 0; j < elements.getLength(); j++) { Node element = elements.item(j); String elementName = element.getLocalName(); if (elementName != null) { if (XSD_MESSAGE_TYPE_ID.equals(elementName)) { this.setMessageType(element.getFirstChild() .getNodeValue()); } else if (XSD_VERSION_ID.equals(elementName)) { this.setVersion(element.getFirstChild() .getNodeValue()); } else if (XSD_SECURED_ID.equals(elementName)) { this.setSecured(Boolean.valueOf(element .getFirstChild().getNodeValue())); } } } } } } catch (Exception e) { e.printStackTrace(); } } }
6.2
1. XSD file dateFormatterService.xsd according to requestHeader DTD <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ts="http://beans.springws.eds.com" targetNamespace="http://beans.springws.eds.com" elementFormDefault="qualified" attributeFormDefault="qualified"> <element name="dateFormatterServiceRequest"> <complexType> <sequence> <element name="requestHeader"> <complexType> <sequence> <element name="MessageType" type="string" /> <element name="Version" type="string" /> <element name="Secured" type="boolean" minOccurs="0" /> </sequence> </complexType> </element> <element name="requestBody"> <complexType> <sequence> <element name="datePattern" type="string" />
02 06 2008
l 13 l
</sequence> </complexType> </element> </sequence> </complexType> </element> <element name="dateFormatterServiceResponse"> <complexType> <sequence> <element name="responseHeader"> <complexType> <sequence> <element name="MessageType" type="string" /> <element name="Version" type="string" /> <element name="CodResp" type="string" /> <element name="DescResp" type="string" /> </sequence> </complexType> </element> <element name="responseBody"> <complexType> <sequence> <element name="dateString" type="string" /> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema> 2. JAR Library wsb-XMLBeans.jar generated with GenXMLBeans Eclipse project 3. Steps in WSBackend project Copy dateFormatterService.xsd to folder WebContent/WEB-INF/schemas Copy wsb-XMLBeans.jar to folder WebContent/WEB-INF/lib Include dateFormatterService bean in Services Catalog (WebContent/WEBINF/spring-ws-services.xml) <bean id="dateFormatterService" class="com.wsb.springws.services.DateFormatter" /> Implement business logic Java class com.wsb.springws.services.DateFormatter
4. Date formatter service tests in DateFormatterServiceMock project Copy dateFormatter-XMLBeans.jar to folder WEB-INF/lib Implement test class com.wsb.springws.services.mock.DateFormatterServiceMock Below a sample from test class code
DateFormatterServiceRequestDocument opeRequest; @Before public void setUp() throws Exception { opeRequest = DateFormatterServiceRequestDocument.Factory.newInstance(); DateFormatterServiceRequest dfsReq = opeRequest.addNewDateFormatterServiceRequest(); RequestHeader rh = dfsReq.addNewRequestHeader(); rh.setMessageType("DateFormatterService"); rh.setVersion("1"); RequestBody rb = dfsReq.addNewRequestBody(); rb.setDatePattern("dd"); }
02 06 2008
l 14 l
@Test public void testInvoke() { DateFormatterServiceResponseDocument opeResponse = (DateFormatterServiceResponseDocument)WSClient.invoke(opeRequest); testAssertEquals("001", opeResponse .getDateFormatterServiceResponse() .getResponseHeader() .getCodResp()); }
6.3
In order to use WSS for a web service, no modification must be performed. Just only setting Secure field to true on test class, WSS functionality is achieved. Below a sample code from test class com.wsb.springws.services.mock.DateFormatterServiceMock: DateFormatterServiceRequestDocument opeRequestSecured; @Before public void setUpSecured() throws Exception { opeRequestSecured = DateFormatterServiceRequestDocument.Factory.newInstance(); DateFormatterServiceRequest dfsReq = opeRequestSecured.addNewDateFormatterServiceRequest(); RequestHeader rh = dfsReq.addNewRequestHeader(); rh.setMessageType("DateFormatterService"); rh.setVersion("1"); rh.setSecured(true); RequestBody rb = dfsReq.addNewRequestBody(); rb.setDatePattern("dd"); } @Test public void testInvokeSecured() { DateFormatterServiceResponseDocument opeResponse = (DateFormatterServiceResponseDocument)XWSSClient.invoke(opeRequestSecured); testAssertEquals("001", opeResponse .getDateFormatterServiceResponse() .getResponseHeader() .getCodResp()); }
6.4
1. XSD file dateFormatterServiceV2.xsd according to requestHeader DTD <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ts="http://v2.beans.springws.eds.com" targetNamespace="http://v2.beans.springws.eds.com" elementFormDefault="qualified" attributeFormDefault="qualified"> <element name="dateFormatterServiceRequest"> <complexType> <sequence> <element name="requestHeader"> <complexType> <sequence> <element name="MessageType" type="string" /> <element name="Version" type="string" /> <element name="Secured" type="boolean" minOccurs="0" />
02 06 2008
l 15 l
</sequence> </complexType> </element> <element name="requestBody"> <complexType> <sequence> <element name="datePattern" type="string" /> <element name="locale" type="string" /> </sequence> </complexType> </element> </sequence> </complexType> </element> <element name="dateFormatterServiceResponse"> <complexType> <sequence> <element name="responseHeader"> <complexType> <sequence> <element name="MessageType" type="string" /> <element name="Version" type="string" /> <element name="CodResp" type="string" /> <element name="DescResp" type="string" /> </sequence> </complexType> </element> <element name="responseBody"> <complexType> <sequence> <element name="dateString" type="string" /> <element name="rawDateString" type="string" /> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema> 2. JAR Library wsb-XMLBeans.jar updated with GenXMLBeans Eclipse project 3. Steps in WSBackend project Copy dateFormatterServiceV2.xsd to folder WebContent/WEB-INF/schemas Update wsb-XMLBeans.jar to folder WebContent/WEB-INF/lib Include dateFormatterServiceV2 bean in Services Catalog (WebContent/WEBINF/spring-ws-services.xml) <bean id="dateFormatterServiceV2" class="com.wsb.springws.services.v2.DateFormatter" /> Implement business logic Java class com.wsb.springws.services.v2.DateFormatter
4. Date formatter service tests in DateFormatterServiceMock project Update wsb-XMLBeans.jar to folder WEB-INF/lib Implement test class com.wsb.springws.services.mock.DateFormatterServiceV2Mock Below a sample from test class code (note that version field is set to 2)
DateFormatterServiceRequestDocument opeRequest; @Before public void setUp() throws Exception { opeRequest = DateFormatterServiceRequestDocument.Factory.newInstance();
02 06 2008
l 16 l
DateFormatterServiceRequest dfsReq = opeRequest.addNewDateFormatterServiceRequest(); RequestHeader rh = dfsReq.addNewRequestHeader(); rh.setMessageType("DateFormatterService"); rh.setVersion("2"); RequestBody rb = dfsReq.addNewRequestBody(); rb.setDatePattern("dd"); rb.setLocale(Locale.ENGLISH.toString()); } @Test public void testInvoke() { DateFormatterServiceResponseDocument opeResponse = (DateFormatterServiceResponseDocument)WSClient.invoke(opeRequest); testAssertEquals("001", opeResponse .getDateFormatterServiceResponse() .getResponseHeader() .getCodResp()); }
02 06 2008
l 17 l
REUSABILITY CONSIDERATIONS
Currently, common application servers are supported: Oracle Weblogic 10 o Project: WSBackend without modifications
IBM WebSphere 6.1. Project WSBackend adding following libraries: o Project: WSBackend adding following libraries (located on DeploymentTemplates folder) jaxp-api.jar JSR 206 Java(TM) API for XML Processing 1.4.2
Apache Tomcat 6.0. Project WSBackend adding following libraries: o Project: WSBackend adding following libraries (located on DeploymentTemplates folder) spring-oxm-tiger-1.0.3.jar Spring O/X Mapping - Java 6
Further information for another application server configuration can be found at Spring WS FAQ.
02 06 2008
l 18 l
ARCHITECTURE
Spring Web Services o Developed by the Spring community, Spring Web Services (Spring-WS) focuses on creating document-driven Web services. It aims to facilitate contract-first SOAP service development, allowing for the creation of flexible Web services. Benefits and features include: Developers can distribute an incoming XML request to any object, depending on message payload, SOAP Action header, or an XPath expression. Incoming XML messages can be handled in standard JAXP APIs such as DOM, SAX, and StAX or in JDOM, dom4j, XOM, or even marshalling technologies. o o Very manageable learning curve for developers familiar with Spring. Supports WS-Security. Integrated with Spring Security.
Spring Framework o Spring is a lightweight Java/J2EE application framework based on code published in "Expert One-on-One J2EE Design and Development" by Rod Johnson. It includes powerful JavaBeans-based configuration management applying Inversion-of-Control principles, a generic abstraction layer for transaction management allowing for pluggable transaction managers, a JDBC abstraction layer, integration with Hibernate, JDO, Apache OJB, and iBATIS SQL Maps, AOP functionality, and a flexible MVC Web application framework with multiple view technologies. There is also a .NET port available. o o Licensed under Apache License (v2) Homepage: http://www.springframework.org
XMLBeans o o XMLBeans is a technology for accessing XML by binding it to Java types. XMLBeans provides several ways to get at the XML, including: Through XML schema that has been compiled to generate Java types that represent schema types. In this way, you can access instances of the schema through JavaBeans-style accessors after the fashion of "getFoo" and "setFoo". The XMLBeans API also allows you to reflect into the XML schema itself through an XML Schema Object model. o o A cursor model through which you can traverse the full XML infoset. Support for XML DOM
02 06 2008
l 19 l
XWSS o XML and Web Services Security (XWS-Security), provides a framework within which a JAX-WS or SAAJ application developer can secure applications. XWSS is also available from java.net's XWSS project. XWSS 3.0 has a whole lot of new features including realignment with JAXWS 2.1 architecture which gives an impoved performance. Using the XWS-Security framework, developers of JAXWS can secure their applications by configuring the request and response security policies at the level of service, port, or operation. o XWSS also supports WS-Policy, WS-SecurityPolicy, WS-Trust and WSSecureConversation. Please refer to the WSIT project for additional details. WSIT is also a part of Project Glassfish.Certification Passed o Licensed under Common Development and Distribution License (CDDL) and GNU General Public License (GPL) o Homepage: https://xwss.dev.java.net
Wsdl4J o The Web Services Description Language for Java Toolkit (WSDL4J) allows the creation, representation, and manipulation of WSDL documents. Is the reference implementation for JSR110 'JWSDL' (jcp.org). o o Licensed under Common Public License (CPL) Homepage: http://www.sourceforge.net/projects/wsdl4j
Log4j o log4j is a Java-based logging utility, and is one of many projects from the Apache Software Foundation. It is used primarily as a debugging tool. o o Licensed under Apache License (v2) Homepage: http://logging.apache.org/log4j/
JUnit o JUnit is a Java testing framework. Since testing is not closely integrated with development, it prevents you from measuring the progress of development. You can't tell when something starts working or when something stops working. Using JUnit you can cheaply and incrementally build a test suite that will help you measure your progress, spot unintended side effects, and focus your development efforts. o o Licensed under Common Public License (CPL) Homepage: http://www.junit.org
8.2
02 06 2008
l 20 l
JAXP supports the processing of XML documents using DOM, SAX, and XSLT. The project facilitates the use of XML on the Java platform, and provides a pluggability feature which enables applications to easily switch between different XML processor implementations. Licensed under Common Development and Distribution License (CDDL) Homepage: http://java.sun.com/webservices/jaxp/index.jsp
o o
JSR 173 o o o Sun Java Streaming XML Parser, Sun implementation of Stax (JSR 173) Licensed under Common Development and Distribution License (CDDL) Homepage: https://sjsxp.dev.java.net
SAAJ o The Standard Implementation for SAAJ. The SAAJ specification provides the lower layers of the JAX-RPC specification and the SAAJ project is a companion to the JAX-RPC project. o o Licensed under Common Development and Distribution License (CDDL) Homepage: https://saaj.dev.java.net/
8.3
DEVELOPMENT
Eclipse o The Eclipse platform is a generic foundation for an IDE. That is, the platform is an IDE without any particular programming language in mind. You can create generic projects, edit files in a generic text editor, and share the projects and files with a repository server. o o Licensed under Common Public License (CPL) and Eclipse Public License (EPL) Homepage: http://www.eclipse.org
Spring IDE o o o Spring IDE provides tooling support for the Spring Portfolio. Licensed under Eclipse Public License (EPL) Homepage: http://springide.org
02 06 2008
l 21 l