Type descriptor language (TDLanguage) metamodel6964053Abstract A method of and a system for processing an enterprise application request on an end user application and an application server. This is accomplished by initiating the application request on the end user application in a first language (such as a markup language) with a first application program (such as a Web browser), and transmitting the application request to the server and converting the application from the first language of the first end user application to a language running on the application server, processing the application request on the application server, and transmitting the response from the application server back to the end user application, and converting the response from the language running on the application server to the language of the end user application. The end user application and the application server have at least one connector between them, and the steps of (i) converting the application request from the language of the end user application (as a source language) to the language running on the application server (as a target language), and (ii) converting the response to the application request from the language running on the application server (as a source language) to the language of the end user application (as a target language), each include the steps of invoking connector metamodels of the respective source and target languages, populating the connector metamodels with metamodel data of each of the respective source and target languages, and converting the source language to the target language. Claims 1. A method of processing an application request on an end user application and an application server comprising: Description FIELD OF THE INVENTION
Additionally, the connector and its interface definition language, should be fast, efficient, scalable, portable, support metaclasses, support syntactic level extensions, and support semantic level extensions. SUMMARY OF THE INVENTION The problems associated with integrating new applications, for example, e-commerce applications, with legacy applications are obviated by the Common Application Metamodel tool, method, and system described herein. The Common Application Metamodel method, tool, and system of the invention facilitate tooling solutions, data translation, and communication and collaboration between dissimilar and disparate applications, as well as full run-time software application collaboration through an interface with the application server interface domain. This is accomplished through metadata interchange information, method invocation with strong type checking, run-time method invocation, run time binding, and high level language binding, with the interface separated from the implementation, and an interface repository containing real time information of client and server interface parameters. In particular, the invention serves the role of middleware by joining the representation of programming languages and application transaction formats from any operating system to a language and environment-independent model that faithfully models the source format. Additionally, the tool, method, and system of the invention provide fast, efficient, and scalable interconnectivity independently of any tool or middleware, are reusable and portable, and support metaclasses, syntactic level extensions, and semantic level extensions, and are independent of any particular tool or middleware. The Common Application Metamodel tool, method, and system is especially useful for providing a data transformer that is bi-directional between a client application and a server application, transmitting commands and data both ways between, for example, a Java, HTML, XML, C, or C++ application and a COBOL application. One embodiment of the invention is a method of processing a transaction on or between an end user application and one or more application servers. The method comprises the steps of initiating the transaction on the end user application in a first language with a first application program, transmitting the transaction to the server, and converting the transaction from the first language of the first end user application to an application written in perhaps a different language running on the application server. Typically, as described above, the client will be a thin client or a Web browser, the application running on the client will be a Web browser application or a thin client connectivity application, and the language of the client application will be Java, C, C++, or a markup language, as HTML or a derivative of HTML, such as XML or Dynamic HTML or WML, or the like, and the language running on the server is COBOL. The invention facilitates transformers which convert the transaction from the first language of the end user application to a language running on the application server. After conversion, the converted transaction is processed on the application server. The application processes the request and then sends the response from the application server back to the end user application. Typically, as described above, the application server will be running a COBOL based application, and the client will be a thin client written in Java or C or C++, or a Web browser, running a Web browser application or a thin client connectivity application, in a markup language, as HTML or a derivative of HTML, such as XML or Dynamic HTML, or the like. The invention provides data transformers which convert the response from the language or languages running on the application server or servers to the first language of the first end user application. The end user application and the application server have at least one data transformer between them. In this way, the steps of (i) converting the request from the first language of the first end user application as a source language to the COBOL language running on an application server as a target language, and (ii) converting the response from the COBOL language running on the application server, as a subsequent source language, back to the first language of the first end user application, as a subsequent target language, each comprise the steps of invoking Type Descriptor and language metamodels of respective source and target languages, populating the metamodels with each of the respective source and target languages' data items and types, and converting the source language to the target language. The end user application is, frequently, a web browser or a thin client. When the end user application is a Web browser, the end user is connected to the application server through a web server. According to a further embodiment of the invention, the web server may comprise the connector, or data transformer. The data transformer integrated with the Web server may directly convert the request, transaction, or message from a browser oriented form to an application server language or to an intermediate, business or commerce oriented markup language, such as XML. The CAM metamodel used to construct the converter comprises an invocation metamodel, an application domain interface metamodel, a language metamodel, and a Type Descriptor metamodel. Exemplary invocation metamodel includes information chosen from the group consisting of message control information, security data, transactional semantics, trace and debug information, pre-condition and post-condition resources, and user data, etc. Exemplary application domain interface metamodel comprises information chosen from input parameter signatures, output parameter signatures, and return types. Application domain interface metamodel uses one or more language metamodels, such as COBOL metamodels. The Type Descriptor metamodel defines physical realizations, storage mapping, data types, data structures, and realization constraints. The TDLang model solves this problem by introducing a set of parent classes from which the language models subclass. One of the parent classes in the Type Descriptor Language (TDLang) class is the Type Descriptor Language Element (TDLangElement) class, which associates directly to the Type Descriptor (TD) model's Instance Type Descriptor Base (InstanceTDBase) class. The Type Descriptor Language (TDLang) invention provides three basic inheritance associations to all existing and future language models, which are the declared element, it's simple data type, and it's composed complex data type if necessary. As additional language models are added to CAM, inheritance from the TDLang model provides a seamless integration to the physical representation model. The result is a stable TD model which never needs updating as new models are added. Not only does the TDLang model provide language models with a single shared point of connection to the TD model, it also serves as a set of base classes to CAM language metamodels by providing a template for model design. Having a common set of base classes benefits language model designers by providing them with a framework for their design while the consistent design across language models benefits tool implementers with a familiar interface structure. Another benefit provided by the TDLang model is that it provides application models with an interface to language models and to the TD model via an association to TDLangElement. An application program can carry data of various programming languages in its payload, TDLang provides the bridge from the anonymous data stream in the payload to a specific language representation and from the language representation to its physical layout in memory. The method of the invention is also applicable to situations where one of the source or target languages is object oriented, and the other of the target or source languages is not object oriented. In this situation, the language metamodel and the Type Descriptor metamodel together map encapsulated objects of the object-oriented language into code and data of the language that is not object oriented. Additionally, the language metamodel and the Type Descriptor metamodel maps object inheritances of the object oriented language into references and pointers in the language that is not object-oriented. The method of the invention is also applicable when different procedural languages are running on different platforms or applications and commands and data of the source procedural language are mapped into the target procedural language. According to the method of the invention, there may be a plurality of applications for vertical (sequential, conditional, or dependent) processing, for horizontal (parallel in time) processing, or both horizontal and vertical processing. This is to support rich transactions to and through multiple hierarchical levels and multiple parallel sequences of processing. This may be the case in business-to-business transactions drawing upon financial, manufacturing, scheduling, supply, and shipping databases and servers, and utilizing various commercial security instruments. A further aspect of the invention is a client-server processing system having a client, a server, and at least one transformer between the client and one or more servers, A still further aspect of the invention is a processing system configured and controlled to interact with a client application. In this aspect of the invention, the system comprises of a server, and at least one transformer between the server and the client application, where the client has an end user application, and is controlled and configured to initiate a request with the server in a first language with a first application program and to transmit the request through a transformer to the server or servers. The server processes the request in a second software application, using a second language, and returns a response to the client through a transformer. A further aspect of the invention is a groupware system having a plurality of e-mail enabled end user applications, such as e-mail, word processing, spreadsheet, simple database management (such as Lotus Approach or Microsoft Access), graphics and graphics editing, audio and audio editing, and computer-telephony integration ("CTI"), along with client level content database client services and content replication client services. Groupware integrates these e-mail enabled applications through one or more transformers and application program interfaces with transport services, directory services, and storage services, including content servers and replication servers. The groupware system is configured and controlled to communicate among disparate end-user applications, among disparate servers, and between disparate servers and end user applications. The groupware system comprises at least one transformer between a server and an end user application. The end user application is controlled and configured to participate with a server in a first language of a first application program and the server is configured and controlled to participate with the client in a second language of a second program. The transformer is configured and controlled to receive a request from the end user application, and convert the request from the first language of the first end user application to a language running on the server. The server is configured and controlled to receive the converted request from the transformer and process the request in a second language with a second application program residing on the server, and to thereafter transmit a response through a transformer back to the end user application. A still further embodiment of the invention is the provision of rich transaction processing. Rich transactions are nested transactions that span to, through, and/or across multiple servers. The spanning across nested servers may be horizontal, that is parallel dependent transactions, or vertical, that is, serial dependent transactions. Rich transactions may be long lived, on-going transactions, or complex business-to-business transactions, especially those with multiple dependencies or contingencies, volume and prompt payment discounts, late delivery and late payment penalties, and with financial processing, such as electronic letters of credit, electronic bills of lading, electronic payment guarantees, electronic payment, escrow, security interests in the goods, and the like. In a rich transaction environment, some transaction servers may be positioned as clients with respect to other transactions for certain sub transactions making up the rich transaction. A still further embodiment of the invention is a tool, that is, a software developer's kit, characterized in that the program product is a storage medium (as a tape, floppy disks, a CD-ROM, or a hard drive or hard drives on one of more computers) having invocation metamodels, application domain interface metamodels, and language metamodels, and computer instructions for building a metamodel repository of source and target language metamodels. The program product also contains computer instructions for building connector stubs from the metamodels. The program product further carries computer instructions to build a transformer. While the invention has been described in summary form as having a single level of connectors, it is, of course, to be understood that such connectors may be present at various levels in the processing hierarchy, for example between Web Clients and Web servers, between web servers and application servers, between application servers and database servers, and between application servers or database servers or both and various specialized repositories. It is also to be understood, that while the invention has been summarized in terms of individual clients and individual servers, there may be multiple clients, multiple servers, and applications that function as both clients and servers, as exemplified by groupware applications, and there might be multiple parallel lines and/or multiple hierarchical levels of application servers, data servers, and databases, as in systems for rich transactions. THE FIGURES Various elements of the invention are illustrated in the FIGURES appended hereto. FIG. 1 illustrates a system with multiple application components, including a Netscape Internet Explorer browser, Net.Commerce on a Sun Solaris server, Oracle and DB2 on a database server, SAP running on AIX, a CICS 390 server, an IMS 390 server, DB2 and DL/I on a S/390 platform, a Windows 200 client, and Baan running on an HP Unix server. FIG. 2 illustrates the roles of message sets, SQL stored procedures, legacy applications, and programming languages as inputs to the metadata repository of the Common Application Metamodel to facilitate Enterprise Application Integration at run time. FIG. 3 illustrates that the Common Application Metamodel of the invention consists of three kinds of metamodels, i.e., an invocation metamodel, an application-domain interface metamodel, and a language metamodel. For any given application-domain metamodel it may use one or many language metamodels, and there could be zero or many invocation metamodels. FIG. 4 illustrates an IMS OTMA metamodel, with an OTMA Invocation Metamodel, an IMS Transaction Message Metamodel application interface, which could use a COBOL Metamodel, a C Metamodel, or other language metamodels. FIG. 5 illustrates how a tool can be used to generate an XML document describing application program interface. First, an object model, i.e., a CAM metamodel, is created to capture interface definitions about an application server. Then a tool reads and parses the source definitions of an application program and generates an XML document by retrieving the object model's information from a repository. FIG. 6 illustrates a development phase scenario where a Common Application Metamodel Rose file, e.g., a COBOL metamodel, a PL/I metamodel, an MFS metamodel, a BMS model, or the like is read into a toolkit, to generate a DTD and XML schema and Java code for a Rose model. A source file of an application, as a COBOL source file, a PL/I source file, an MFS source file, a BMS source file, or the like, is read into an importer. The importer parses the source code and generates, as output, an XMI instance file, i.e., XML documents, by using the Java code generated by the source application's language model as a template. FIG. 7 illustrates a metamodel for application interfaces, which enables integration of application components into an event based messaging model, including flow models. The flow and messaging models invoke applications through the application interface. These interfaces are access points to the applications through which all input and output are connected to the middleware. The interfaces are described in terms of the Application Interface Metamodels. Transformation processing according to he metamodel could take place in source/client applications, target applications, or a gateway. FIG. 8 illustrates the application of the Common Application Metamodel during execution time. As shown, the CAM model facilitates connectivity between a back-end IMS application and a Web file (e.g., SOAP complaint XML documents). This is accomplished by using information captured in the model to perform data transformations from one platform to another in a mixed language environment as shown. FIG. 9 illustrates TDLang base classes, where the Type Descriptor metamodel is used as a recipe or template for runtime data transformation, with the language specific metamodel for overall data structures and field names, and without duplicating the aggregation associations present in the language model. FIG. 10, including FIG. 10A and FIG. 10B, illustrates a MOF class instance at the M2 level as a Type Descriptor Metamodel. FIG. 10A illustrates the InstanceTDBase, including the ArrayTD, the SimpleInstanceTD, the AggregateInstanceTD, and the Bi_DirectionStringTD. These are, in turn, illustrated with the BaseTDType, and the AddressTD, StringTD, NumberTD, ExternalDecimalTD, PackedDecimalTD, IntegerTD, FloatTD, BinaryTD, and DateTD. FIG. 10B shows the elements of each of these TD's. FIG. 11 illustrates enumerations of a Type Descriptor Metamodel. FIG. 12 illustrates a higher level view of the TDLanguageElement and the PlatformCompilerType 601. FIG. 13 illustrates how the TDLanguage metamodel provides application models with an interface to language metamodels and to the Type Descriptor Metamodel. FIG. 14 illustrates a simplified network configuration for a "rich" transaction where, for example, an order is entered at a terminal, and is passed to and through a Web server to a manufacturer's application server. The manufacturer's application server searches through it's own database server, as well as its vendors' dissimilar and incompatible database servers and databases, transparently connected by the connectors described herein, querying for statuses, prices, and delivery dates, of components, and placing orders for needed components to satisfy the order. FIG. 15 illustrates a groupware session spread across multiple groupware applications running on multiple, disparate platforms, and connected using the Common Application Metamodel described herein. FIG. 16 illustrates a commercial transaction where real goods are shipped from a seller to a buyer, and various forms of electronic payment and secured electronic payment are used by the buyer to pay the seller, with banks and financial institutions connected using the Common Application Metamodel described herein. DETAILED DESCRIPTION OF THE INVENTION Definitions. As used herein the following terms have the indicated meanings. "Handshaking" is the exchange of information between two applications and the resulting agreement about which languages, capabilities, and protocols to use that precedes each connection. An "application program interface" (API) is a passive specific method prescribed by a computer operating system or by another application program by which a programmer writing an application program can make requests of the operating system or another application. Exemplary is SAX (Simple API for XML), an connector that allows a programmer to interpret a Web file that uses the Extensible Markup Language, that is, a Web file that describes a collection of data. SAX is an event-driven interface. The programmer specifies an event that may happen and, if it does, SAX gets control and handles the situation. SAX works directly with an XML parser. A "connector" as used herein is a dynamic, run-time, interface between platforms that stores the functions and parameters of the target platform or program, and binds with the target platform program in real time. A "stub" is a small program routine that provides static interfaces to servers. Precompiled stubs define how clients invoke corresponding services on the server. The stub substitutes for a longer program on the server, and acts as a local call or a local proxy for the server object. The stub accepts the request and then forwards it (through another program) to the remote procedure. When that procedure has completed its service, it returns the results or other status to the stub which passes it back to the program that made the request. Server services are defined in the stub using an Interface Definition Language ("IDL"). The client has an IDL stub for each server interface that it accesses and includes code to perform marshaling. Server stubs provide static interfaces to each service exported by the server. "CICS" (Customer Information Control System) is the online transaction processing program from IBM that, together with the Common Business Oriented Language programming language, is a set of tools for building customer transaction applications in the world of large enterprise mainframe computing. Using the programming interface provided by CICS to write to customer and other records (orders, inventory figures, customer data, and so forth) in a CICS, a programmer can write programs that communicate with online users and read from a database (usually referred to as "data sets") using CICS facilities rather than IBM's access methods directly. CICS ensures that transactions are completed and, if not, it can undo partly completed transactions so that the integrity of data records is maintained. CICS products are provided for OS/390, UNIX, and Intel PC operating systems. CICS also allows end users to use IBM's Transaction Server to handle e-business transactions from Internet users and forward these to a mainframe server that accesses an existing CICS order and inventory database. "IMS" (Information Management System) is the system from IBM that, together with IBM's Enterprise Systems Architecture (IMS/ESA) provides a transaction manager and a hierarchical database server. "MQ" is the MQSeries IBM software family whose components are used to tie together other software applications so that they can work together. This type of application is often known as business integration software or middleware. Functionally, MQSeries provides a communication mechanism between applications on different platforms, an integrator which centralizes and applies business operations rules, and a workflow manager which enables the capture, visualization, and automation of business processes. MQSeries connects different computer systems located at diverse geographical locations, using dissimilar IT infrastructures, so that a seamless operation can be achieved. IBM's MQSeries supplies communications between applications, and between users and a set of applications on dissimilar systems. Additionally, MQSeries' messaging scheme requires the application that receives a message to confirm receipt. If no confirmation materializes, the message is resent by the MQSeries. "Rose" is an object-oriented Unified Modeling Language (UML) software design tool intended for visual modeling and component construction of enterprise-level software applications. It enables a software designer to visually create (model) the framework for an application by blocking out classes with actors (stick figures), use case elements (ovals), objects (rectangles) and messages/relationships (arrows) in a sequence diagram using drag-and-drop symbols. Rose documents the diagram as it is being constructed and then generates code in the designer's choice of C++, Visual Basic, Java, Oracle8, Corba or Data Definition Language. Common Application Metamodel Overview. The Common Application Metamodel (CAM) brings interconnectivity to the environment illustrated in FIG. 1. FIG. 1 illustrates a typical system 101 with multiple application components, including a Netscape Internet Explorer browser 103, Net.Commerce 105 on a Sun Solaris server 107, Oracle 109 and DB2 111 on a database server 113, SAP 115 running on AIX 117, a CICS 390 server 119, an IMS 390 server 121, DB2 123 and DL/I 125 on a S/390 platform 127, a Windows 2000 client 129, and Baan 131 running on an HP Unix server 133. The Common Application Metamodel (CAM) is metadata interchange method, tool, and system for marshaling and applying information needed for accessing enterprise applications, such as in FIG. 1, in a source language and converting them to a target language. CAM consists of language metamodels and application domain interface metamodels, as shown in FIG. 2, which illustrates the roles of message sets 203, SQL stored procedures 205, legacy applications 207, and programming languages 209 as inputs to the metadata repository 211 of the Common Application Metamodel to facilitate Enterprise Application Integration 221. Exemplary metamodels include C, C++, Java, COBOL, PL/I, HL Assembler, IMS transaction messages, IMS MFS, CICS BMS, and MQSeries messages models, as shown in FIG. 3, which illustrates the Common Application Metamodel of the invention, with an invocation metamodel 301, an application-domain interface metamodel 303, and a language metamodel 305. FIG. 4 illustrates an IMS OTMA application interface metamodel 411, with an OTMA Invocation Metamodel 421, an IMS Transaction Message Metamodel 423, a COBOL Metamodel 425, and a C Metamodel 427. FIG. 5 illustrates the flow of information from an existing application 501, through an interface 503 to an object model containing application interface metadata. This application interface metamodel is stored in the metadata repository 505, and, at an appropriate time, retrieved from the metadata repository 505, combined with a source program 507 in a generation tool 509, and used to generate a target file 511, as an XML file, i.e., an XMI instance file. CAM is highly reusable and independent of any particular tool or middleware. Development Stage. With CAM, tooling can now easily provide solutions to access enterprise applications, e.g. IMS applications. By parsing each source file and generating XML documents based on the CAM model, COBOL copybook, PL/I copybook, MFS Source, BMS Source, etc., tools can provide connector solutions to IMS, and CICS, etc. In this regard, FIG. 6 illustrates a development phase scenario where a Common Application Metamodel Rose file 601, e.g., a COBOL metamodel, a PL/I metamodel, an MFS metamodel, a BMS metamodel, or the like is read into a toolkit 603, to generate a DTD and schema for a Rose model and Java code for a Rose model 605. A source file of an application 607, as a COBOL source file, a PL/I source file, an MFS source file, a BMS source file, or the like, and the Java code for the Rose model 609 are read into an Importer 611. The importer parses the source code and provides, as output, an XMI instance file 613, i.e., XML documents, of the application source files. FIG. 7 shows a CAM metamodel for application interfaces. This Figure depicts a runtime connector 701 with invocation and transformation capabilities, interfacing with an existing application program 703 through an interface 705 containing the existing application program's interface definition, in accordance with the application interface metamodel 707. The Application Interface metadata is stored in a metadata repository 709. The flow and messaging middleware 713 invokes applications 703 through the application interfaces 705. These interfaces 705 are the access points to the applications 703 through which all input and output is connected to the middleware 713. The interfaces 705 are described in terms of the Application Interface Metamodel. Transformation processing according to the metamodel could take place in source/client applications, target applications, or a gateway. Because CAM also provides physical representation of data types and storage mapping to support data transformation in an Enterprise Application Integration environment, it enables Web services for enterprise applications. At development time CAM captures information that facilitates:
The CAM metamodel files are inputs to toolkits used to generate DTD files, XML schemas, and Java classes which represent the CAM model. Importers parse each source file (e.g. COBOL or PL/I copybook, MFS source, and BMS, etc.), and then generate XML documents (i.e. XML instance files) based on Java classes generated by the XMI/MOF2 toolkit. Run Time. At run time CAM provides information which facilitates transformation in an Enterprise Application Integration environment where it provides data type mapping between mixed languages, facilitates data translations from one language and platform domain into another. FIG. 8 illustrates the application of the Common Application Metamodel during run time. As shown, SOAP compliant XML documents 803 are received in, for example, IBM WebSphere middleware, 805, which contains an IMS Connector for Java 807, and is in contact with an XML Repository 809, containing the XMI instance files for the CAM model. The IBM WebSphere middleware sends the transformed file to the IMS system 811, which contains an instance of IMS Connect 813 and the IMS transactional application program 815. CAM facilitates connectivity between the back-end IMS application 815 and the Web file (e.g., SOAP compliant XML documents) 803. The CAM accomplishes this by using CAM model information (from repository 809) to perform data transformations from one platform to another in the mixed language environment shown. Type Descriptor Metamodel. One important feature provided by CAM is the Type Descriptor metamodel. The Type Descriptor metamodel defines the physical realization, storage mapping, and the constraints on the realization (such as justification). This metamodel provides a physical representation of individual fields of a given data structure. When supporting data transformation in an Enterprise Application Integration environment, the model provides data type mapping between mixed languages. It also facilitates data translations from one language and platform domain into another. The metamodel is used for runtime data transformation (or marshaling) with a language-specific metamodel for overall data structures and field names. 1. Common Application Metamodel for Application Interfaces The interconnection of disparate and dissimilar applications running on different software platforms, as shown in FIG. 1, with different operating systems, physical platforms, and physical realizations is accomplished through connectors that incorporate the interconnection metadata. Connectors are a central part of the application framework for e-business. The end user demand is to connect to anything interesting as quickly, and as easily, as possible. A connector is required to match the interface requirements of the adapter and the legacy application. It is also required to map between the two interfaces. Standardized metamodels for application interfaces presented herein allow reuse of information in multiple connector tools. These standardized metamodels not only reduce work to create a connector, but also reduce work needed to develop connector builder tools. The connectors built using the Common Application Metamodel of our invention provide interoperability with existing applications. The connectors support leveraging and reuse of data and business logic held within existing application systems. The job of a connector is to connect from one application system server "interface" to another. Therefore, an application-domain interface metamodel describes signatures for input and output parameters and return types for a given application system domain (e.g. IMS, MQSeries); it is not for a particular IMS or MQSeries application program. The metamodel contains both syntactic and semantic interface metadata. 1. a. End-to-End Connector Usage Using Common Application Metamodel The Common Application Metamodel (CAM) consists of meta-definitions of message signatures, independent of any particular tool or middleware. Different connector builder tools can use this information to ensure the "handshaking" between these application programs, across different tools, languages, and middleware. For example, if you have to invoke a MQSeries application, you would need to build a MQ message using data from a GUI tool and deliver it using the MQ API. Similarly, when you receive a message from the MQSeries application, you would need to get the buffer from MQSeries, parse it and then put it into a GUI tool data structure. These functions can be designed and implemented efficiently by a connector builder tool using CAM as standardized metamodels for application interfaces. CAM can be populated from many sources, including copy books, to generate HTML forms and JavaServer Page (JSP) for gathering inputs and returning outputs. An example of a connector as depicted in the previous figure is that the flow and message middleware makes a function call to an enterprise application by calling the connector which then calls the enterprise application API. The connector does language and data type mappings, for example, to translate between XML documents and COBOL input and output data structures based on CAM. Connectors and CAM provide the end-to-end integration between the middleware and the enterprise applications. Using IMS as an example. Let's say that you must pass an account number to an IMS transaction application program from your desktop to withdraw $50.00. With CAM and a connector builder tool, you will first generate an input HTML form and an output JSP; and develop a middleware code necessary to support the request. The desktop application fills the request data structure (i.e. an input HTML form) with values and calls the middleware. The middleware service code will take the data from the GUI tool, build an IMS Connect XML-formatted message, and deliver the message to the IMS gateway (i.e. IMS Connect) via TCP/IP. IMS Connect translates between the XML documents and the IMS message data structures in COBOL using the metadata definitions captured in CAM. It then in turn sends the IMS message data structures to IMS via Open Transaction Manager Access (OTMA). The IMS COBOL application program runs, and returns the output message back to the middleware service code via IMS Connect. The middleware service code gets the message and populates the output JSP page (i.e. previously generated GUI tool reply data structures) with the reply data. The transaction output data will then be presented to the user. 2. Common Application Metamodel CAM is used to describe information needed to easily integrate applications developed in common programming models with other systems. The CAM metamodel can be used for both synchronous and asynchronous invocations. 2. a. Common Application Metamodel The Common Application Metamodel depicted as follows consists of an invocation metamodel and an application-domain interface metamodel which uses language metamodels. For any given application-domain interface metamodel, it may use one or many language metamodels, but there could be zero or more invocation metamodels. The common connector metamodel is illustrated in FIG. 3. It has an Invocation Metamodel 301, an Application-Domain Interface Metamodel 303, and a Language Metamodel 305. 2. a. i. Invocation Metamodel The invocation metamodel 301 consists of one or more of the following possible metadata elements. However, for a particular invocation, it could include only one or many of the following metadata elements. Message-control information. This includes message control information, such as the message connection name, message type, sequence numbers (if any), and various flags and indicators for response, commit-confirmation, and processing options by which a client or server can control message processing to be synchronous or asynchronous, etc. The connection name can be used by the application system server to associate all input and output with a particular client. The message type specifies that the message is a response message; or that commit is complete. It can also indicate server output data to the client, or client input data to the server. Security data—This includes authentication mechanism, and security data, e.g. digital certificates, identity, user name and password, etc. It may also include authorization information to indicate whether the data can be authorized via a role based or ACL (access control list) based authorization. Transactional semantics—This will carry transaction information, e.g. local vs. global transaction; two-phase commit vs. one-phase commit, and transaction context, etc. Trace and debug—Trace and debugging information are specified as part of the metamodel. Precondition and post-condition resource—This describes application state precondition and post-condition relationships. User data—This includes any special information required by the client. It can contain any data. 2. a. ii. Application-Domain Interface Metamodel The application-domain interface metamodel 303, as discussed earlier, describes signatures for input and output parameters and return types for application system domains. 2. a, iii. Language Metamodel The language metamodel 305, e.g. COBOL metamodel, is used by enterprise application programs to define data structures (semantics) which represent connector interfaces. It is important to connector tools to show a connector developer the source language, the target language, and the mapping between the two. The CAM language metamodel also includes the declaration text in the model which is not editable (i.e. read-only model). Because the connector/adapter developer would probably prefer to see the entire COBOL data declaration, including comments and any other documentation that would help him/her understand the business role played by each field in the declaration. The language metamodel is also to support data driven impact analysis for application productivity and quality assurance. (But, it is not the intention of the CAM to support reproduction of copybooks.) The language metamodels describing connector data are listed as follows: 2. a. iv. Type Descriptor Metamodel The Type Descriptor metamodel is language neutral and defines the physical realization, endian type, storage mapping, and the constraints on the realization such as justification. This metamodel provides physical representation of individual fields of a given data structure. The Type Descriptor metamodel is to support data transformation in an Enterprise Application Integration environment to provide data types mapping between mix languages. It also facilitates data translations from one language and platform domain into another. This metamodel will be used as a recipe for runtime data transformation (or marshaling) with language specific metamodel for overall data structures and fields names. 3. An Example of Common Connector Metamodel IMS OTMA (Open Transaction Manager Access) is a transaction-based, connectionless client/server protocol within an OS/390 sysplex environment. An IMS OTMA transaction message consists of an OTMA prefix, plus message segments for input and output requests. Both input and output message segments contain llzz (i.e. length of the segment and reserved field), and application data. Only the very first input message segment will contain transaction code in front of the application data. IMS transaction application programs can be written in a variety of languages, e.g. COBOL, PL/I, C, and Java, etc. Therefore, the application data can be in any one of these languages. As shown in FIG. 4, an IMS OTMA connector metamodel 401 is composed of an invocation metamodel 403 and an IMS transaction message metamodel 405, as well as a COBOL metamodel 407 and a C metamodel 409. As depicted in FIG. 4, the invocation metamodel 401 is the OTMA prefix, and the IMS transaction message metamodel 405 is the application-domain interface metamodel for the IMS application system which uses language metamodels. Metamodels for COBOL 407 and C 409 are shown. 4. Type Descriptor Metamodel The Type Descriptor metamodel presents a language and platform independent way of describing implementation types, including arrays and structured types. This information is needed for marshaling and for connectors, which have to transform data from one language and platform domain into another. Inspections of the type model for different languages can determine the conformance possibilities for the language types. For example, a long type in Java is often identical to a binary type (computational-5) in COBOL, and if so, the types may be inter-converted without side effect. On the other hand, an alphanumeric type in COBOL is fixed in size and if mapped to a Java type, loses this property. When converted back from Java to COBOL, the COBOL truncation rules may not apply, resulting in computation anomalies. In addition, tools that mix languages in a server environment (e.g., Java and COBOL in CICS and IMS) should find it useful as a way to determine how faithfully one language can represent the types of another. Therefore, an instance of the Type Descriptor metamodel describes the physical representation of a specific data type for a particular platform and compiler. 4. a. TDLang Metamodel TDLang model solves this problem by introducing a set of parent classes from which the language models subclass. One of the parent classes in the Type Descriptor Language (TDLang) class is the Type Descriptor Language Element (TDLangElement) class, which associates directly to Type Descriptor model's Instance Type Descriptor Base (InstanceTDBase) class. The Type Descriptor Language (TDLang) invention provides three basic inheritance associations to all existing and future language models, which are the declared element, it's simple data type, and it's composed complex data type if necessary. As additional language models are added to CAM, inheritance from the TDLang model provides a seamless integration to the physical representation model. The result is a stable TD model which never needs updating as new models are added. Not only does the TDLang model provide language models with a simple set of shared points of connection to the TD model, it also serves as a set of base classes to CAM language metamodels by providing a template for model design. Having a common set of base classes benefits language model designers by providing them with a framework for their design while the consistent design across language models benefits tool implementers with a familiar interface structure. Another benefit provided by the TDLang model is that it provides application models with an interface to language models and to the TD model via an association to TDLangElement. An application program can carry data of various programming languages in its payload, TDLang provides the bridge from the anonymous data stream in the payload to a specific language representation and from the language representation to its physical layout in memory. The TDLang model solves the problem of requiring an association between the TD model and each language model. This is accomplished by providing an intermediate set of classes which all language models can inherit from. This set of super classes are shared by all subclasses to associate to the TD model, allows the user to share An instance of the InstanceTDBase class in the TD model can retrieve language specific information about the associated language model by calling the languageInstance association. With the TDLang base classes, the Type Descriptor metamodel can be used by language models as a recipe for runtime data transformation (or marshaling) without duplicating the aggregation (parent-child) associations present in the language model. The TDLang model eliminates the need to have unique associations from each language model to the Type Descriptor model (e.g., COBOL to TD and C to TD). All language models can access InstanceTDBase by calling the instanceTDBase association through the parent TDLangElement class. 4. b. Type Descriptor Metamodel This metamodel is a MOF Class instance at the M2 level. FIG. 10A shows the relationships within the Type Descriptor Metamodel, including the PlatformCompilerType 601, the InstanceTDBase 603, the ArrayTD 605, the AggregateInstanceTD 607, the Simple InstanceTD 609, and the InstanceType 611. (BaseTDType) The InstanceType 611 comprises definitions of the StringTD 613, the AddressTD 615, the NumberTD 617, (including the ExternalDecimalTD, 625, the PackedDecimalTD, 627, and the IntegerTD, 629), the FloatTD 619, the BinaryTD, 621, the DateTD, 623. FIG. 10B illustrates an enumeration of the elements of the TD's in FIG. 10A. FIG. 12 illustrates a higher level view of the TDLanguageElement and the PlatformCompilerType 601. FIG. 12 illustrates enumerations of signCoding 801, lengthEncoding 803, floatType 805, accessor 807, packedDecimalSign 809, and bitModePad 811. 4. c. Type Descriptor and Language Models The Type Descriptor model is attached to the CAM Language model by a navigable association between TDLangElement and InstanceTDBase. TDLangElement is the base language model type used to represent a declared data item, i.e., an instance of a type. InstanceTDBase is the base Type Descriptor model type used to represent the implementation-specific instance of this same declared data item. InstanceTDBase is abstract; only one of its subtypes may be instantiated. It is possible that a data item declared in a programming language may have different implementations. These differences are induced by hardware platform, operating system platform, and compiler differences. This possibility is modeled by the PlatformCompilerType model type. The association between TDLangElement and InstanceTDBase is one to one, and the association between PlatformCompilerType and InstanceTDBase is one to one. In most cases, the InstanceTDBase settings will be determined during instantiation of the language model to reflect the computing environment. It may be possible to substitute the instance of PlatformCompilerType to represent the same application running on a different platform and environment. The association between TDLangElement and InstanceTDBase is modeled in this manner to allow for extending the model to include an association between PlatformCompilerType and a new type that more fully describes the hardware platform, the system platform, and the compiler. Data element instances may be defined as repeating groups or arrays. This is modeled as a one to many associations between InstanceTDBase and the ArrayTD model type. There would be one ArrayTD instance in this association for each dimension, subscript, or independent index of the data element. These instances hold information about the bounds and accessing computations. The association is ordered in the same order as the corresponding association in the language model, and reflects the syntactic ordering of the indices as defined by the programming language. The rationale for this choice is the resulting equivalence of navigation and processing algorithms between the language model and the Type Descriptor model. Another choice, perhaps more advantageous to marshaling engines, would be to have the ordering of the indices from the smallest stride to the largest. This allows a marshaling engine to process the array in its natural storage order, assuming it is laid out in the usual contiguous fashion. A marshaling engine can compute this order by re-sorting the association targets according to the stride formulas if desired. Array information may be a complex property of the data element or of its type, and various languages and programming practices seem to fall on either side. The typedef facility of C and C++ allows the definition of some array types from typedefs, but only where the array definitions are applied to the topmost elements of typedef aggregates. For example, consider the following typedef:
This typedef can be used to create a new typedef for a fixed size array, e.g.
But it is not possible to create a new typedef from X that makes any of the subcomponents of X, e.g., D or E, into an array. This example and many others point out the unclear status of array definitions in typed languages. An InstanceTDBase type has two concrete subtypes, SimpleInstanceTD and AggregateInstanceTD. SimpleInstanceTD models data elements without subcomponents, while AggregateInstanceTD models data elements with subcomponents. To find the subcomponents of an AggregateInstanceTD, one must navigate back to the corresponding data element declaration in the CAM language model. There, the association between an aggregate type and its subcomponents may be navigated, leading to a set of subcomponent data elements, each of which has one or more corresponding instances in the Type Descriptor model. This introduces some model navigation complexity, but avoids duplicating the aggregation hierarchy in both the language and the Type Descriptor models. The additional processing complexity of traversal is not great, and considerable simplification is obtained in algorithms that would modify the model to add, delete or rearrange subcomponents in an aggregation. In addition, it is possible to traverse subcomponents of an AggregateInstanceTD by simply traversing to the next instance of SimpleInstanceTD in the XMI document. A SimpleInstanceTD model type is also associated one to one with a BaseTD model type. The BaseTD model type holds implementation information that is common for all data elements of the same language type. The information that describes a 32-bit signed binary integer on a specific hardware/software platform is thus instantiated only once in a given model instantiation, no matter how many data elements may be declared with this type. Attributes associated to particular data types are represented as specialization classes of BaseTD. One may contemplate an association between TDLangClassifier and BaseTD matching the association between TDLangElement and InstanceTDBase. However, this is problematic in that constructions that the language regards as simple types (e.g., strings) may not map directly to simple hardware/software types. Rather than introduce more mechanisms into the Type Descriptor model to describe string implementations, a specialization of BaseTD is utilized which describes the common string implementations. Various attributes in the TypeDescriptor model are suffixed with the string "formula." These attributes contain information that may in some cases be impossible to compute without access to data created only at run-time. An example would be a Java string whose length is determined only at runtime. Another example is the current upper bound of a variable-sized array or the offset to an element that follows another element whose size is only known at run-time. Such information could be included as values in a model instance, but this would require a model instance for each run-time instance, and would mean that the model could only be constructed at run-time, requiring the model definition to include factories and other apparatus to create model instances at run-time. A model that can be constructed from platform and compiler knowledge is much more useful, and the formulas provide a way to define concrete values when the run-time information is available. These formulas may be interpreted by marshaling engines, or they may be used to generate marshaling code, which is loaded and executed by the marshaling engine on demand. 4. d. Formulas As used in connection with formulas, "field" refers to a component of a language data structure described by the Type Descriptor model, while "attribute" denotes part of the model, and has a value representing a "property" of the field. Thus the value of a field means a run-time value in a particular instance of a language data structure, whereas the value of an attribute is part of the description of a field in a language data structure, applies to all instances of the data structure, and is determined when the data structure is modeled. For most attributes in an instance of the Type Descriptor model, the value of the attribute is known when the instance is built, because the properties of the fields being described, such as size and offset within the data structure, are invariant. But if a field in a data structure is defined using the COBOL OCCURS DEPENDING ON construct or the PL/I Refer construct, then some properties of the field (and properties of other fields that depend on that field's value) cannot be determined when the model instance is built. Properties that can be defined using these language constructs are string lengths and array bounds. A property that could indirectly depend on these language constructs is the offset of a field within a structure, if the field follows a variable-size field. In order to handle these language constructs, properties of a field that could depend on these constructs (and thus the values of the corresponding attributes), are defined with strings that specify a formula that can be evaluated when the model is used. However, if a property of a field is known when the model instance is built, then the attribute formula simply specifies an integer value. For example, if a string has length 17, then the formula for its length is "17". The formulas mentioned above are limited to the following:
The mod function is defined as mod(x,y)=r where r is the smallest non-negative integer such that x-r is evenly divisible by y. So mod(7,4) is 3, but mod(-7,4) is 1. If y is a power of 2, then mod(x,y) is equal to the bitwise-and of x and y-1. The val function returns the value of a field described by the model. The val function takes one or more arguments, and the first argument refers to the level-1 data structure containing the field, and must be either: The subsequent arguments are integers that the specify the ordinal number within its substructure of the (sub)field that should be de-referenced. By default, COBOL data fields within a structure are not aligned on type-specific boundaries in storage. For example, the "natural" alignment for a four-byte integer is a full-word storage boundary. Such alignment can be specified by using the SYNCHRONIZED clause on the declaration. Otherwise, data fields start immediately after the end of the preceding field in the structure. Since COBOL does not have bit data, fields always start on a whole byte boundary. 4. d. i) Formula Examples for COBOL The examples use the proposed inline comment indicator "*>" from the draft standard. It is not yet legal COBOL usage. 1. Consider the following data description:
The offset of Model is straightforward, and is given by the formula "36". So is that of claims, which is "112". But because the array claim can occur a variable number of times, the structure History is a variable-size field. Thus the offset of Price, which immediately follows claims, requires a more complicated formula, involving the array stride (the distance between successive elements along a specific dimension). For claim, there is only one dimension, and the formula for its stride is "154". Thus the formula for the offset of Price is: The first argument of the val function is 1, meaning that the field containing the value at run-time, NumClaims, is in the same level-1 structure, Used-Car, as the field, Price, whose offset is specified by the formula. The other two arguments are 2 and 2. The first 2 refers to the second immediate subcomponent, History, of Used-Car. The second 2 means that the field to be de-referenced is the second component of History, that is, NumClaims. If the OCCURS DEPENDING ON object were in a separate structure, the third subcomponent of level-1 structure Car-Data, say, then the val function would be "val(Car-Data,3)". COBOL structure mapping is top-down, although the direction doesn't make any difference unless the SYNCHRONIZED clause is specified on the data declaration. Specifying SYNCHRONIZED forces alignment of individual fields on their natural boundaries, and thus introduces "gaps" into the structure mapping. Consider the following data structure, which is identical to the previous example, except for the SYNCHRONIZED clause:
To position the binary fields on their appropriate half-word or full-word storage boundaries, COBOL introduces padding, known as "slack bytes", into the structure. Working top-down, this padding is introduced immediately before the field needing alignment. So there is one byte of padding between Mileage and NumClaims. For an array, such as claim, COBOL not only adjusts the padding within an element, but also the alignment of each element of the array. In the example, the first occurrence of claim starts one byte past a full-word boundary. Because the field claimNo is an exact number of full-words long, it ends one byte past a full-word boundary, so COBOL inserts three bytes of padding immediately before the binary full-word integer ClaimAmt. And to align subsequent occurrences, so that they too start one byte past a full-word boundary like the first, and can thus have an identical configuration, COBOL adds three bytes of padding at the end of each occurrence. Finally, after padding, each occurrence of claim (starts and) ends one byte past a full-word boundary, so COBOL puts three bytes of padding before the binary field Price. As a result of all these extra bytes, the formula for the offset of Price has changed considerably from the unaligned example, and is now: There are several differences between the OCCURS DEPENDING ON construct and PL/I's Refer option. Storage for COBOL structures is always allocated at the maximum size, whereas PL/I structures are allocated at the actual size specified by the Refer option. It is legal and usual to change the number of occurrences in a particular instance of a variable-size COBOL array, and this has the effect of changing the location and offset of any fields that follow the array. For PL/I, the value of the Refer object of a particular instance of a structure is intended to be fixed during execution Thus aligned objects following a variable-size field are always correctly aligned for each instance of the structure, because the amount of padding is computed uniquely for each instance, as determined by the Refer option. By contrast, the amount of padding for any aligned fields following a variable-size COBOL array is computed assuming the maximum array size, and is fixed at compile time. If the array is smaller than its maximum size, then the alignment will typically be incorrect. For instance in this example:
COBOL inserts one byte between c and d. The alignment of d is therefore correct for only two values of b, the maximum, 5, and 2. As noted above, the formulas describe not only offsets of fields within a structure, but also properties of arrays, such as bounds and strides. COBOL does not have true multi-dimensional arrays, although element references do use multiple subscripts. Instead, COBOL has arrays of arrays, as in the following simple example:
The program can refer to slices of the array by subscripting the higher-level container fields, for example, d1(2) or d2(3, 4), but the normal kind of reference is to the low-level elements using the full sequence of subscripts, for instance, el(4, 5, 6). To locate element el(m, n, o) using these stride formulas, one would take the address of a and add to it (m-1)*168+(n-1)*28+(o-1)*4. For COBOL, the lower bound of an array subscript is always 1. That is, the first element is always element(1), and vice versa. Needless to say, any dimension of the array can have the OCCURS DEPENDING ON clause, and the array can be followed by other fields, which complicates the formulas a lot. Consider the example:
Computing the address of a particular element still involves the stride formulas, but these are no longer simple integers. The address of element el(m, n, o) in the above example is given by taking the address of a and adding to it: Similarly, these stride formulas are used in the formula for the offset of b: 4. e. Type Descriptor Specification 4. e TDLang Metamodel Specification The TDLang metamodel serves as base classes to CAM language metamodels by providing a layer of abstraction between the Type Descriptor metamodel and any CAM language metamodel, including higher level languages. All TDLang classes are abstract and common to all the CAM language metamodels. All associations between TDLang classes are marked as "volatile," "transient," or "derived" to reflect that the association is derived from the language metamodel. The TDLang model does not provide any function on its own, but it is the type target for the association from the Type Descriptor metamodel to the language metamodels. The Type Descriptor metamodel is a language-independent model used to convert a datatype into its expected language-specific type. This is accomplished by associating the base class, InstanceTDBase, to TDLangElement. As the parent class of all language model element classes, TDLangElement allows Type Descriptor to access the information regarding all language-specific data types for marshaling. Type Descriptor's association to the language elements via TDLangElement also provides the aggregate associations captured in the language models (i.e., the ComposedTypes associations for parent-child relationships). This ability to navigate up to parent or sibling elements is required to determine the value of various formula-based attributes in the Type Descriptor model. For example, in order for a child element C to determine it's offset formula value, it will need to navigate up to element B to find B's offset value and allocation size. The result of the adding element B's offset value and allocation size is element C's offset value. Caching and navigation are two approaches to determining the parent value, but the navigation approach is superior to the cache approach in two respects. First, contents in the cache may become invalid as subscript values change from one child element to the next during runtime, resulting inaccurate cache data. Second, to fix this problem the marshaller will need to recalculate the values of each element at runtime, resulting in a decrease in performance. In the case when we apply navigation from the Type Descriptor model to the language models, we are able to quickly go from the child to the parent element to determine the formula information on a real-time basis. The navigation approach provides accurate values quickly without the need to perform recalculations. With the TDLang base classes, the Type Descriptor metamodel can be used as a recipe for runtime data transformation (or marshaling) with the language-specific metamodel for overall data structures and field names, without duplicating the aggregation (parent-child) associations present in the language model. The TDLang model eliminates the need to have unique associations from each language model to the Type Descriptor model (e.g., cobolToTD and cToTD). All language models can access InstanceTDBase by calling the instanceTDBase association through the parent TDLangElement class. FIG. 13 illustrates the TDLang Metamodel. TDLang connects language models to the Type Descriptor Model. The TDLang metamodel acts as a generic placeholder for a variety of language models to inherit from. Following the diagram is a brief explanation of what each class represents. TDLangClassifier TDLangClassifier is the parent class of all CAM language Classifier classes and TDLangComposedType. TDLangClassifier represents all data types of a CAM language metamodel. Since TDLangClassifier is abstract, it is implemented by language specific classifier classes. Sample subclasses of TDLangClassifier include String, integer, character, float, and addressable pointers for each language model. Subclasses of TDLangClassifier provide the type information declared by TDLangElements. tdLangTypedElement: TDLangElement Used by the classifier associated to an element within a ComposedType to navigate back to the parent ComposedType. TDLangComposedType TDLangComposedType represents the type of data with subcomponents. TDLangComposedType is the parent class of all CAM language ComposedTypes. Since TDLangComposedType is abstract, it is implemented by language specific composed classes. Sample subclasses of TDLangComposedType are COBOL 01-level data declarations with nested elements, C structs and unions, and PL/I structures, unions, or elementary variables and arrays. tdLangElement: TDLangElement Used by TDLangComposedTypes to get a list of TDLangElements contained within the composed type. TDLangElement TDLangElement is the most basic, fundamental core class of the TDLang Metamodel. TDLangeElement is the parent class of all CAM language element classes. TDLangElement represents typed unit elements declared in a copybook or source code, that is typed data elements without a subcomponent. Since TDLangElement is abstract, it is implemented by language specific element classes. Sample subclasses of TDLangElement are COBOLElement, CTypedElement, and PLIElement. tdLangGroup: TDLangComposedType Used by TDLangElement to determine the TDLangComposedType it belongs to. tdLangSharedType: TDLangClassifier Used by TDLangElement to determine the type associated to the element. TDLangModelElement TDLangModelElement is the parent class of all TDLang classes. TDLangModelElement represents a combination of an element and its declared data type. Since elements and user-defined types may have associated names, TDLangModelElement has a name attribute that can be separately instantiated by TDLangElement and TDLangClassifier. 4. f. Type Descriptor Metamodel Specification The Type Descriptor package defines a model for describing the physical implementation of a data item type. This model is language neutral and can be used to describe the types of many languages. Inspections of the type model for different languages can determine the conformance possibilities for the language types. For example, a long type in Java is often identical to a binary type in COBOL, and if so, the types may be interconverted without side effect. On the other hand, an alphanumeric type in COBOL is fixed in size and if mapped to a Java type, will lose this property. When converted back from Java to COBOL, the COBOL truncation rules may not apply, resulting in computation anomalies. AggregateInstanceTD. For each instance of an aggregate, there is an instance of this class. To find the children of this aggregate, one must navigate the associations back to language Classifier then downcast to language Composed Type and follow the association to its children.
ArrayTD. ArrayTD holds information for array types.
InstanceTDBase. InstanceTD has instances for each declared variable and structure element. To find the parent of any instance (if it has one) one must navigate the associations back to TDLangElement, follow the association to TDLangClassifier to locate the parent, then follow the associations back into the TypeDescriptor model.
PlatformCompilerType. A specific data type for a particular platform and compiler. NOTE: There needs to be some way to identify the platform and compiler. This class can be specialized or have an attribute, or be simplified by putting an attribute on InstanceTDBase. Public Attributes:
SimpleInstanceTD. An instance of a Simple type in the language model. Derived from InstanceTDBase NumberTD
FloatTD
1 StringTD
AddressTD Type to represent pointers/addresses Rationale for this class: Addresses should be considered separate from NumberTD class because some languages on certain machines (e.g., IBM 400) represent addresses with additional information, such as permission type (which is not represented in NumberTD class) Derived from BaseTD Public Attributes: permission: String Specifies the permission for this address. Used primarily for AS/400 systems. bitModePad: enumeration Specifies the number of bits for this address. Used to calculate padding. BaseTD
Stereotypes bitModePad
signCoding
floatType
accessor
packedDecimalSign
COBOLSimpleType
COBOLElement
COBOLVariableLengthArray
Derived from COBOLFixedLengthArray Public Attributes: minUpper: Integer
COBOLRedefiningElement
COBOLComposedType
Derived from COBOLClassifier, TDLangComposedType COBOL88Element
Public Attributes: name: String
COBOL88ElementValue
COBOLAlphaNumericType
COBOLNumericEditedType
COBOLNumericType
COBOL66Element
COBOLFixedLengthArray
COBOLDBCSType
COBOLAlphaNumericEditedType
COBOLClassifier
COBOLAlphabeticType
COBOLObjectReferenceType
COBOLSourceText
COBOLUnicodeType
COBOLInternalFloatType
COBOLExternalFloatType
COBOLAddressingType
COBOLElementInitialValue
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
