TIBCO ActiveMatrix® Service Grid Spring Component Development Software Release 3.1.5 March 2012 Important Information SOME TIBCO SOFTWARE EMBEDS OR BUNDLES OTHER TIBCO SOFTWARE. USE OF SUCH EMBEDDED OR BUNDLED TIBCO SOFTWARE IS SOLELY TO ENABLE THE FUNCTIONALITY (OR PROVIDE LIMITED ADD-ON FUNCTIONALITY) OF THE LICENSED TIBCO SOFTWARE. THE EMBEDDED OR BUNDLED SOFTWARE IS NOT LICENSED TO BE USED OR ACCESSED BY ANY OTHER TIBCO SOFTWARE OR FOR ANY OTHER PURPOSE. USE OF TIBCO SOFTWARE AND THIS DOCUMENT IS SUBJECT TO THE TERMS AND CONDITIONS OF A LICENSE AGREEMENT FOUND IN EITHER A SEPARATELY EXECUTED SOFTWARE LICENSE AGREEMENT, OR, IF THERE IS NO SUCH SEPARATE AGREEMENT, THE CLICKWRAP END USER LICENSE AGREEMENT WHICH IS DISPLAYED DURING DOWNLOAD OR INSTALLATION OF THE SOFTWARE (AND WHICH IS DUPLICATED IN THE LICENSE FILE) OR IF THERE IS NO SUCH SOFTWARE LICENSE AGREEMENT OR CLICKWRAP END USER LICENSE AGREEMENT, THE LICENSE(S) LOCATED IN THE “LICENSE” FILE(S) OF THE SOFTWARE. USE OF THIS DOCUMENT IS SUBJECT TO THOSE TERMS AND CONDITIONS, AND YOUR USE HEREOF SHALL CONSTITUTE ACCEPTANCE OF AND AN AGREEMENT TO BE BOUND BY THE SAME. This document contains confidential information that is subject to U.S. and international copyright laws and treaties. No part of this document may be reproduced in any form without the written authorization of TIBCO Software Inc. TIB, TIBCO, TIBCO ActiveMatrix, TIBCO Adapter, TIBCO Administrator, TIBCO AutoMeditate, TIBCO Enterprise Message Service, ActiveMatrix, AutoMediate, Predictive Business, Information Bus, The Power of Now, and TIBCO Rendezvous are either registered trademarks or trademarks of TIBCO Software Inc. in the United States and/or other countries. EJB, Java EE, J2EE, and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All other product and company names and marks mentioned in this document are the property of their respective owners and are mentioned for identification purposes only. THIS SOFTWARE MAY BE AVAILABLE ON MULTIPLE OPERATING SYSTEMS. HOWEVER, NOT ALL OPERATING SYSTEM PLATFORMS FOR A SPECIFIC SOFTWARE VERSION ARE RELEASED AT THE SAME TIME. SEE THE README FILE FOR THE AVAILABILITY OF THIS SOFTWARE VERSION ON A SPECIFIC OPERATING SYSTEM PLATFORM. THIS DOCUMENT IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THIS DOCUMENT COULD INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS. CHANGES ARE PERIODICALLY ADDED TO THE INFORMATION HEREIN; THESE CHANGES WILL BE INCORPORATED IN NEW EDITIONS OF THIS DOCUMENT. TIBCO SOFTWARE INC. MAY MAKE IMPROVEMENTS AND/OR CHANGES IN THE PRODUCT(S) AND/OR THE PROGRAM(S) DESCRIBED IN THIS DOCUMENT AT ANY TIME. THE CONTENTS OF THIS DOCUMENT MAY BE MODIFIED AND/OR QUALIFIED, DIRECTLY OR INDIRECTLY, BY OTHER DOCUMENTATION WHICH ACCOMPANIES THIS SOFTWARE, INCLUDING BUT NOT LIMITED TO ANY RELEASE NOTES AND "READ ME" FILES. Copyright © 1999-2012 TIBCO Software Inc. ALL RIGHTS RESERVED. TIBCO Software Inc. Confidential Information | iii Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .v Changes from the Previous Release of this Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vi Related Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii TIBCO ActiveMatrix Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Other TIBCO Product Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii Third Party Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii Typographical Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x Connecting with TIBCO Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii How to Join TIBCOmmunity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii How to Access All TIBCO Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii How to Contact TIBCO Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Chapter 1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Chapter 2 Spring Components . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Creating a Spring Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Configuring a Spring Component’s Custom Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Configuring a Spring Component’s External Custom Feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Updating a Spring Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Updating the Spring Component from Existing Implementation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Updating the Spring Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Spring Component Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Chapter 3 Spring Component Implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10 Opening a Spring Component Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Generating a Spring Component Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Spring Bean Configuration XML File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Generate Spring Implementation Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Regenerating a Spring Component Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Handling Life Cycle Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Accessing a Property. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Invoking a Reference Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 TIBCO ActiveMatrix Spring Component Development iv | Contents Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Handling Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Referencing a Java Class in an External Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Referencing External Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Referencing an External Spring Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 TIBCO ActiveMatrix Spring Component Development |v Preface TIBCO ActiveMatrix® is a scalable and extensible platform for developing, deploying, and managing applications that conform to a service-oriented architecture. TIBCO ActiveMatrix® Implementation Type for Spring is a gateway for Spring Developers to the Service Oriented Architecture (SOA) world. The product provides an ActiveMatrix container to deploy services developed in Spring using TIBCO ActiveMatrix Administrator. Topics • Related Documentation, page vii • Typographical Conventions, page x • Connecting with TIBCO Resources, page xiii TIBCO ActiveMatrix Spring Component Development vi | Changes from the Previous Release of this Guide Changes from the Previous Release of this Guide This section itemizes the major changes from the previous release of this guide. JAXB-based Code Generation Spring component supports JAXB based code generation. See Generate Spring Implementation Reference, page 15 and TIBCO ActiveMatrix Java Component Development guide for details. TIBCO ActiveMatrix Spring Component Development Preface vii | Related Documentation This section lists documentation resources you may find useful. TIBCO ActiveMatrix Documentation The following documents form the TIBCO ActiveMatrix documentation set: • Concepts: Read this manual before reading any other manual in the documentation set. This manual describes terminology and concepts of the TIBCO ActiveMatrix platform. The other manuals in the documentation set assume you are familiar with the information in this manual. • Development Tutorials: Read this manual for a step-by-step introduction to the process of creating, packaging, and running composites in TIBCO Business Studio. • Composite Development: Read this manual to learn how to develop and package composites. • Java Component Development: Read this manual to learn how to configure and implement Java components. • Mediation Component Development: Read this manual to learn how to configure and implement Mediation components. • Mediation API Reference: Read this manual to learn how to configure and implement Mediation components. • Spring Component Development: Read this manual to learn how to configure and implement Spring components. • Web Application Component Development: Read this manual to learn how to configure and implement Web Application components. • Administration: Read this manual to learn how to manage the runtime and deploy and manage applications. • Release Notes: Read this manual for a list of new and changed features, steps for migrating from a previous release, and lists of known issues and closed issues for the release. Other TIBCO Product Documentation You may find it useful to read the documentation for the following TIBCO products: • TIBCO ActiveMatrix® Service Bus TIBCO ActiveMatrix Spring Component Development viii | Related Documentation • TIBCO ActiveMatrix® Service Grid • TIBCO ActiveMatrix® Registry • TIBCO ActiveMatrix® Policy Manager • TIBCO Enterprise Message Service™ • TIBCO Adapter™ • TIBCO Administrator™ • TIBCO Hawk® • TIBCO Rendezvous® Third Party Documentation • SCA 1.0 final draft spec for Spring Component http://www.osoa.org/download/attachments/35/SCA_SpringComponentI mplementationSpecification-V100.pdf?version=1 • Spring Framework Reference http://static.springsource.org/spring/docs/2.5.x/reference/index.html • White paper on Power Combination of SCA, Spring, and OSGi http://www.osoa.org/download/attachments/250/Power_Combination_S CA_Spring_OSGi.pdf?version=3 TIBCO ActiveMatrix® software supports the following standards: • Service Component Architecture http://www.osoa.org/display/Main/Service+Component+Architecture+Sp ecifications • World Wide Web Consortium web services activity http://www.w3.org/2002/ws/ — Simple Object Access Protocol (SOAP) 1.1 W3C Note http://www.w3.org/TR/2000/NOTE-SOAP-20000508/ — WSDL 1.1 W3C Note http://www.w3.org/TR/wsdl • OASIS TIBCO ActiveMatrix Spring Component Development Preface ix | http://www.oasis-open.org/committees/tc_cat.php?cat=ws — UDDI Version 3 OASIS Standard http://www.oasis-open.org/specs/index.php#uddiv2 TIBCO ActiveMatrix Spring Component Development x | Typographical Conventions Typographical Conventions The following typographical conventions are used in this manual. Table 1 General Typographical Conventions Convention Use TIBCO_HOME Many TIBCO products must be installed within the same home directory. This directory is referenced in documentation as TIBCO_HOME. The default value of TIBCO_HOME depends on the operating system. For example, on Windows systems, the default value is C:\tibco. ENV_NAME Other TIBCO products are installed into an installation environment. Incompatible products and multiple instances of the same product are installed into different installation environments. An environment home directory is referenced in documentation as ENV_HOME. The default value of ENV_HOME depends on the operating system. For example, on Windows systems the default value is C:\tibco. code font Code font identifies commands, code examples, filenames, pathnames, and output displayed in a command window. For example: Use MyCommand to start the foo process. bold code font Bold code font is used in the following ways: • In procedures, to indicate what a user types. For example: Type admin. • In large code samples, to indicate the parts of the sample that are of particular interest. • In command syntax, to indicate the default parameter for a command. For example, if no parameter is specified, MyCommand is enabled: MyCommand [enable | disable] italic font Italic font is used in the following ways: • To indicate a document title. For example: See TIBCO BusinessWorks Concepts. • To introduce new terms For example: A portal page may contain several portlets. Portlets are mini-applications that run in a portal. • To indicate a variable in a command or code syntax that you must replace. For example: MyCommand pathname TIBCO ActiveMatrix Spring Component Development Preface xi | Table 1 General Typographical Conventions (Cont’d) Convention Use Key combinations Key name separated by a plus sign indicate keys pressed simultaneously. For example: Ctrl+C. Key names separated by a comma and space indicate keys pressed one after the other. For example: Esc, Ctrl+Q. The note icon indicates information that is of special interest or importance, for example, an additional action required only in certain circumstances. The tip icon indicates an idea that could be useful, for example, a way to apply the information provided in the current section to achieve a specific result. The warning icon indicates the potential for a damaging situation, for example, data loss or corruption if certain steps are taken or not taken. Table 2 Syntax Typographical Conventions Convention Use [ ] An optional item in a command or code syntax. For example: MyCommand [optional_parameter] required_parameter | A logical ’OR’ that separates multiple items of which only one may be chosen. For example, you can select only one of the following parameters: MyCommand para1 | param2 | param3 TIBCO ActiveMatrix Spring Component Development xii | Typographical Conventions Table 2 Syntax Typographical Conventions Convention Use { } A logical group of items in a command. Other syntax notations may appear within each logical group. For example, the following command requires two parameters, which can be either the pair param1 and param2, or the pair param3 and param4. MyCommand {param1 param2} | {param3 param4} In the next example, the command requires two parameters. The first parameter can be either param1 or param2 and the second can be either param3 or param4: MyCommand {param1 | param2} {param3 | param4} In the next example, the command can accept either two or three parameters. The first parameter must be param1. You can optionally include param2 as the second parameter. And the last parameter is either param3 or param4. MyCommand param1 [param2] {param3 | param4} TIBCO ActiveMatrix Spring Component Development Preface xiii | Connecting with TIBCO Resources How to Join TIBCOmmunity TIBCOmmunity is an online destination for TIBCO customers, partners, and resident experts, a place to share and access the collective experience of the TIBCO community. TIBCOmmunity offers forums, blogs, and access to a variety of resources. To register, go to http://www.tibcommunity.com. How to Access All TIBCO Documentation After you join TIBCOmmunity, you can access the documentation for all supported product versions here: http://docs.tibco.com/TibcoDoc How to Contact TIBCO Support For comments or problems with this manual or the software it addresses, please contact TIBCO Support as follows. • For an overview of TIBCO Support, and information about getting started with TIBCO Support, visit this site: http://www.tibco.com/services/support • If you already have a valid maintenance or support contract, visit this site: https://support.tibco.com Entry to this site requires a user name and password. If you do not have a user name, you can request one. TIBCO ActiveMatrix Spring Component Development xiv | Connecting with TIBCO Resources TIBCO ActiveMatrix Spring Component Development |1 Chapter 1 Overview This chapter provides an overview of the Spring component and approaches to the component development process. Topics • Overview, page 2 TIBCO ActiveMatrix Spring Component Development 2 | Chapter 1 Overview Overview Spring is a Java framework that allows applications to be built as a collection of simple Java beans. Service Component Architecture (SCA) is a set of specifications which describe a model for building applications and systems using a Service Oriented Architecture. SCA models solutions as sets of service components offering services and making references to services supplied by others which are combined together by composites. The composites wire references to services, declaratively apply bindings for communication methods, and also apply policies for aspects such as security and transactions. SCA is used to extend the capabilities of Spring components by publishing Spring beans as services accessed by other remote components as well as by providing Spring beans with service references wired to services of other components. TIBCO Business Studio facilitates Spring component implementation by providing a rich set of automatic code generation and synchronization features. TIBCO Business Studio supports WSDL-first development for Spring components. You can develop Spring components starting from WSDL files and generate classes that conform to the WSDL specification. When you add a service, reference, or property to a Spring component, TIBCO Business Studio adds fields and methods that represent the service, reference, or property to the component's implementation classes and corresponding Spring bean configuration XML file. You can also update the Spring component with additional services, references, or properties and regenerate the component implementation. TIBCO ActiveMatrix Spring Component Development Spring Components 3 | Chapter 2 Spring Components This chapter describes how to create and configure a Spring component. Topics • Creating a Spring Component, page 4 • Configuring a Spring Component’s Custom Feature, page 5 • Configuring a Spring Component’s External Custom Feature, page 6 • Updating a Spring Component, page 7 • Spring Component Reference, page 9 TIBCO ActiveMatrix Spring Component Development 4 | Chapter 2 Spring Components Creating a Spring Component Choose an option and follow the relevant procedure. Option Description Wizard 1. Create an SOA project selecting the SOA Project from WSDL project type. 2. In the Component Details page of the wizard, specify Spring for the component implementation type. 3. Specify code generation details as described in Generate Spring Implementation Reference on page 15. Manual 1. Create an SOA project. 2. Open the composite created in the project. 3. Do one of the following: — Click the Spring icon canvas. in the Palette and click the — Click the canvas and click the Spring icon pop-up toolbar. — Right-click the canvas and select in the Add > Spring. 4. Configure the Spring Component and add services, references, and properties to the component as required. 5. Generate the Spring implementation as described in Generating a Spring Component Implementation on page 12. A Spring component is added to the canvas and its implementation is configured. TIBCO ActiveMatrix Spring Component Development Configuring a Spring Component’s Custom Feature 5 | Configuring a Spring Component’s Custom Feature When you generate a Spring component implementation, the component’s custom feature field is automatically created and configured. TIBCO ActiveMatrix Spring Component Development 6 | Chapter 2 Spring Components Configuring a Spring Component’s External Custom Feature If the Spring component implementation references a plug-in containing a shared library, you must add the custom feature that contains the plug-in to the Spring component’s configuration. 1. Click the component. 2. In the Properties view, click the Implementation tab. 3. Click the button to the right of the Features table. The Select a Feature dialog displays. 4. Click the feature containing the shared library plug-in. 5. Click OK. The feature is added to the component’s features list. TIBCO ActiveMatrix Spring Component Development Updating a Spring Component 7 | Updating a Spring Component You can typically update a component after you have configured its implementation. If you modify or update the Spring component or its implementation after the implementation has been generated, an error marker with the following message displays: "The component componentName is out of sync with its implementation". In such a case, you can choose to either: — Update the component from existing implementation — Update the Spring implementation Updating the Spring Component from Existing Implementation Choose an option and follow the relevant procedure: Control Procedure Canvas Right-click the component and select Refresh from Implementation. Canvas Right-click the component and select Quick Fixes > Update Component from Implementation. Properties View 1. In the Validation Report area on the General tab of the component’s Property View click the fix... link. 2. Select Update Component from Implementation. Problems View 1. In the Problems view, right-click an error of the form The component "componentName" is out of sync with its implementation and select Quick Fix. 2. In the Quick Fix dialog, select Update Component from Implementation. 3. Click Finish. All the changes made to the component after the last implementation generation (regeneration or updation) are discarded and the component is refreshed using the implementation. TIBCO ActiveMatrix Spring Component Development 8 | Chapter 2 Spring Components Updating the Spring Implementation Choose an option and follow the relevant procedure. Control Procedure Canvas Right-click the component and select Regenerate Spring Implementation. Canvas Right-click a component and select Quick Fixes > Update Spring Configuration. Properties View 1. In the Validation Report area on the General tab of the component’s Properties view click the fix... link. 2. Select Update Spring Configuration. Problems View 1. In the Problems view, right-click an error of the form The component "componentName" is out of sync with its implementation and select Quick Fix. 2. In the Quick Fix dialog, select Update Spring Configuration. 3. Click Finish. The Spring implementation and bean configuration XML file are updated. TIBCO ActiveMatrix Spring Component Development Spring Component Reference 9 | Spring Component Reference Select the Spring Component on the canvas and in the Properties view, click the Implementation tab. Field Description Plug-in Project Name The plug-in project name that contains the Spring bean configuration file. Spring Bean File Location The location of the Spring bean configuration file in the workspace, relative to the plug-in project. Thread Context Class Loader Type Configures the Thread context class loader when the Spring ApplicationContext is initialized. Setting the following value controls the value of the call: Thread.currentThread().getContextClassLoader(); when the user code (or any thirdparty code that the user code may use) is executing. • component - the Thread context class loader will be the class loader of the component configured on the Composite. • bundle - the Thread context class loader will be the class loader of the bundle (that is, plugin) that contains the application context/Spring beans XML file • none - the Thread context class loader will be null Features The custom features on which the implementation depends. Field Description Feature ID The ID of the feature. Version Range The range of feature versions that the component requires. TIBCO ActiveMatrix Spring Component Development 10 | Chapter 3 Spring Component Implementations Chapter 3 Spring Component Implementations This chapter describes how to generate and work with a Spring component implementation. Topics • Opening a Spring Component Implementation, page 11 • Generating a Spring Component Implementation, page 12 • Generate Spring Implementation Reference, page 15 • Regenerating a Spring Component Implementation, page 17 • Handling Life Cycle Events, page 19 • Accessing a Property, page 20 • Invoking a Reference Operation, page 21 • Logging, page 22 • Handling Errors, page 23 • Referencing a Java Class in an External Project, page 24 • Referencing External Libraries, page 25 • Referencing an External Spring Application, page 26 TIBCO ActiveMatrix Spring Component Development Opening a Spring Component Implementation 11 | Opening a Spring Component Implementation Choose an initial control and follow the relevant procedure. Control Procedure Canvas Double-click the component. Canvas Right-click the component and select Open Implementation. Project Explorer Right-click the implementation file and select Open With > XML Editor. The implementation file opens in the XML editor. TIBCO ActiveMatrix Spring Component Development 12 | Chapter 3 Spring Component Implementations Generating a Spring Component Implementation 1. Choose an initial control and follow the relevant procedure. Control Properties View Procedure 1. In the Validation Report area on the General tab of the component’s Properties view, click the fix... link. 2. Select Generate Spring Implementation. Canvas Right-click the component and select Quick Fixes > Generate Spring Implementation. Canvas Right-click the component and select Generate Spring Implementation. Problems View 1. In the Problems view, right-click an error of the form Component "componentName" is not configured. and select Quick Fix. 2. In the Quick Fix dialog, select Generate Spring Implementation. 3. Click Finish. The Create Spring Bean dialog displays. 2. Complete the Generate Spring Implementation Reference on page 15 dialog. If the component has multiple services, and at least one property or reference is specified, the reference and/or property association dialog appears. A Component Properties dialog for every property and a Component References dialog for every reference is displayed. Choose a bean to associate the reference or property with the available service beans. If there is only one service defined for the component, all the references and properties are automatically mapped to the single service. 3. Click Finish. TIBCO ActiveMatrix Spring Component Development Generating a Spring Component Implementation 13 | The Spring bean configuration XML file is generated. If the composite name is compositeName and component name is componentName, the bean configuration XML file is named compositeName_componentName_beans.xml and is located in the implementation project under the folder config-CompositeName-componentName. See Spring Bean Configuration XML File on page 13 for details about the contents of the XML file. Abstract and concrete implementation classes are also generated. If the implementation class is named ImplClass, the abstract implementation class is named AbstractImplClass. Additional code is generated based on the component elements as follows: • Service - An interface is generated. If the port type is named PortType, the interface is named PortType. The clause implements PortType is added to the abstract class. • Reference - Field and accessor methods are added to the abstract class. • Property - Field and accessor methods are added to the abstract class. Spring Bean Configuration XML File When you generate the implementation for a Spring component, the Spring bean configuration XML file containing information to access the services, references, and properties of the component is generated. Do not edit the generated Spring bean configuration XML file except when you need to import an existing Spring bean. The following XML snippets illustrate the contents of a bean configuration XML file for a Spring component with a HelloWorld service and a SpringGreeting property. Define Namespace Define the namespace in the bean configuration XML file to make Spring aware of the related beans. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:sca="http://www.springframework.org/schema/sca" xmlns:tibco="http://xsd.tns.tibco.com/2008/amf/extension/spring" xsi:schemaLocation="http://xsd.tns.tibco.com/2008/amf/extension/sp ring http://xsd.tns.tibco.com/schema/sca/tibco-ext-spring-sca.xsd http://www.springframework.org/schema/sca http://www.osoa.org/xmlns/sca/1.0/spring-sca.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd TIBCO ActiveMatrix Spring Component Development 14 | Chapter 3 Spring Component Implementations http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> Bean Definition <bean id="HelloWorldPTBean" class="com.example.www.SOAPJava._gen.HelloWorldPTImpl" destroy-method="destroy" init-method="init"> <property name="springGreeting" ref="SpringGreeting" /> </bean> Component Services Component services are declared in the configuration file as an SCA service tag which captures the service details: <sca:service name="HelloWorldPT" target="HelloWorldPTBean" type="com.example.www.SOAPJava._gen.HelloWorldPT" /> <tibco:service-metadata name="HelloWorldPT" wsdl-location="/spring.wrapper.soa/Service Descriptors/HelloWorld_gen.wsdl" wsdl-interface="http://www.example.com/SOAPJava/_gen#HelloWorldP T" /> Component Properties Component properties are declared in the configuration file as an SCA property tag which captures the property details: <sca:property id="SpringGreeting" name="SpringGreeting" type="java.lang.String" /> </beans> Component References The component references (if any) are declared in the bean configuration file as an SCA reference tag which captures the reference details: <sca:reference name="" target="" type="" /> TIBCO ActiveMatrix Spring Component Development Generate Spring Implementation Reference 15 | Generate Spring Implementation Reference Spring component supports JAXB based code generation. For details, refer TIBCO ActiveMatrix Java Component Development guide. Field Description Code Generation Details Project The name of the Spring plug-in project to contain the implementation. Default: com.sample.spring Source Folder The name of the source folder in the plug-in project. Default: src. Beans Definition File The name of the Spring bean configuration XML file. Default: config-compositeName-componentName/compositeName_componentName_bea ns.xml. Data binding type The type of the data binding classes: XMLBeans or JAXB. Default: XMLBeans. Note: Generating implementations for two or more components in the same Java plug-in project using different binding methods is not supported. New Bean Definition Bean Id The name of the generated bean. Default: serviceNameBean If no service is defined on the component, the default bean id is componentNameBean. Java Package The name of the package of the implementation. Java Class The name of the class of the implementation. Default: serviceNameImpl If no service is defined on the component, the default class name is componentName TIBCO ActiveMatrix Spring Component Development 16 | Chapter 3 Spring Component Implementations Field Description Use default location for the generated superclass Default: Checked Superclass package The name of the package of the abstract superclass of the implementation class. Superclass class The name of the abstract superclass of the implementation class. Default: AbstractJavaClassName Component Properties This dialog displays only when more than one service is defined on the component. PropertyName Choose the bean to associate the named property. TIBCO ActiveMatrix Spring Component Development Regenerating a Spring Component Implementation 17 | Regenerating a Spring Component Implementation The implementation must have been originally generated before you can regenerate. You should regenerate the component implementation after you add (or delete) a service, reference, or property to the component. Choose an initial control and follow the relevant procedure. Control Procedure Canvas Right-click the component and select Regenerate Spring Implementation. Problems View 1. In the Problems view, right-click an error of the form The component "componentName" is out of sync with its implementation and select Quick Fix. 2. In the Quick Fix dialog, select Update Spring Configuration. 3. Click Finish. The Code Generation Details dialog displays the information of the implementation in read-only mode. 4. Click Next. If a new service has been added, the New Bean Definition dialog displays. If there are more than one service or reference, click Next. Else, go to step 6 5. The Component Properties dialog displays. Choose a bean to associate the named property. 6. Click Finish. The Spring configuration file is updated, or a new implementation and a configuration file are created if you entered new bean definition details in step 4. TIBCO ActiveMatrix Spring Component Development 18 | Chapter 3 Spring Component Implementations Control Problems View Procedure 1. In the Problems view, right-click an error of the form The component "componentName" is out of sync with its implementation and select Quick Fix. 2. In the Quick Fix dialog, select Update Component from Implementation. 3. Click Finish. The Spring component is updated. All changes made to the component after the last implementation generation (or regeneration or updation) are discarded. The implementation is updated to match the component. TIBCO ActiveMatrix Spring Component Development Handling Life Cycle Events 19 | Handling Life Cycle Events The runtime exposes component life cycle events — Init, Start, Stop, and Destroy — to component implementations. When TIBCO Business Studio generates a Spring component implementation, it automatically adds the init and destroy method attributes on the generated bean in the generated Spring bean configuration XML file. <bean id="HelloWorldPTBean" class="com.example.www.SOAPJava._gen.HelloWorldPTImpl" destroy-method="destroy" init-method="init"> <property name="springGreeting" ref="SpringGreeting" /> </bean> The following initialization and destroy methods are automatically added: public void init() { // Component initialization code. // All properties are initialized and references are injected. } public void destroy() { // Component disposal code. // All properties are disposed. } Additionally, you can manually add the start and stop annotations to the custom code. TIBCO ActiveMatrix Spring Component Development 20 | Chapter 3 Spring Component Implementations Accessing a Property When you generate a Spring component implementation for a component with a property, the details of the property are captured in the <sca:property> tag which is added to the bean configuration XML file. <sca:property id="SpringGreeting" name="SpringGreeting" type="java.lang.String" /> A field that represents the property and accessor methods to the Spring component’s abstract implementation class is added. For example, if you add a property named SpringGreeting of type String to the Spring component, the following field and methods are added: private java.lang.String SpringGreeting; public void setSpringGreeting(java.lang.String SpringGreeting) { this.SpringGreeting = SpringGreeting; } public java.lang.String getSpringGreeting() { return SpringGreeting; } The runtime initializes the property with an object of the type of the resource. To reference the property, invoke the accessor methods. For example: resp.setHelloResponse(getSpringGreeting() + " " + name + "! " + "This is the Spring component.\n"); To use resource template in your component implementations, create a property of the resource type in the component. <sca:property name="database" type="javax.sql.DataSource" /> The required imports, fields, and methods to use the resource are added. import javax.sql.DataSource; private DataSource database; public void setDatabase(DataSource database) { this.database = database; } public DataSource getDatabase() { return database; } To reference the resource, invoke the accessor methods: DataSource ds = getDatabase(); try { Connection connection = ds.getConnection(); ... } catch (SQLException e) { ... } TIBCO ActiveMatrix Spring Component Development Invoking a Reference Operation 21 | Invoking a Reference Operation When you add a reference to a Spring component and generate the Spring implementation, the details are captured in the <sca:reference> tag added to the generated bean configuration XML file. <sca:reference name="" target="" type="" /> Also, the field and accessor methods are added to the component. public void setDateManagerPT(DateManagerPT DateManagerPT) { this.DateManagerPT = DateManagerPT; } public DateManagerPT getDateManagerPT() { return this.DateManagerPT; } To invoke the reference operation from a Java method, add the statement getReference().operation, where Reference is the name of the reference and operation is the name of the operation. For example, the following statement invokes a getCurrentTime operation on a reference named DateManagerPT: TimeResponseDocument currentTime = getDateManagerPT().getCurrentTime(req) TIBCO ActiveMatrix Spring Component Development 22 | Chapter 3 Spring Component Implementations Logging TIBCO ActiveMatrix Service Grid supports logging to standard out and using a logging API. For simple demonstration applications, you can log to standard out. However, for product applications you should use the logging API. See TIBCO ActiveMatrix Java Component Development for details. TIBCO ActiveMatrix Spring Component Development Handling Errors 23 | Handling Errors The Web Application component handles errors in the same way as the Java component. See TIBCO ActiveMatrix Java Component Development for details on handling declared and undeclared faults. TIBCO ActiveMatrix Spring Component Development 24 | Chapter 3 Spring Component Implementations Referencing a Java Class in an External Project If a Spring component implementation references a Java class in another project in the same workspace as the component implementation, the referenced class must be contained in a Java plug-in project. See TIBCO ActiveMatrix Java Component Development for details. TIBCO ActiveMatrix Spring Component Development Referencing External Libraries 25 | Referencing External Libraries If the Spring component implementation references a library in the runtime or a library that you have added to your project, you must import the referenced library’s packages in the plug-in project manifest. See TIBCO ActiveMatrix Java Component Development for details. TIBCO ActiveMatrix Spring Component Development 26 | Chapter 3 Spring Component Implementations Referencing an External Spring Application To reference external Spring applications from your Spring component implementation, do the following: 1. Import the external Spring application into the workspace as a plug-in project. a. Create a new plug-in project using the Plug-in Development > Plug-in from existing JAR archives wizard. b. In the JAR selection screen, click Add External... and select the external Spring application JAR file. c. Enter the plug-in properties and uncheck the Unzip the JAR archives into the project checkbox. 2. Export all the packages that need to be exposed. a. Expand the META-INF directory of the plug-in project. b. Double-click MANIFEST.MF. c. In the Manifest editor, click the Runtime tab. d. In the Exported Packages area, click the Add... button and check the Show non Java Packages checkbox. e. Select the library JAR file and click OK to add it. f. Repeat step d and step e to add multiple JAR files. 3. Create the TIBCO SOA Project and the Spring component. Add the services, references, and properties to the component and generate the component implementation. 4. Add import entries in the generated Spring project. a. Edit the bean configuration XML file and add the import statement to the bean definition: <import resource="classpath:/location_of_external_springbean.xml"> 5. Specify the plug-in project of the referenced class in the dependencies of the component implementation. a. Expand the META_INF directory of the plug-in project. b. Double-click MANIFEST.MF. c. In the Manifest editor, click the Dependencies tab. d. Click Add... in the Imported Packages area. e. Select the referenced package and click OK. TIBCO ActiveMatrix Spring Component Development Referencing an External Spring Application 27 | 6. Edit the Spring bean configuration XML file and add the property tags from the external Spring application to the bean definition. For example: <property name="propertyName" ref="BeanId_External"> 7. Edit the generated Java implementation class to delegate calls to the external Spring classes. The following example illustrates how to delegate calls from class HelloWorldPTImpl to the external Spring class MyLegacyJavaClass: public class HelloWorldPTImpl extends AbstractHelloWorldPTImpl { /** * Initialization of ReuseLegacySpringComponent component. */ private MyLegacyJavaClass legacyBean; public void init() { // Component initialization code. // All properties are initialized and references are injected. if(this.legacyBean !=null){ System.out.println( "Legacy Bean Initilized..."); System.out.println( this.legacyBean.sayHello("World")); } else { throw new IllegalStateException("Injected bean is null"); } } /** * Disposal of ReuseLegacySpringComponent component. */ @Destroy public void destroy() { // Component disposal code. // All properties are disposed. } /** * Implementation of the WSDL operation: sayHello */ public HelloResponseDocument sayHello(HelloRequestDocument firstName) { HelloResponseDocument hrd=HelloResponseDocument.Factory.newInstance(); hrd.setHelloResponse(getLegacyBean().sayHello(firstName.getHel loRequest()).toString()); return hrd; } public MyLegacyJavaClass getLegacyBean() { return legacyBean; } public void setLegacyBean(MyLegacyJavaClass legacyBean) { this.legacyBean = legacyBean; } } 8. Edit the custom feature for the Spring component to include the plug-in generated from the external Spring application. TIBCO ActiveMatrix Spring Component Development 28 | Chapter 3 Spring Component Implementations TIBCO ActiveMatrix Spring Component Development | 29 Index A R accessing properties 20 referencing external libraries 25 external Spring application 26 Java class 24 related documentation vii, vii C changes from the previous release vi component configure custom feature 5 configure external custom feature 6 create 4 update 7 from implementation 7 implementation 8 component implementation generate 12 generate implementation reference 15 open 11 regenerate 17 customer support xiii, xiii S support, contacting xiii, xiii T technical support xiii, xiii TIBCO_HOME x H handling errors 23 handling life cycle events 19 I invoking reference operation 21 TIBCO ActiveMatrix Spring Component Development