IBM RTCz Integration Specification RDz Integrated Development Environment (zIDE) Version <0.9> Author: <Alex Akilov> Owner: <Alex Akilov> Status: <Draft > RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> Revision History Date Version Description Author 04/14/2009 0.7 07/27/2009 0.8 08/28/2009 0.9 Initial version (based on RTCz twiki version Alex Akilov 0.6) Updated version based on actual Alex Akilov implementation at the end of Sprint 7 Incorporated comments from Rosalind Alex Akilov Radcliffe Table of Contents 1. 2. 3. 4. Introduction 4 1.1 1.2 1.3 1.4 1.5 4 4 4 4 4 Purpose Scope Definitions, Acronyms, and Abbreviations References Overview Requirements 4 2.1 2.2 2.3 2.4 4 4 4 4 Enable source control capabilities for artifacts that RDz tooling works with Preserve the z/OS developer’s conceptual model that the RDz product promotes RTCz should be able to work standalone Build and environment settings should be shared between RTCz and RDz Architectural Decisions 5 3.1 3.2 Overview Technical issues/challenges 3.2.1 Eclipse project model vs. RDz project model 3.2.2 More on the RDz user’s conceptual model 3.2.3 Maintaining source control metadata in local vs. z/OS sandboxes 3.2.4 Use of EFS (Eclipse File System) and linked resources 3.2.5 Containment vs. Reference and the clone problem 3.3 Design decisions 3.3.1 Rejected approaches/proposals 3.3.2 Accepted approaches/decisions 5 5 5 5 6 6 6 6 7 7 Detailed Design and Implementation 9 4.1 4.2 4.3 4.4 4.5 4.6 4.7 Integrated Development setup 4.1.1 Implementation and installation notes RTC source control component implementation RTCz source control extensions RTCz File Agent Load zFiles to z/OS operation 4.5.1 Load zFiles to z/OS – Implementation notes Share members as z/Files operation 4.6.1 Share members as zFiles – Implementation notes RDz content synchronization after share or load IBM Confidential IBM, 2016 9 10 10 11 12 12 13 18 18 22 Page 2 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 4.8 Performing various maintenance operations after share or load 24 4.8.1 Create a new artifact in RDz project 24 4.8.2 Remove from subproject on a managed member 24 4.8.3 Delete managed member or data set containing managed members from RDz project 24 4.8.4 Rename managed member from RDz project 24 4.8.5 Rename data set containing managed members (in MVS subproject or Remote System Explorer)24 4.8.6 Rename zFolder in zComponent project (or move linked zFiles to a different zFolder) 24 4.8.7 Rename Data set definition which zFolders in zComponent projects are pointing to 24 4.8.8 Modify data set name in data set definition which zFolders are pointing to 24 4.8.9 Create a new zFile in zComponent project 24 4.8.10 Disconnect a zComponent project from the SCM 24 4.8.11 Delete linked zFile in zComponent project 24 4.8.12 Rename linked zFile in zComponent project 24 4.9 Build Integration 24 5. 6. Implementation Details 25 5.1 5.2 25 26 26 28 30 Known Limitations Interfaces 5.2.1 Proxy interfaces 5.2.2 ResourceInfo interfaces 5.2.3 Build Property interfaces Appendix A – Glossary of terms 31 6.1 31 31 31 31 31 32 32 32 6.2 6.3 6.4 6.5 Core Jazz/RTC terminology by Jazz/RTC component 6.1.1 Source Control 6.1.2 Team Build 6.1.3 Process Component Eclipse Terminology z/OS Terminology RDz Terminology RTCz Terminology IBM Confidential IBM, 2016 Page 3 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> Software Design Specification 1. Introduction This document details the design of the initial integration between the RTCz and RDz products. 1.1 Purpose The purpose of this document is to describe the architecture, usage scenarios, APIs and current limitations for the integration of the RDz and RTCz products. 1.2 Scope The design described in this document covers the RDz v7.6 and RTCz v2.0 products. 1.3 Definitions, Acronyms, and Abbreviations RDz Rational Developer for System z RTCz Rational Team Concert for System z See Appendix A for a more complete glossary of terms. 1.4 References zComponent project structure RTCz Mass Import tool 1.5 Overview The remainder of this document is intended to capture the RTCz and RDz integration design. 2. Requirements This chapter lists the primary requirements that were identified for the first pass at RTCz and RDz integration. 2.1 Enable source control capabilities for artifacts that RDz tooling works with Initial focus is on version control and builds of artifacts referenced in RDz remote projects 2.2 Preserve the z/OS developer’s conceptual model that the RDz product promotes Source artifacts are expected to reside on z/OS, support remote debugging, remote syntax check, remote build, etc. 2.3 RTCz should be able to work standalone A shop that does not have RDz installed should be able to collaboratively develop and build z/OS applications using RTCz without requiring any additional tools. Furthermore, in a mixed shop where some developers have RDz and others do not, it should be possible to use RTCz standalone against the same Jazz server that RDz users use without being broken. Due to the much richer set of tooling that supports z/OS development in RDz, the user experience of those using RDz in combination with RTCz will be richer than those trying to use RTCz standalone. However, the RTCz tooling should be sufficient to be productive and get the job done. 2.4 Build and environment settings should be shared between RTCz and RDz A user that uses both RDz and RTCz products should be able to define environment settings and build processing using a single technique (vs. having to do it the RDz way and the RTCz way). RDz customers that use SCMs typically expect that builds are defined using the SCM infrastructure and those should override the RDz build infrastructure. Therefore, the expectation is that RTCz build and environment settings would override the RDz build specifications. Furthermore, environment settings (such as SYSLIB) are used during various RDz operations (e.g. remote syntax check, open copy member, show dependencies, content assist) and should also be specified using the RTCz way for SCM managed artifacts. IBM Confidential IBM, 2016 Page 4 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 3. Architectural Decisions 3.1 Overview This chapter describes the integration architecture between RDz remote projects and the RTCz build and source control components. It lays out the integration challenges that the design iteations that culminated in the eventual design decisions. 3.2 Technical issues/challenges 3.2.1 Eclipse project model vs. RDz project model The Eclipse resource framework is essentially designed to work like a local file system. The root of the file system is the workspace, underneath this root there are Eclipse Projects (which are folders that have a special metadata file in them) and inside those project folders there are other folders or files. The RDz project model for remote projects (RDz actually supports several different types of projects) is based on the Eclipse resource framework but it introduces several extensions. For one, the notion of project and subproject containment is introduced. Eclipse projects cannot contain other projects, however, in RDz, project containment is simulated through the use of metadata. That is, z/OS projects and subprojects are actually implemented as Eclipse projects which hang off of the workspace root just like regular Eclipse projects. However, the z/OS project contains metadata which tells it which other Eclipse projects are “contained” within it. This containment is actually a logical relationship and not manifested on the file system as true folder containment. RDz has a special navigator view, called z/OS projects, that can display these logical containment relationships based on the metadata and not the physical containment (which the standard Eclipse navigator or project explorer views display). Note that in order to display this logical structure, the actual physical layout on the file system is hidden from the user’s view. This is accomplished by implementing filters on the standard Eclipse navigator and project explorer views that hide the physical Eclipse projects that implement the z/OS project and subprojects. The following diagram shows the logical view presented in the z/OS projects view vs. the actual physical layout of the projects that is hidden from the user’s view. Logical View (z/OS Projects) Physical view (Eclipse Project) 3.2.2 More on the RDz user’s conceptual model As mentioned above, RDz actually supports several different types of projects (most of which are implemented using standard Eclipse projects but with a particular nature that enables some RDz functionality). However, for z/OS application development, RDz attempts to act like “a better ISPF” to the traditional z/OS application developer. RDz attempts to preserve the ISPF user’s expectation that their source artifacts are located on the physical z/OS (MVS) file system in data sets but the RDz tool simply facilitates a better user experience (e.g. graphical navigation, mouse gestures) than the command or menu driven facilities that are provided in ISPF. RDz provides sophisticated tools that attempt to preserve this user experience by downloading files to the workstation for editing with an editor that can simulate the ISPF editor and uploading them back seamlessly as needed without forcing the user to have to think about where on their local file system (let alone which Eclipse folder) those artifacts should be downloaded to, or what code page conversions should be done on them and so on. Therefore, remote projects are the recommended way for RDz users to work with z/OS applications, even though, if they choose to, users can opt to develop z/OS applications without using remote projects. An important point to remember is that remote projects are not containers of artifacts IBM Confidential IBM, 2016 Page 5 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> but simply contain metadata that is interpreted as pointers to the physical artifacts on the remote file system. As such, the same physical artifact may actually appear multiple times in different RDz MVS subprojects since the latter represent logical references to the actual physical artifact up on the host. 3.2.3 Maintaining source control metadata in local vs. z/OS sandboxes See RTC source control component implementation for some background about how RTC source control works. In order to support remote development, the concept of a remote (z/OS) sandbox needs to be introduced (either instead of, or in addition to the local sandbox that RTC uses). Files that you extract into your local sandbox are kept track of by the source control feature via metadata files in your Eclipse workspace as well as by monitoring timestamp changes to the files in the sandbox. If we wish to extract files to a sandbox on the z/OS (MVS) file system, and we want to be able to keep track of them in the same way files on a non-z/OS sandbox are kept track of via Jazz source control, we must be able to store metadata about the files on the MVS file system along with being able to retrieve information about modification timestamps and so on. One of the ways the MVS file system manages files is in terms of libraries called Partitioned Data Sets (PDS). Partitioned Data Sets can be subdivided into members that can be likened to files on a hierarchical file system. However, PDSs do not allow extended attributes to be attached to each of these members as you could on some hierarchical file systems. Things like file timestamps, type, code page info and not so easy to come by for PDS members. However, there is an enhanced version of PDSs called PDS/E (for extended) which do support extended attributes. If RTCz wants to be able to support timestamps and extended attributes for members on the MVS file system it must prereq PDS/Es data sets for use in z/OS sandboxes. 3.2.4 Use of EFS (Eclipse File System) and linked resources To accomplish the remote development user experience, RDz remote projects employ the Eclipse EFS framework to be able to map a resource in the local Eclipse workspace to its physical/remote location. In Eclipse jargon, this concept is referred to as Linked Resources. This also facilitates the ability to allow multiple MVS subprojects to reference the same remote resource and keep all of the local versions of that resource in sync with the remote copy. The Eclipse recommendation for Team Providers is to be “link friendly” (i.e. support version control for projects that contain linked resources but disallow the version controlling of the linked resources themselves). The core RTC source control implementation follows this recommendation. Therefore, any resources that aren’t found physically inside the project are ignored when sharing the project to the source control system. Additionally, the source control component in RTC also uses EFS to implement the Eclipse manifestation of source controlled artifacts. Unfortunately, Eclipse only allows one EFS provider per resource, which means that any resource in the workspace that is source controlled in RTC, cannot also employ EFS to point at remote resources on z/OS and vice versa. 3.2.5 Containment vs. Reference and the clone problem As mentioned above, RDz projects are essentially based on references to external resources (with a many to one relationship), whereas RTC source control is effectively based on containment (i.e. 1-1). That is, you identify a resource by its relative location within a component (i.e. based on the containment structure). Although, theoretically, you can store the same file in multiple components in RTCz, the identity of these cloned copies is not preserved and no attempt is made to keep their contents in sync (although there is an optimization based on a hash performed on large binary files that allows storing a single copy of the file contents pointed to by multiple components). This makes it very difficult to take an RDz MVS subproject as is and persist it in the RTC source control structure. You could convert the subproject into a container and import all of the members it references under this containment structure prior to storing it into the SCM and then convert it back to references when you extract it back out. However, due to the cloning issue you would end up with many copies of the same member in different places in the SCM and you will quickly get into a major maintenance problem trying to keep all of those copies in sync. 3.3 Design decisions There were quite a few iterations on the design of the integration between the RTCz and RDz products. This chapter attempts to summarize some of the stepping stones that led to the eventual design. IBM Confidential IBM, 2016 Page 6 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 3.3.1 Rejected approaches/proposals 3.3.1.1 Use of EFS in RDz v7.5 projects to support Source Control Providers RDz v7.5 introduced a new RDz project model that would be source control system friendly by being based on EFS. The goal was to be able to share RDz remote projects (online or offline) directly into a source control provider. Unfortunately, this turned out to be a non-starter once the issue of RTC not supporting persistence of linked resources surfaced. 3.3.1.2 Data set Source Control components (or projects) The next revision was based on the idea that since RDz is essentially a reference based project model, that RTCz will manage data set members in a container structure (i.e. a source control component that is “tagged” as a z/OS data set or a PDS project) and the RDz references could then be stored as references to this data set container. The argument against this approach was that modern source control systems should not try to mimic the data set based organization of artifacts and focus instead on a more natural grouping of artifacts centered on componentization of applications and subsystems. 3.3.1.3 Use zComponent Projects as MVS subprojects RTCz 2.0 introduced its own Eclipse project structure called a zComponent project. This project was designed to support the standalone RTCz develop and build z/OS artifacts scenario but also to make it possible to integrate with RDz. Originally, it was thought that RDz projects could consider zComponent projects as if they were subprojects. However, the containment vs. reference issue mentioned above caused this idea to be dropped since it would alter the RDz user experience too drastically and violate the second requirement. 3.3.2 Accepted approaches/decisions 3.3.2.1 Listening to the local sandbox and three way synchronization The next stage in the evolution of the design (this one was adopted in the eventual solution) was to enhance the RDz project model so that it could “listen” to a local sandbox location of “managed” artifacts in addition to the remote copies that it already knows how to listen to. A three way synchronization scheme would be designed that would allow RDz to detect changes on either the remote or local sandbox and propagate those changes to the other sandbox. RTCz would be responsible for extracting both local and remote copies of the artifact from the repository and then tell RDz to start listening to both local and z/OS sandboxes. Note that since we’re treating the files on the z/OS file system as a sandbox, it should be understood that artifacts on the z/OS file system that are managed in the SCM should be considered transient and can effectively be wiped out from the file system and recreated as needed from the SCM. Furthermore, to support the optimistic locking model, users would have their own sandbox (specified via a personal data set prefix) which should be reserved for their exclusive use for a particular repository workspace. RTCz 2.0 will not support conflict resolution when two copies of the same named file are loaded (e.g. from two different projects or repository workspaces) into a z/OS sandbox. 3.3.2.2 Links between zComponent artifacts and MVS subproject artifacts To avoid confusion between when a zComponent project should be used vs. when an MVS subproject should be used, we must differentiate between the role of RDz projects and zComponent projects. Since it was agreed that the two projects have different purposes (RDz projects being a working set vs. zComponent projects being a componentization and version control vehicle) it was decided that the right way to integrate between them is to introduce links between the artifacts in the two projects. These links will be specified using two new wizards: Share members as zFiles and Load zFiles to z/OS. The links are persisted in the Eclipse workspace as persistent properties so that they can be reestablished the next time the workbench is restarted. However, if a different Eclipse workspace is used, the RDz projects and links will all have to be reconstructed from scratch. 3.3.2.3 Data set prefix (sandbox) and the need to specify a build context when linking zFiles to MVS subprojects RTCz metadata is actually split across several different model elements which are combined and interpreted together during a build. These model elements include data set definitions, language definitions, translator definitions and build definitions, among others. The build definition is actually the binding mechanism that provides the necessary context to put all of the other constructs together. For one, data set definitions contain a partial data set name to which IBM Confidential IBM, 2016 Page 7 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> a prefix should be added. This prefix is specified in the build definition construct as a build property called teamz.scm.dataset.prefix. Second, translator definitions can contain symbolic placeholders (variable substitution parameters) that reference data set definitions symbolically rather than explicitly. Again, the build definition construct contains the resolution values for these placeholders (implemented as build property key value pairs). Lastly, to satisfy the build integration requirement, RTCz is expected to request an RTCz build (and specify which build definition to use) when RDz’s build operation is invoked and the RDz project contains SCM managed artifacts. Although the latter could be accomplished by prompting for the build definition each time a build is requested, the fact that the dataset.prefix property is also defined in the build definition, makes it reasonable to simply prompt for a build definition (or rather a personal, customized build request) when the linking between zFiles and RDz projects is made (i.e. during the Share or Load wizards). This build context can be customized by the user (i.e. the build property values can be overridden from the defaults retrieved from the build definition) the first time through the wizards for a particular repository workspace. However, since the data set prefix property effectively establishes the z/OS sandbox that is in use for that repository workspace, once the sandbox is live and in use, it’s best to keep the prefix (and hence the location of the sandbox on z/OS) static for the duration of the RDz “session”. By “session” we mean from the time artifacts from a repository workspace are associated with an RDz project until there are no longer any artifacts from the repository workspace that are associated with an RDz project in the workspace (i.e. all artifacts from the repository workspace were “disconnected” from the RDz projects that referenced them). The build properties that the user specified in the build context are stored in the Eclipse workspace as persistent properties and are reused the next time the user attempts to invoke either the load or share wizards to incrementally link additional artifacts from the repository workspace to RDz projects in their Eclipse workspace. 3.3.2.4 Local sandbox contents vs.z/OS sandbox Since the links between MVS subproject artifacts (members) and zComponent artifacts (zFiles) are on a per artifact basis, there is a bit of a disparity between what gets loaded into the local sandbox and the remote z/OS sandbox. To preserve the integrity of the zComponent project (and the metadata it contains), we must always load the full zComponent project into the local sandbox and treat the zComponent project as a whole. Note that RTC allows loading partial project contents (e.g. folders) into the local sandbox, but the RTCz load to z/OS wizard will not allow that. As for the z/OS sandbox, it will only contain the actual sparse members that have been linked to the MVS subproject (i.e. the folder containment structure in the zComponent project is not replicated on the MVS file system). 3.3.2.5 Using the RTCz File Agent to populate the z/OS sandbox RTCz 2.0 introduces a special type of SCM client running on z/OS called File Agent. This client is somewhat limited in terms of SCM capabilities (i.e. it doesn’t support two way synchronization between the z/OS file system and the SCM) but it does support extraction of SCM artifacts into the z/OS file system as well as importing of z/OS file system artifacts into the SCM. Although we could have used the Eclipse client as a means of populating the z/OS sandbox (i.e. load the artifacts into the Eclipse workbench and then push them to the z/OS sandbox), to avoid the possible round tripping problem that may occur if the SCM was located on z/OS and save bandwidth (and to leverage the File Agent which is needed anyway to facilitate builds on z/OS), it was decided that we would use the File Agent to populate the z/OS sandbox during the load to z/OS operation. Since the File Agent does not use the standard RTC SCM load operation to load members, we must somehow communicate the list of sparse members we wish to have the File Agent load. Since each file that we need to load has to be described using multiple attributes (e.g. repository workspace ID, data set prefix, component name, data set definition ID, path to the file within the component), it was decided that the best way to specify these attributes would be via an XML format as described in the Implementation Details chapter. Note that the counterpart Share operation would not use the File Agent and would download the files being shared to the workstation (using RDz) and then push the files being shared into the SCM using the standard SCM check-in and deliver operations. 3.3.2.6 Handling of file extensions The MVS file system does not support defining file extensions on members in partitioned data sets. The member name is restricted to be at most 8 single byte characters and cannot contain special characters such as a dot. Since Eclipse keys off the file extension to decide what type of editor to open on a file, RDz allows annotating remote files using a file extension. This information is kept in RDz metadata and is not attached to the actual physical artifact on IBM Confidential IBM, 2016 Page 8 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> z/OS. Furthermore, RDz allows defining default file extension mapping rules that automatically assign an extension to a member in a data set based on some portion of the data set name. For example, one such rule says that if the data set name contains the word COBOL, that any member within that data set should automatically be assumed to have a .cbl extension. In RTCz, a file extension is a perfectly legal part of the zFile name, however, and can be persisted with the zFile in the SCM. However, when the file gets loaded to z/OS, this extension gets stripped off by RDz and the member gets assigned an extension based on the RDz data set mapping rules. 3.3.2.7 Summary of accepted decisions The SCM will be pre-populated using the RTCz mass import tool. Import can be done from PDSs. Artifacts (zFiles) will be extracted from the SCM to the local sandbox and the remote sandbox using a new SCM Load operation (Load Files to z/OS). Only PDS/Es are supported in remote (z/OS) sandboxes (not PDSs). There will be a way to add new “unmanaged” members to be under SCM control (Share members as zFiles) RDz will maintain a registry of local sandbox and remote sandbox artifacts that are “linked” and will listen on changes that occur to either of those, synchronizing changes from one sandbox to the other as needed. This includes maintenance operations such as content changes, renames, deletes, and moves. Build properties such as compile options or the SYSLIB concatenation will be retrieved from RTCz as needed by various RDz functions. Furthermore, any RDz projects that contain shared (linked) artifacts will delegate project build requests to RTCz’s build infrastructure. However, computing build dependencies (which is needed for various RDz operations such as content assist, syntax check, show dependencies, open copy member) will not happen automatically yet in this release since it depends on dependency metadata gathering which RTCz does not yet implement. See Build Integration in the detailed implementation chapter that explains what needs to be done until smart build is supported in RTCz. For now, persistence of the “working set” information will be deferred. That is, the actual physical RDz project and subproject will not be source control managed and will only exist in the Eclipse workspace. See Known Limitations. 4. Detailed Design and Implementation 4.1 Integrated Development setup When you co-install the RTCz and RDz products into the same Eclipse shell, you get all of the power of both products including the Eclipse source control client and the RDz remote project tooling in the same workbench. Furthermore, the RTCz extensions such as zComponent projects, data set definitions, language definitions are also available to RDz to interact with. Taking advantage of the additional integration feature (see Integrated Client Installation) allows RDz to provide a working set view for a subset of the zFiles in the SCM managed zComponent projects as illustrated in the following diagram: IBM Confidential IBM, 2016 Page 9 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> Eclipse Workspace RDz project area RTCz Local Sandbox RTCz SCM zComponent1 Component A EPSCMORT.cbl z1 zComponent2 Component B z2 EPSMDRVR.cbl Note that the RTCz local sandbox isn’t necessarily visible to the user if they are working exclusively in RDz’s z/OS projects perspective. However, if they open the Project Explorer view (e.g. if they are working on cross platform applications and have some Java or web projects that they need to work on as well), they will see the zComponent projects that contain the full set of zFiles in the zComponent (i.e. not just the ones in the RDz working set) in the Project Explorer view. 4.1.1 Implementation and installation notes The separately installable RTCz/RDz integration feature provides contributions to the new team API that RDz v7.6 introduced (see Interfaces). Furthermore, this feature includes the two new wizards that allow members from MVS subprojects to be added as zFiles to zComponent projects or zFiles that are under SCM control to be added to an MVS subproject (which, under the covers, loads a remote copy of the zFile and points the MVS subproject to it). This feature also includes the z/OS hyperlinks feature which allows work items in RTCz to create references to MVS artifacts (not covered in this specification). If RDz is installed, the MVS artifacts referenced by these hyperlinks can be opened in the Eclipse workbench directly. Lastly, this feature includes the RSE client that is used to communicate to the File Agent RSE miner which is installed and configured on the z/OS system as part of the RSE server. On the z/OS system, you will need to install the RTCz toolkit and configure it to plug into the RSE server that is installed as part of RDz. See z/OS (toolkit) installation and configuration. The RTCz toolkit includes the File Agent along with multiple front ends to it that allow it to be invoked from the command line, as a Java library or from the Remote System Explorer daemon through a contribution to the RSE miner extension point. That is, RTCz provides a File Agent Miner which can be used to contact the File Agent through the RSE transport layer. 4.2 RTC source control component implementation At this point, a quick review of the core RTC source control component implementation is in order. The source control feature in RTC is based on a checkout model and is designed to support parallel development using optimistic locking. The source control component is designed as a client/server application. The client can either run in the Eclipse workbench, or as a command line client, and with some limitations in the web browser or Visual Studio IDE. Although the Java client/server API is used extensively in the source control component and this will likely remain so from now on, the primary API that’s supposed to be used by clients for new function is the RESTful API (available as of RTC 2.0) so that you can write other SCM queries from other tools or programming languages. Furthermore, the API is divided into a low level source control API and a higher level File System Client API (there are actually additional layers on top of this which RTCz does not use so we’re not listing them here). Note that RTCz consumes but does not extend these APIs. IBM Confidential IBM, 2016 Page 10 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> The high level constructs and operations that the source control component manages are illustrated in the following diagram: The streams, components and repository workspaces are maintained in the source control repository itself. The Load and Check-in operations are the mechanism through which you can interact and modify the artifacts in a sandbox which is external to the repository. Furthermore, an Accept operation into a repository workspace also refreshes the copy of the artifact in the external sandbox (local workspace) if the artifact has been previously loaded. A Share Project operation (not listed in the diagram) is another way of adding or synchronizing an Eclipse project from the external sandbox into the SCM. The Load operation can load a whole repository workspace, a subset of components from within it, a folder within a component (or project) or a single file from a managed folder (if you use Load As). The Share Project operation always operates on a whole Eclipse project. There is currently no other way to “Share” artifacts other than whole Eclipse projects to the repository using the Eclipse source control client facilities. The SCM is designed to operate using an optimistic locking model. This means that multiple users can load the source base and modify it in parallel. If, in the meantime, someone delivered some changes to the stream, you can choose to Accept those changes into your repository workspace and merge them with the changes you’ve been making, if necessary. RTC 2.0 also supports pessimistic locking through a new Lock file operation. 4.3 RTCz source control extensions As mentioned earlier, RTCz does not really extend the RTC source control component but introduces additional client side usages of the core RTC source control and file system APIs. One such usage is the additional type of Load operation (Load zFiles to z/OS). The new Share members as zFiles and Disconnect member from zFile operations do not perform any direct SCM interactions. The actual remote load operation is performed through the RTCz File Agent which implements a sparse loading operation on individual zFiles but allows them to be extracted directly into MVS data sets as members. The File agent is also a user of the core RTC File System and source control APIs. IBM Confidential IBM, 2016 Page 11 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 4.4 RTCz File Agent RTCz provides a variation on the command line SCM client which runs on z/OS, called File Agent (which is packaged as part of the RTCz toolkit SMP/E installable package). However, although the File Agent can run as part of the SCM command line client as a standalone utility, it can also be used as a Java library and called directly from any Java application running on z/OS (USS) such as the RTCz build toolkit or the RSE server that is installed as part of RDz. Note that File Agent is not a full featured SCM client. It can perform Share Project (during Mass Import) and Load operations (full workspace load or sparse load) but it does not support Accept and Check-in operations. Furthermore, it does not yet maintain any repository metadata about the extracted resources (i.e. so they can get checked back in) so it does not behave as a true RTC SCM client in that respect either. When used through the RSE interface it can be contacted from the client which can pass it an XML stream that contains a list of files that it needs file agent to load (sparsely). Here’s an example XML stream that contains directives to load 2 files from a repository workspace: <?xml version="1.0" encoding="UTF-8"?> <operations> <loadFiles dataSetPrefix="U21.BLD" workspaceUUID="_vKV-cGD1Ed6JPsdAdwErlg"> <file componentName="TComp" dataSetDefinitionUUID="_8ZYWIGD2Ed6qVsasYnwCdw" filePath="/Mortgage/zOSsrc/Cobol/EPSMLIST.cbl"/> <file componentName="TComp"dataSetDefinitionUUID="_8ZYWIGD2Ed6qVsasYnwCdw" filePath="/Mortgage/zOSsrc/Cobol/EPSNBRVL.cbl"/> </loadFiles> </operations> 4.5 Load zFiles to z/OS operation The Load zFiles to z/OS operation is one of the primary integration points between RTCz and RDz. The way it works is as follows: The user initiates the Load to z/OS request. The wizard comes up and prompts for the list of files to load and the target MVS subproject as well as the build context (more on that later) and target data set prefix. When the wizard finishes it performs a three step load operation: 1. Load the zComponent projects of the selected artifacts from the SCM into the Eclipse workspace 2. Construct the XML stream containing the list of selected artifacts and upload it to the File Agent, waiting for it to populate the z/OS sandbox with the requested artifacts. 3. Once sandbox is ready, notify RDz of the local zFiles and remote members to add to the target subproject and start listening on. The following diagram illustrates the sequence of steps that occur when the load to z/OS operation runs: IBM Confidential IBM, 2016 Page 12 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> z/OS dev LPAR 4 F1 F1 F1 3 File Agent on MVS 2 6 5 Repository Workspace 1. 2. workstation RDz client RTCz SCM 1 RTCz client 6 3. 4. 5. 6. RTCz client loads files from SCM to Eclipse workspace RTCz client sends request to File Agent to load files remotely File Agent retrieves files from SCM File agent creates appropriate PDSE’s and loads the members RTCz client notifies RDz that local and remote sandboxes are ready RDz sets up listeners to remote and local copies of files 4.5.1 Load zFiles to z/OS – Implementation notes The Load operation is driven by the new Load zFiles to z/OS wizard. In order for the user to be able to take advantage of the RDz remote development, debug and build facilities, they would add their managed SCM members to z/OS projects/subprojects using this wizard and from then on, they can continue working with those artifacts like they normally would using the facilities RDz provides. This wizard mimics the standard RTC load wizard which loads the contents of repository workspaces into the Eclipse workspace (or local sandbox). The difference is that this wizard specializes in loading zComponent projects but even more specifically the zFiles inside those zComponent projects that you want to associate with an MVS subproject. For this release, we will assume that the z/OS project and subproject must have been created prior to invoking this new wizard. There are several places where this wizard can be invoked from: Everywhere where the load operation is available (e.g. team artifacts navigator->my workspaces->Context menu over workspace or component, repository workspace editor drop down at the top or component context menu, but probably not from the pending changes view). In the Project Explorer inside a zComponent project In the RDz z/OS Projects explorer inside an MVS subproject The wizard needs to gather the following information: IBM Confidential Source Repository Workspace Source Component Source zComponent Project Source zComponent artifacts (zFiles) Target MVS subproject Build Context IBM, 2016 Page 13 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> Part of the above information is pre-filled based on the context that the wizard is invoked from. For example, if you launched the Load action from a zComponent project already in the Eclipse workspace, then the wizard can skip the steps required for selecting the zFiles and go directly to the target MVS subproject page. Note that a zComponent project in the Eclipse workspace that isn't shared to the repository will not be allowed to participate in this loading scheme. We would gray out the menu action in this case. Note: as of this writing, it’s only possible to launch the load wizard from a repository workspace or component (within a repository workspace) context (e.g. from the Team Artifacts Navigator, or from the repository workspace editor’s drop-down menu). If you started from a component, the first page of the wizard will only display the zComponent projects in the selected component. If loading from the repository workspace, the wizard would let you drill down into the SCM component from which to choose your zComponent Projects from. Under the SCM component the wizard will display the zComponent projects within it and allow you to select zFiles within those projects to Add to your MVS subproject (and thus load them to z/OS). The first page of the wizard allows you to choose the zFiles in the zComponent project. a selection of a folder is simply a fastpath for choosing all of the members within that folder. The folder itself is never added to the MVS Subproject since it’s a phantom fragment of a data set that the zComponent project uses as a componentization mechanism. If any of the zFiles that you’ve chosen to load already exist in your Eclipse workspace, the next page of the wizard will prompt you to confirm whether to overwrite those files. IBM Confidential IBM, 2016 Page 14 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> Next, the target MVS subproject must be specified. At this point, we require that the RDz project and subproject must have been pre-created in your Eclipse workspace. The next page of the wizard simply presents a list of the existing RDz projects and subprojects in your Eclipse workspace. In future releases we can add additional buttons to create a new z/OS Project and MVS Subproject on the following wizard page (unless we decide to deprecate this wizard in favor of a more powerful way to instantiate MVS Subprojects directly based on dependencies). Once the target MVS subproject is chosen, we need to establish the build context (if going through the load or share wizard for the first time for artifacts in this repository workspace). Again, if any zFiles from the chosen repository workspace have already participated in a Share or Load zFiles operation, this build context will be pre-filled (it’s stored in the Eclipse workspace as persistent properties keyed by the repository workspace) and you will not be allowed to override it. If you ever do need to override it, you will need to choose the Disconnect member from zFile menu action for all members in any MVS subproject in the Eclipse workspace that are associated with zFiles that are IBM Confidential IBM, 2016 Page 15 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> shared to the repository workspace that the build context is associated with. Starting from a fresh Eclipse workspace is another, more drastic, alternative to be able to specify a new build context for your repository workspace. Also, you can create another repository workspace and have a different build context (and prefix) associated with it, although it can have the same exact contents as your original repository workspace. Finally, the wizard computes the full z/OS file names of the zFiles based on the prefix specified in the associated build context and the data set names specified in the data set definitions associated with the zFolders. At the end of the wizard, the following conditions should exist: The zComponent projects that contained the selected zFiles are loaded into the Eclipse workspace and are visible in IBM Confidential IBM, 2016 Page 16 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> the Project Explorer view (if it is open). In this case, the zFolder MortgageLoad was associated with the data set definition In this case, the LoadTest zComponent project contains a zFolder named MortgageLoad. This zFolder was associated with the data set definition COBOL, which has a data set name of COBOL as follows: The data set prefix from the build context is added to this data set name at allocation time so that the member that gets created on z/OS is USER21.DEV.COBOL(EPSCMORT). The extension is actually an RSE/RDz feature that allows tagging z/OS members with a file extension (if you view the member in ISPF this extension will not exist there). The z/OS sandbox, pointed to by the data set prefix specified in the build context that was selected during the wizard, contains newly allocated data sets whose name is computed as described above. The MVS subproject contains references to the members in those data sets that were loaded to z/OS by the load wizard. IBM Confidential IBM, 2016 Page 17 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> Note that the members themselves are added to the MVS subproject as “sparse” members (i.e. not inside their containing data set). A future enhancement might be to give users the choice on whether they want the sparse members to be added to the subproject or the whole data set. The latter is actually the preferred method of working in RDz especially when dealing with lots of members in lots of different data sets. If you add a whole data set, the members are neatly organized into folders inside the MVS subproject which makes it a bit easier to find needles in a haystack (you can choose to collapse the data sets whose members you don’t want to see). In today’s implementation, a user may choose to manually drag the container data set from the RSE view to the subproject after the load wizard completes to accomplish this. However, it would be nice if this was optionally done for the user automatically by including a checkbox to that effect in the Load wizard (and RDz providing an extension to the API to accept a boolean value indicating that the whole data set should be loaded). 4.6 Share members as z/Files operation The Share members as zFiles operation allows adding unmanaged members to zComponent projects and thus, by virtue of the zComponent project being version controlled in the SCM, the member becomes version controlled as well. The intent is to use this operation to make incremental additions to the SCM after a load to z/OS operation has been performed and established your working set. The following diagram illustrates the sequence of steps that occur during the Share members operation: RTCz SCM z/OS dev LPAR Repository Workspace RSE Server (RDz) F1 F1 F1 2 workstation 3 4 1. 2. 3. RDz client 1 RTCz client 4. RTCz provides RDz with list of members to download RDz sends request to RSE server to download the files RSE server downloads files to specified zComponent folders and starts listening on them. It also moves or copies them to correspond to the specified data set prefix zComponent project is shared to SCM, if needed 4.6.1 Share members as zFiles – Implementation notes The Share operation (similarly to the Load operation) is driven by the Share members as zFiles wizard. Also, like the Load wizard, this is a multi page wizard. It needs to gather the following information: Source members from an MVS subproject to add to source control (share). Target zComponent project to which you wish to add the members. IBM Confidential IBM, 2016 Page 18 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> If the zComponent project is not yet shared to the repository, also need target repository, repository workspace and component to which you wish to share the zComponent project. The build context and data set prefix that will be used to populate and process the z/OS sandbox. In the z/OS Projects perspective, z/OS Projects view, user selects some artifacts from MVS subprojects and chooses zComponent->Share members as zFiles from the context menu. In this release, your selected items will all go to a single target zComponent project per invocation of the wizard. A view showing the structure of the subprojects is presented letting you choose which additional members you want to include in the selection. Selecting a folder (such as a project or subproject or data set) effectively means that all of the members contained in that container are selected. Note that members in the MVS subproject that have been previously added to a zComponent project are filtered out of the list of available members to Share. The next page of the wizard allows you to choose an existing zComponent project in your Eclipse workspace or the option to create a new zComponent project. Note that if the target zComponent project is already shared to the repository, it is annotated with the repository workspace that it’s shared to. If the zComponent project you’ve selected hasn’t been shared yet to the repository or is new, there will be an additional page shown in the wizard to gather the info about where in the repository to share the project to: IBM Confidential IBM, 2016 Page 19 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> The next page of the wizard is the build context page which is identical to the page shown by the load wizard. If the build context was previously associated with the repository workspace, this page of the wizard will be disabled this time around. The next page of the wizard gathers data set associations and language definition associations to the members being shared. The first table shows a summary of all of the data sets from which members are being shared. You are asked to select a data set definition (by clicking the browse button on the right for each row in the table, as there may be multiple different incoming data sets depending on how many different data sets you’ve selected members to share from). The data set definition you select for each incoming data set will be translated into a zFolder inside the zComponent project that you’re sharing members to (and the zFolder will be associated with that data set definition). In the second table, you are presented with the list of zFiles that will be created in the zComponent project and you are given a choice (not yet implemented as of this writing) to choose a language definition for each member in a similar manner to how you choose data set definitions in the first table. IBM Confidential IBM, 2016 Page 20 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> The Copy members into new data sets checkbox toggles whether the members that are being shared will be copied into the new z/OS sandbox location (based on the specified prefix in the build context) or moved there (i.e. deleted from their original data set). The last page of the wizard is, again, an overwrite confirmation page. It is only shown if the members being shared will conflict with the names of existing zFiles in the target zComponent project. At the completion of the wizard, the MVS subproject contains the new data set in the z/OS sandbox that got created (possibly, if the managed data set name didn’t exactly match the original name). IBM Confidential IBM, 2016 Page 21 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> Notice the decorator, indicating that you have an outgoing pending change to the repository workspace. The target zComponent project (visible in the Project Explorer view, contains the newly added zFolders and zFiles as follows: The decorators on the folders indicate that there are outgoing changes in the zComponent project that should be checked into the repository workspace. The project itself got shared to the repository workspace and the zFolder got associated with the COBOL data set definition and the shared zFile got associated with the chosen language definition. 4.7 RDz content synchronization after share or load Once members are shared as zFiles or loaded to z/OS (i.e. a link is created between the RDz logical resource and the RTCz physical zFile), the following diagrams illustrate the internal workings of how synchronization is handled by RDz. IBM Confidential IBM, 2016 Page 22 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration IBM Confidential Version: 0.9 Date: <21/08/2009> IBM, 2016 Page 23 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 4.8 Performing various maintenance operations after share or load 4.8.1 Create a new artifact in RDz project If you discover after starting to work on your working set that you must create a new source member that doesn’t exist in the SCM yet, you would add a new member to your data set and MVS subproject. If you wish to add this member to SCM control, you must explicitly run the Share members as zFiles wizard to add the new member to a zComponent project and manage it as part of that project. 4.8.2 Remove from subproject on a managed member Not enabled. Must first use Disconnect member from zFile action and then you can remove or delete the member from the RDz subproject without affecting the SCM. 4.8.3 Delete managed member or data set containing managed members from RDz project Will also delete corresponding zFiles in the zComponent project and show up as a pending outgoing delete of the zFiles in the pending changes view. 4.8.4 Rename managed member from RDz project Will also rename corresponding zFile in the zComponent project and show up as a pending outgoing rename of the zFile in the pending changes view. 4.8.5 Rename data set containing managed members (in MVS subproject or Remote System Explorer) This operation is grayed out in RDz if the data set contains any members that are managed in the SCM. If you are able to rename the data set somehow (e.g. through RSE explorer or ISPF), RDz will detect the change and present the new name in the subproject. However, the new name will not be propagated to the SCM (or zComponent project). 4.8.6 Rename zFolder in zComponent project (or move linked zFiles to a different zFolder) RDz listener should detect renames of shared zFiles and update its internal shadow file registry. If zFiles moved to a new zFolder that has a different data set definition associated with it, no updates are made to the z/OS sandbox and the members remain in the original data set. 4.8.7 Rename Data set definition which zFolders in zComponent projects are pointing to No effect since zFolders only know the UUID of the data set definitions and not their names 4.8.8 Modify data set name in data set definition which zFolders are pointing to zFiles that have been previously shared will not be made aware of the change and their existing copies in the z/OS sandbox will still exist in the old data set. However, future loads from zFolders that point to the changed data set definition will go to the new data set. 4.8.9 Create a new zFile in zComponent project Will show up as an outgoing addition in the pending changes view. However, to add it to your MVS subproject (working set) you must use the Load zFiles to z/OS wizard to add it explicitly to the subproject and the z/OS sandbox. 4.8.10 Disconnect a zComponent project from the SCM No effect on RDz. RDz will continue to update the zFile in the zComponent project in the Eclipse workspace. Once the zComponent project is shared to the SCM again (using the Team->Share Project action) the updated contents of the zComponent project will be used to synchronize against the SCM copy. 4.8.11 Delete linked zFile in zComponent project Corresponding member in the MVS subproject and z/OS sandbox will be deleted. 4.8.12 Rename linked zFile in zComponent project Corresponding member in the MVS subproject and z/OS sandbox will be renamed. 4.9 Build Integration RTCz also provides syntax check and build services for RDz when members in RDz subprojects are associated with IBM Confidential IBM, 2016 Page 24 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> zFiles. Syntax check and content assist are handled as follows: Until RTCz smart build is available, you are required to pre-populate your sandbox or set up your variable substitutions in a way that will allow you to find the dependencies that the code in your RDz subprojects depends on. That is, if you are working on a cobol program which has dependencies on some copy members and your copy members are not in your RDz subproject, you have to make sure that your SYSLIB is configured in such a way that when your program is syntax checked or its dependencies are searched for for content assist or show dependencies, that the copy members are found somewhere in the SYSLIB you've specified. One way to do this is to run a build on the repository workspace that is pointing at your data set prefix (z/OS sandbox) prior to starting your RDz development session. Another way to do this is to create another RDz subproject that contains associations to all of your dependencies and then leave that RDz project alone. If there are incoming changes to those members, the second RDz project will reflect the changes to your z/OS sandbox but that will free you on focusing on your primary RDz project which will include your actual working set. When you choose the Remote Syntax check action for your program, RTCz is asked to compute the associated SYSLIB for that program. RTCz looks up the language definition associated with that program and searches for a translator in the language definition that is tagged with a checkbox that identifies that translator as the one that should be used for Syntax Check. This translator's DD concatenations are scanned to find the SYSLIB and it is used to search for the dependent copy members. The compile options specified in the translator are also returned to RDz so that it can use them to perform the Syntax Check. Lastly, the other DD concatenations specified in the translator are composed into an "Additional JCL" string that RDz submits along with the Syntax Check command. As for Build, if there are shared members in the RDz subproject, RDz's build is delegated to RTCz. RTCz reuses the build context that was specified for the repository workspace to which the members in the subproject are shared and submits a build request for that repository workspace. Prior to this happening, the user is expected to commit all of their changes to their repository workspace since the build runs against the repository workspace. The build is submitted with the user's repository workspace and prefix as specified in their build context. No attempt is made to retrieve the build results in the format that RDz expects and the user is expected to go to the RTCz build results page, find the build that they submitted and inspect the results in the way RTCz returns build results. 5. Implementation Details 5.1 Known Limitations Dependencies of working set members must currently be preloaded into the z/OS sandbox manually by the user. This should be automated once dependency metadata (part of smart build) is available. Share wizard requires that target zComponent project must be in the Eclipse workspace prior to being able to add members to it. It should be possible to share the members directly to an existing zComponent project that is in the repository workspace but isn’t yet loaded into the SCM (the share operation would then load the zComponent project into the Eclipse workspace much like the load operation does currently) Share wizard does not prompt to create a new repository workspace, new component, or a new folder to share the zComponent project to (if project is previously unshared). Load wizard requires that the target RDz project and MVS subproject must have been pre-created prior to launching the Load zFiles to z/OS wizard. Instead, it should allow to prompt for creating a new RDz project and MVS subproject as the target of the Load wizard if these have not been created prior to the invocation of the wizard. Depending on what ends up being contained in RTCz v2.0, launching the load wizard from the contexts other than a repository workspace may need to be rolled into the next release. An option (checkbox) should be provided in the Load wizard to allow choosing whether the containing data set should be added to the subproject vs. just the members that are loaded. Makes for a more organized presentation in the subproject, especially those that contain many members (since data sets can be collapsed). Need a synchronize view that would allow re-linking disconnected members and zFiles. Currently, you must choose whether you wish to load or share and that determines the direction of synchronization (potentially causing you to wipe out changes you may have made on one side or the other) after members were disconnected (e.g. as a result of a synchronization error or explicit user action to disconnect). IBM Confidential IBM, 2016 Page 25 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> The Build request that’s cached in the Eclipse workspace is currently not modifiable until all resources are disconnected. The build request page of the wizards should be redesigned to make the data set prefix not modifiable but all other properties should be hidden away and opened for modification via an Advanced button. There should be an unload from z/OS operation that disconnects all members shared to a repository workspace and prompts for whether you wish to delete them from the z/OS sandbox. No sharing of RDz projects/subprojects themselves to SCM yet Drag/Drop from zComponent Projects to RDz subprojects should pop-up the Loadz wizard. Pending changes and compare viewers should present logical (RDz) project view once RDz projects (i.e. metadata) can be shared to the SCM. Automatic population of RDz projects from zComponent projects (using dependency information) Migration tools to import RDz property groups into RTCz build metadata. Completely eliminate need for property groups in RDz when working with RTCz. No SCM support for offline RDz projects No SCM support for USS subprojects No attempts being made to handle name collisions of zFiles or zFolder/data sets across zComponent projects or components. No attempts being made to handle z/OS sandbox overloading (e.g. from multiple Eclipse workspaces or repository workspaces) No attempts being made to be smart about reloading into a z/OS sandbox (it’s always a complete overwrite) No lifecycle management of z/OS sandboxes (e.g. unloading, refreshing) Renames of data set names inside z/OS sandboxes is not supported No checks to see if there are loaded zFiles in data sets when a data set name inside a data set definition is renamed. Merge some of the Team Artifact Navigator info (e.g. source control, Data set definitions) into the RSE explorer view to present an “SCM” view similar to how Changeman and Endevor do it. Support loading zComponent Projects to z/OS sandbox without RDz remote projects Use PDS/E extended attributes to store jazz metadata about loaded artifacts. 5.2 Interfaces The API is provided in a way that the team provider (RTCz) should be able to call RDz and vice-versa without introducing plug-in dependencies between the products. 5.2.1 Proxy interfaces RDz adds a common plug-in for team integration which defines a new extension point called ‘proxy’ and a couple of interfaces for team (RTCz) and model (RDz) communication. Contributors of this extension point must provide a class which implements the ITeamProxy interface which has the required methods for RDz to call for requesting or performing team related activities. IModelProxy is the other interface that is defined in this plug-in which has the required methods for team providers (RTCz) to call for requesting or performing model (RDz) related activities. For team providers (RTCz) to access the model proxy, a class called ModelProxyFactory (singleton) is provided. The team providers can call the method as follows to get the model proxy. The repository provider id that gets passed in is stored for future communication with the team provider. IBM Confidential IBM, 2016 Page 26 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 5.2.1.1 IModelProxy interface (implemented by RDz) 5.2.1.2 ITeamProxy interface (implemented by RTCz) Team providers (RTCz) contribute to the ‘proxy’ extension point and provide the implementation. For RDz to access team proxy, a class called TeamProxyRegistry (singleton) is implemented. Team Proxy Registry populates a registry of all the contributors to the ‘proxy’ extension point and returns back a particular team proxy based on the given repository id. RDz calls the following method with repository id to get the team provider (RTCz) for requesting or performing team related activities. TeamProxyRegistry.getSingleton().getTeamProxy(repositoryId); The ITeamProxy interface is the mechanism through which RDz queries build properties from the team provider and delegates various operations to the team provider IBM Confidential IBM, 2016 Page 27 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 5.2.2 ResourceInfo interfaces In addition to the two proxy interfaces, there are two interfaces that represent the model or team artifacts respectively. These are called IModelResourceInfo and ITeamResourceInfo. These interfaces shield the products from having to know anything about the internal representation of resources in model provider or team provider products. IBM Confidential IBM, 2016 Page 28 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 5.2.2.1 IModelResourceInfo interface (implemented by RDz) IBM Confidential IBM, 2016 Page 29 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 5.2.2.2 ITeamResourceInfo interface (implemented by RTCz) 5.2.3 Build Property interfaces Lastly there are a couple of classes that need to be filled in by RTCz to support build integration. RTCz represents build information in declarative constructs called Build Translators. These are in-turn associated with a particular artifact (through a language definition). If the artifact is associated with an MVS subproject, RDz needs to query the build properties for it from RTCz. RTCz returns two types of build properties to RDz currently, compile options (as a string) and a collection of DD (data definition) statement objects. 5.2.3.1 DDStatement 5.2.3.2 DDElement IBM Confidential IBM, 2016 Page 30 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> 6. Appendix A – Glossary of terms 6.1 Core Jazz/RTC terminology by Jazz/RTC component 6.1.1 Source Control Repository Workspace A repository workspace holds an individual developer's private copy of a source file base. Stream A stream is an artifact that holds a shared copy of a source file base. Component A top-level subdivision of the source file base. A component can contain any number of folders and files. Change set A group of related changes to files for folders in a workspace or stream. Flow A Flow is a standing arrangement between repository workspaces or streams that enables users to deliver and accept change sets Load To extract projects or files from a repository workspace into a sandbox or Eclipse workspace Accept To add any change set to a repository workspace, such as a change set attached to a work item Show Pending Changes Display the synchronization view that allows changes from your Eclipse Workspace or sandbox to be checked into a repository workspace or be accepted into an Eclipse workspace or sandbox (Local) Sandbox A location on the file system to which the files from the source control system are extracted so that they can be manipulated via tools that are external to the source control system, such as IDEs and compilers. 6.1.2 Team Build Build Definition A build definition is a filled-in build template which contains build properties and instructions that define how to use a certain type of build mechanism (e.g. Ant, Make, shell script) to build a source code base. 6.1.3 Process Component Project Area The representation of a software project, including the project area defines the project deliverables, team structure, process, and schedule. Team Area A place within a project area for managing team membership, roles, assignments, and team artifacts. Process Area Process Area is a generic term that can be used in place of Team Area or Project Area. 6.2 Eclipse Terminology Workspace A location on a file system with an Eclipse-oriented structure that contains a collection of resources (files, folders, projects). See also sandbox which has a less structured nature. Project A folder that contains a .project file that configures the folder to be a project in an Eclipse workspace. Share Project operation Add or synchronize a project in the Eclipse workspace to a source control repository. Optimistic/Pessimistic Locking In the source control sense, two approaches that allow either parallel or serialized access to source control IBM Confidential IBM, 2016 Page 31 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> artifacts. Optimistic permits multiple concurrent modifications to the same resources with the expectation that changes will be merged later. Pessimistic requires that a resource that is being modified be locked from changes by others so that no collisions or merges will be required later. When the lock is released, the resource can be modified by others based on the latest version. EFS Eclipse File System. EFS is a framework provided by Eclipse that allows an artifact in the Eclipse workspace to act as a symbolic link to a resource that is not physically contained in the Eclipse workspace. 6.3 z/OS Terminology Data set A file on the MVS file system that has a record organization. Data sets names are usually composed of multiple segments called qualifiers. PDS/E Partitioned Data Set Extended. A data set that can be subdivided to contain multiple members. Similar to a directory on other file systems. HLQ High level qualifier. The first segment of a data set name. 6.4 RDz Terminology Remote System Explorer (RSE) A toolset which contains client-side and server-side components that allow an Eclipse client to communicate to a remote system, access remote files and perform remote operations. z/OS Project An Eclipse project which is a container for MVS or USS subprojects. MVS Subproject An Eclipse project which contains references to artifacts on a specific MVS host system. USS Subproject An Eclipse project which contains references to artifacts on the USS subsystem of a z/OS system. Property Group MVS subprojects are associated with a property group which contains a specification of how to syntax check or build the artifacts in the subproject as well as how to search for dependencies. 6.5 RTCz Terminology z/OS sandbox In addition to the local sandbox used by the core RTC source control load operation, RTCz adds the concept of a remote sandbox on the MVS file system. This concept is realized via a data set prefix which is specified during a load operation to z/OS. Data set prefix This prefix is used to complete the names of data sets that are allocated or used during a source control load operation to z/OS. This prefix property is specified in a build definition. File agent A source control client running on z/OS which can be used to retrieve files from the RTCz repository into the MVS file system. zComponent Project A new type of Eclipse project introduced in RTCz 2.0 which contains folders and artifacts that are annotated with metadata properties. The metadata can contain instructions on how to represent the contents of the project on the z/OS file system as well as instructions on how to build the artifacts on z/OS. Folders within the z/OS source folder in this project are associated with PDS/Es on MVS. Sequential data sets are not yet supported but in the future will be able to exist as standalone files inside the source folder of this project. zFolder A folder in the z/OS source folder of a zComponent project that is associated with a Data set definition in the repository. When loading the contents of this folder on the MVS file system, the data set definition that is associated with the zFolder is used along with the data set prefix to find or allocate the data set on MVS and IBM Confidential IBM, 2016 Page 32 RTCz/zIDE Integration RDz zIDE and RTCz Integration Specification RDzIntegration Version: 0.9 Date: <21/08/2009> add the files from the zFolder as members of this target data set. zFile A file in a zFolder which has associated z/OS or build metadata (e.g. language definition). Data set definition A repository artifact which defines the name and characteristics of an MVS data set used in source control or build operations Language Definition A specification of build processing rules for a particular type of artifact (e.g. COBOL) Share members as zFiles A wizard that allows “managing” z/OS data set members to the source control system. Share/Link A term used in this document to describe that a member in an MVS subproject is associated with a zFile in a zComponent project that is managed under source control. Disconnect member from zFile An action that severs the link between a member in an MVS subproject and the zFile in the zComponent project. The member is not deleted but once disconnected, no further synchronization will be performed between the member and the zFile. Antz An extended version of the Apache Ant build infrastructure that includes extensions for building z/OS applications. End of Document IBM Confidential IBM, 2016 Page 33