US7836202B2 - Communication system integrating a plurality of middleware and implementing sophisticated paths for data flow - Google Patents
Communication system integrating a plurality of middleware and implementing sophisticated paths for data flow Download PDFInfo
- Publication number
- US7836202B2 US7836202B2 US11/307,040 US30704006A US7836202B2 US 7836202 B2 US7836202 B2 US 7836202B2 US 30704006 A US30704006 A US 30704006A US 7836202 B2 US7836202 B2 US 7836202B2
- Authority
- US
- United States
- Prior art keywords
- middleware
- port
- data
- message
- ports
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related, expires
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/541—Interprogram communication via adapters, e.g. between incompatible applications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
- H04L67/63—Routing a service request depending on the request content or context
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/18—Multiprotocol handlers, e.g. single devices capable of handling multiple protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
Definitions
- the present invention relates generally to the field of middleware integration. More specifically, the present invention is related to middleware integration without introducing canonical data formats, message formats, or protocols.
- a canonical data format typically introduces at least one of the following: a canonical data format; a canonical message format; a canonical protocol.
- canonical would be understood by one of ordinary skill to include, among other features, the making of a physical copy of the information in the canonical format.
- middleware bridge For example, some prior techniques have introduced a middleware bridge. One side of the bridge communicates using, say, middleware A; and the other side uses, say, middleware B. To allow A to communicate with B (in one direction), a mapping from A to the canonical data format has to be defined, and also a mapping from this canonical format to B. To communicate in the other direction, requires a mapping from B to the canonical format, and a mapping from the canonical format to A.
- a new middleware say, C
- C a new mapping can be introduced from C to the canonical format, and from the canonical format to C. Combined with the previous mappings, this allows: two-way communication between A to C; two-way communication between B and C; and of course two-way communication between A and B.
- the number of mappings that need to be introduced is O(n+n), where n is the number of middleware products/standards that need to be allowed interoperate. It should be noted that O(x) is “of order x” and O(n 2 ) is substantially larger than O(n), especially as the value of n increases. Comparing O(n) and O(n+n) is more difficult. At first sight, O(n+n) is larger than O(n), but the proper comparison of these depends on the details.
- a simple cost model for O(n) is W*n+C 1 , where W is the cost for each element of n and C is some constant cost.
- W is the cost for each element of n and C is some constant cost.
- One O(n) approach to integration may cost W 1 *n+C 1 .
- n may cost W 2 *(n+n)+C 2 . Nevertheless, the former may be larger than the latter because of the higher values of W 1 and/or C 1 , compared to W 2 and/or C 2 . It should also be noted that the value n must also include variations in the selected middleware. That is, it needs to be increased if a middleware can support two or more data formats, message formats and/or protocols.
- a disadvantage of this approach is that to communicate, say, from A and B, the data must first be translated from A into the canonical format and then from the canonical format to B.
- a canonical middleware is used to integrate middleware.
- middleware A sends a message to middleware B
- the data is transformed into the data format of a canonical middleware, and the message is transmitted using that canonical middleware's message format and protocol.
- a mapping from C to the canonical middleware and from the canonical middleware to C must be defined in order to facilitate two-way communication to/from C.
- the number of mappings is O(n+n), where n is the number of middleware products/standards. Again, the value n must include variations in the selected middleware.
- a disadvantage of this approach is that to communicate, say, from A and B, that data and messages need to be translated from the data and message formats and protocols of A into the canonical data and message formats and protocols, and from these to the data and message formats and protocols of B.
- middleware Another approach to the integration of middleware is to write direct integration connectors between the various middlewares of interest. For example, if middleware A, B and C are of interest, then connections A to B, B to A, A to C, C to A, B to C and C to B could be written (or whatever subset of these that is required).
- a disadvantage of this approach is that the number of connections that is required is O(n 2 ).
- Embodiments of the present invention relate to an integration product that has some special support for the integration of multiple middleware.
- the integration product is often referred to as “Artix” or some variant thereof.
- the use of the term “Artix” is for convenience and is not intended to limit the embodiments of the present invention to the specific features of a particular software product, a particular version of a software application, or a suite of software applications that now, or in the future, have been marketed or developed under the label “Artix”.
- the present invention provides for a communication system integrating a plurality of middleware, wherein the communication system comprises: (a) a plurality of configurable in-ports and out-ports facilitating communication between middleware; (b) a configurator configuring said in-ports and said out-ports corresponding to specific middleware, each in-port and each out-port configured based on a binding and a transport; and (c) one or more intermediary elements, wherein said configured in-ports, said configured out-ports, and said intermediary elements form one or more paths over which data is moved, each of said intermediary elements performing any of, or a combination of, the following: propagation of transaction information, transformation of data, load balancing, fault tolerance, session management, orchestration, security, or control of transaction boundaries, and wherein data is moved via along said paths.
- the present invention also provides for a server-side communication system integrating a plurality of middleware, wherein the communication system comprises: (a) a plurality of configurable in-ports facilitating communication between middleware; (b) a configurator configuring at least one in-port corresponding to a specific middleware based on a binding and a transport; (c) one or more intermediary elements, wherein said configured in-ports and said intermediary elements form one or more paths over which data is moved from said in-ports to server code, each of said intermediary elements performing any of, or a combination of, the following: propagation of transaction information, transformation of data, load balancing, fault tolerance, session management, orchestration, security, or control of transaction boundaries.
- the present invention also provides for a client-side communication system integrating a plurality of middleware, wherein the communication system comprises: (a) a plurality of configurable out-ports facilitating communication between middleware; (b) a configurator configuring at least one out-port corresponding to specific middleware based on a binding and a transport; (c) one or more intermediary elements, wherein said configured out-ports and said intermediary elements form one or more paths over which data is moved from client code to said out-ports, each of said intermediary elements performing any of, or a combination of, the following: propagation of transaction information, transformation of data, load balancing, fault tolerance, session management, orchestration, security, or control of transaction boundaries.
- the paths are chosen for moving data based on any of, or a combination of, the following: size of message, operation name in runtime data, availability of final destination of a message, availability of some or all of the entities between said communication device and final destination of a message, port number of an incoming message, operation name in an incoming message, content of incoming message, fan-out routing to send incoming message along multiple paths, or failover routing wherein messages are sent on an available path.
- the operation name is used to identify an optimal path among a plurality of paths or is used to decide the type of processing.
- the present invention comprises a plurality of intermediary elements, with a first intermediary element determining if one or more later intermediary elements in a path is to receive data based on any of, or a combination of, the following: size of message, operation name in runtime data, availability of final destination of a message, availability of some or all of the entities between said communication device and final destination of a message, port number of an incoming message, operation name in an incoming message, content of incoming message, fan-out routing to send incoming message to one or more later intermediary elements, or failover routing wherein a remainder of said intermediary elements to pass data to is based on availability.
- port and operation routing can be mixed; port, operation and content routing can be mixed; failover and fan out can be mixed; failover and content can be mixed.
- paths are implemented using interceptor chains on a technology such as ART.
- a path may also contain other elements such as: transformers, runtime-routers, load-balancing elements, fault tolerance elements, “ility” elements, session management elements, orchestration controllers (for example, to implement BPEL), and so on.
- a path may also contain user-supplied elements (such as those to: enhance security; propagate transaction information and/or control transaction boundaries; and so on).
- Interceptors provide an efficient policy-enforcement mechanism, but also encapsulate certain technical artifacts from the application layer. This is because middleware specific behavior can be contained in the interceptors. Interceptors function at either the request level or the transport level, which provides different views of the request context that the interceptor manipulates.
- the present invention integrates middleware components. Different parts of an enterprise's overall IT system use different middleware products/standards, forming middleware islands. Within a middleware island, the chosen middleware is used to integrate applications and parts of applications. However, there are challenges in communicating at an appropriate level between these islands, including: the ability to send messages between these islands (between applications running in different islands; and some times this can be viewed as being between processes running in different islands); making it easy to send these messages; higher level facilities (“ilities”) such as security and transactions; and the management of a system made up of more than one island.
- One aspect of the present invention is that it integrates multiple middleware islands in the same or in different enterprises.
- Artix can integrate often use different formats for the data that they transmit, different message formats to hold this data, and/or different protocols to transmit these messages.
- Artix integrates middleware islands without introducing common/shared (sometimes we use the term canonical) data formats, message formats or protocols. Therefore, there is no need to introduce a canonical data format, canonical message format or canonical protocol when Artix is used to:
- Artix consists of the Artix Bus (which is sometimes enhanced to become the Artix Runtime Bus), and other components.
- Artix uses APIs rather than a canonical data format, canonical message format or canonical protocol.
- One of the advantages of the way in which Artix supports interoperability of middleware is that, despite the ability to do this without a canonical data format, message format or protocol, the amount of work required to support n middleware products/standards can be O(n) rather than O(n 2 ).
- Artix involves fewer transformations between data formats, message formats and/or protocols. For example, to communicate, say, from A to B, data does not have to be transformed from A's format into a canonical data format and then from the canonical format into B's format. Instead, one transformation is all that is required: from A's format to B's format. Reducing the number of transformations give performance and other advantages.
- Artix may be thought to use a design-time canonical format: a canonical format for interface definitions.
- WSDL is used as the canonical format for interfaces.
- XML Schema is used as the canonical definition for data that is used by these interfaces as defined in the canonical format.
- the configurator defines mappings between the canonical interface formats (aka the logical contract), and the binding for a particular middleware interaction (aka the physical contract).
- Artix avoids canonicalization of data at runtime.
- the Artix does not utilize traditional “canonicalization” in that a copy of information is not created during runtime.
- middleware can refer to almost any software that generates messages to transport to a recipient.
- FIG. 1 illustrates an Artix Bus (or the Artix runtime bus) configured with ports to middlewares A, B and C.
- FIG. 2 illustrates sophisticated ports for data transformation and runtime routing.
- FIG. 3 illustrates an in-port/out-port connected to a middleware and an API.
- the configuration choices are of order O(n2), which increases the choices for the person configuring Artix.
- O(n) the work to extend Artix to support n middleware.
- FIG. 1 shows an Artix Bus (sometimes called the Artix runtime bus) configured with some ports to middlewares A, B and C. Both an in-port and an out-port are included in the case of middleware A and C, and only an out-port is shown for middleware B. Also shown are two paths, in this case from A to B, and from A to C. These paths indicate that this Artix Bus can accept calls from middleware A and route them to middlewares B or C. Two in-ports are shown for A, but the two paths may also be able to share a single in-port for A.
- Artix Bus sometimes called the Artix runtime bus
- the ART configuration data lists items such as when, how and from where to load the ports (e.g., what DLLs they are stored in).
- the ART configuration also contains information about the threading configuration (the threading configuration can include items such as: for a client, creating a thread per call or per target entity, or having a thread pool; for a server, creating a thread per call, or per target entity, or having a thread pool; there are many such configurations that would be known to one of ordinary skill in this field), implementation interceptors (that enforce policies but should not be visible in the WSDL), and bootstrap information such as pointers to the WSDL that contains the definition of the ports (both physically and logically) along with the routing table.
- An in-port is a connection between a given middleware and the APIs of the Artix Bus that can handle messages (here and elsewhere, the term message is used, but various middleware uses different terminology, such as operation call, for this core concept) coming from that middleware to the Artix Bus.
- An out-port is a connection between a given middleware and the APIs of the Artix Bus that can handle messages going from the Artix Bus to that middleware.
- One of the benefits of Artix is there can be partial support for a middleware.
- a middleware there can be an in-port and no out-port, or an out-port and no in-port.
- An Artix Bus has a full port for a given middleware if it has both an in-port and an out-port for it.
- some of the ports shown in FIG. 1 may not be configured.
- the in-port for C may be missing.
- New ports could also be added, such as an out-port for A.
- connector or connection to refer to an port.
- route to refer to paths.
- a port is made up of a binding and a transport.
- the binding deals with the data formatting (e.g., fixed, SOAP, tagged, and so on) and other aspects
- the transport deals with the communications protocol or middleware (e.g., HTTP, MQ, TCP/IP, IIOP, and so on) and other aspects.
- the communications protocol or middleware e.g., HTTP, MQ, TCP/IP, IIOP, and so on
- a binding for fixed format message can be combined with, say, the IIOP protocol/middleware to give one port; while another port can be got from the combination of the fixed binding and the MQ protocol/middleware.
- more sophisticated paths can be configured to include steps such as transformation (for example, of the data, the data format or operations) and routing based on runtime data (such as the content of a message, or some table that can be updated at runtime).
- steps such as transformation (for example, of the data, the data format or operations) and routing based on runtime data (such as the content of a message, or some table that can be updated at runtime).
- runtime data such as the content of a message, or some table that can be updated at runtime.
- FIG. 2 Two examples of these are shown in FIG. 2 (a path from A to B or C, with runtime routing that decides whether to route messages from A to B or from A to C; a path from A to C that includes an intermediary element).
- FIG. 3 illustrates such a connection between an in-port (or out-port), middleware, and an API.
- a number of approaches can be taken to routing, including the following.
- the router is a separate component of Artix; it does not have to be configured to be present at all, thus simplifying the Artix installation and removing overhead.
- paths are implemented using interceptor chains on a technology such as ART.
- a path may also contain other elements such as: transformers, runtime-routers, load-balancing elements, fault tolerance elements, “ility” elements, session management elements, orchestration controllers (for example, to implement BPEL), and so on.
- a path may also contain user-supplied elements (such as those to: enhance security; propagate transaction information and/or control transaction boundaries; and so on).
- Interceptors provide an efficient policy-enforcement mechanism, but also encapsulate certain technical artifacts from the application layer. This is because middleware specific behaviour can be contained in the interceptors. Interceptors function at either the request level or the transport level, which provides different views of the request context that the interceptor manipulates.
- Request level interceptors are able to use the XMLSchema APIs to access the request payload as discrete structures and elements, which allows them to make decisions based upon, or to alter the content of the request.
- the XMLSchema API system prevents them from being tied to the syntax of a particular message format, without having to physically canonicalize the request payload.
- Message level interceptors act at the byte-stream view of the request payload. This allows them to perform bulk operations such as hashing, code-page conversion, compression, encryption, encoding, and digital signatures.
- interceptor chains are assembled by consulting the annotations in the service contract (e.g., extensors in the WSDL), plus non-contractual implementation strategy details (e.g., the ART configuration), but the chains can be expanded or reordered programmatically during initial assembly of the chain.
- annotations in the service contract e.g., extensors in the WSDL
- non-contractual implementation strategy details e.g., the ART configuration
- the intermediary element performs any of, or a combination of, the following: propagation of transaction information, transformation of data, load balancing, fault tolerance, session management, orchestration, security, or control of transaction boundaries.
- Artix can be used in the following five ways (and these uses can be combined):
- a switch can be in-process with one of the processes that are communicating, or in a different process sitting logically in the middle between some communicating processes.
- the switch can operate in a number of ways, including:
- Artix provides such applications (both clients and servers, as explained above) with APIs that allow them to be written independently of the middleware or middlewares that are actually underneath.
- a client application can use the Artix APIs to send messages, without concern for which the middleware or middlewares are actually used to transmit its messages and accept replies/messages coming to it.
- the middleware or middlewares can be changed by reconfiguring Artix.
- a server application can use Artix APIs to receive message, without concern for the middleware or middlewares that are actually used to accept its messages and send replies/messages.
- the API used by clients and servers are model driven. They contain no artifacts that reveal the underlying middleware.
- middleware products offer APIs that reveal the middleware in use.
- CORBA functions for example, have extra parameters that are of special CORBA types, and hence reveal that the functions are making use of CORBA.
- the Artix APIs are generated from the contracts (defined, for example, in WSDL, or defined in some middleware's native interface definition mechanism and understood by Artix).
- Artix APIs in JAVA adhere to the JAX-RPC standard; Artix APIs in C++ adhere to the corresponding Object Management Group's (OMG) C++ standard.
- OMG Object Management Group's
- the present invention provides for a communication system integrating a plurality of middleware, wherein the communication system comprises: (a) a plurality of configurable in-ports and out-ports facilitating communication between middleware; (b) a configurator configuring said in-ports and said out-ports corresponding to specific middleware, each in-port and each out-port configured based on a binding and a transport; and (c) one or more intermediary elements, wherein said configured in-ports, said configured out-ports, and said intermediary elements form one or more paths over which data is moved, each of said intermediary elements performing any of, or a combination of, the following: propagation of transaction information, transformation of data, load balancing, fault tolerance, session management, orchestration, security, or control of transaction boundaries.
- the present invention also provides for a server-side communication system integrating a plurality of middleware, wherein the communication system comprises: (a) a plurality of configurable in-ports facilitating communication between middleware; (b) a configurator configuring at least one in-port corresponding to a specific middleware based on a binding and a transport; (c) one or more intermediary elements, wherein said configured in-ports and said intermediary elements form one or more paths over which data is moved from said in-ports to server code, each of said intermediary elements performing any of, or a combination of, the following: propagation of transaction information, transformation of data, load balancing, fault tolerance, session management, orchestration, security, or control of transaction boundaries, and wherein data is moved via along said paths.
- the present invention also provides for a client-side communication system integrating a plurality of middleware, wherein the communication system comprises: (a) a plurality of configurable out-ports facilitating communication between middleware; (b) a configurator configuring at least one out-port corresponding to specific middleware based on a binding and a transport; (c) one or more intermediary elements, wherein said configured in-ports and said intermediary elements form one or more paths over which data is moved from client code to said out-ports, each of said intermediary elements performing any of, or a combination of, the following: propagation of transaction information, transformation of data, load balancing, fault tolerance, session management, orchestration, security, or control of transaction boundaries, and wherein data is moved via along said paths.
- the paths are chosen for moving data based on any of, or a combination of, the following: size of message, operation name in runtime data, availability of final destination of a message, availability of some or all of the entities between said communication device and final destination of a message, port number of an incoming message, operation name in an incoming message, content of incoming message, fan-out routing to send incoming message along multiple paths, or failover routing wherein messages are sent on an available path.
- the operation name is used to identify an optimal path among a plurality of paths or is used to decide the type of processing.
- the present invention comprises a plurality of intermediary elements, with a first intermediary element determining if one or more later intermediary elements in a path is to receive data based on any of, or a combination of, the following: size of message, operation name in runtime data, availability of final destination of a message, availability of some or all of the entities between said communication device and final destination of a message, port number of an incoming message, operation name in an incoming message, content of incoming message, fan-out routing to send incoming message to one or more later intermediary elements, or failover routing wherein a remainder of said intermediary elements to pass data to is based on availability.
- the Artix Bus can be used to pass data from an in-port to an out-port (and hence, for example, from one middleware to another). It can directly pass the data across, or it can perform certain actions on the data, such as transforming it in various ways.
- the Artix Bus can also be configured to route data in various different ways: for example, it can have a routing table that informs it of what out-port it should send certain data to.
- the Artix Bus can be configured with one in-port, and this can be in-process with either a client or a server.
- the Artix Bus gets data from an in-port and passes it to an out-port. All of the data in an incoming message can be passed from an in-port to an out-port in one step; or the data can be passed across in a number of parts, one or more parts at a time.
- a common way to achieve the latter is for the Artix Bus to pass one top-level element of a message at a time from an in-port to an out-port; yet another way is for it to pass single data elements, or small groups of these, at a time.
- the Artix Bus makes a call to an in-port to get (to pull) one element of data, and then it makes a call on the out-port to push that data element to it.
- this data flow could be implemented in other ways, for example: the data could be passed from the in-port to the Artix Bus by the former making a call on the latter; and also that the data could be passed from the Artix Bus to an out-port by the latter calling the former.
- a pull-push model is used to pass data from an in-port to the Artix Bus.
- the Artix Bus makes a pull call on the in-port to get a data element; but if this is a complex data element then the in-port makes one or more push calls on the Artix Bus to pass it the constituent data elements of the overall complex data element.
- a push-pull model is used to pass data from the Artix Bus to an out-port.
- the Artix Bus makes a push call on the out-port to pass it a data element; but if this is a complex data element then the out-port makes one or more pull calls on the Artix Bus to get the constituent data elements of the overall complex data element.
- the Artix Bus does not hold the data in a canonical format. There are a number of reasons for this:
- the Artix bus can pass data from an in-port to an out-port one part at a time.
- the Artix bus does not have to define rules for how a set of data elements (or parts) are stored to make up a message or affect performance and efficiency by making copies of the message.
- the Artix bus does not have to deal with issues, such as byte alignment or padding, for example, that are necessary if canonical message formats are used.
- the “parts” of data that are accessed using the appropriate APIs can have different levels of granularities and may refer to, for example, a string, an integer, some more complex data type, or the entire message.
- applications utilizing the Artix bus are able to accept an incoming message from an underlying middleware without being concerned with the message format, data format, or protocol used to receive the data. Instead, the application receives the message independently of the underlying middleware and handles the message data as a list of data objects that are individually accessible through an API.
- an in-port may enter a text-based data in UTF-8 format; a first intermediary may request it in Unicode format, at which time the encapsulating object may store the data in both UTF-8 and Unicode formats; subsequent intermediaries and the out-port along the path can request the data in any format, and if the encapsulating object already has the data in the correct format then it can deliver it without further conversion.
- This can work for any number of encodings.
- Encapsulating objects may also be configured to dispose of unwanted encodings: this is important for large text-based data, in order to avoid the wastage of memory.
- One method to achieve this is for an encapsulating object to be given a hint that a particular encoding is not needed further along a given path.
- One way to facilitate this is for each element of a path to list the encoding types that it needs; and for a configuration sub-system of the Artix bus to make this information available to the encapsulating objects, or to make calls to the encapsulating objects to let them know what data is required and what can be discarded.
- Each in-port has a listener that recognizes the arrival of incoming messages. It is important for each to the operation of Artix that the “operation” corresponding to each message is recognized.
- An operation is an abstract notion, corresponding to the notion of an operation in web service's WSDL.
- an operation's identifier e.g., its name
- middleware systems call this the subject, some call it the method name
- an operation's identifier can be used to determine what other data is contained in a message.
- One example operation may have two integer parts (/parameters), while another may have many more and very complex parts.
- An in-port can use a number of mechanisms for determining the operation corresponding to an incoming message, including the following amongst others:
- a minimal degree of parsing is advantageous as it speeds up the determination of the operation. Where parts of a message need to be parsed, the parsed data can be retained by Artix so that it is more cheaply available to code that handles the message once the operation has been determined.
- Artix can handle a message without parsing/processing the payload; in other cases, it needs to do some degree of parsing/processing.
- Artix can pass the message from an in-port to an out-port (passing through any intermediaries that are configured along the path) without further parsing/processing, and in some cases without having to make a copy. This would arise for example when an in-port receives a SOAP over HTTP message and the out-port is to send this as a SOAP over MQ message.
- Artix can pass that part or parts from an in-port to an out-port (passing through any intermediaries that are configured along the path) without any further parsing/processing, and in some cases without having to make a copy.
- Artix may not even need to know the operation that is involved. On the other hand, it may need to know this if, for example, this has been used to drive the middleware for the in-port or out-port (e.g., is it has be told to the out-port so that it can inform its underlying middleware of this).
- Artix may also need to know the operation if there is some form of operation routing being carried out.
- Artix could be configured to send certain of the operations from an in-port to out-port B, others to out-port C, and so on.
- the second approach is for Artix to parse/process the incoming message; and there are two ways in which this is done. They will be discussed in turn later in this sub-section. The both allow for the option of changing of the data or message format between an incoming message and the resulting outgoing message(s).
- Artix depends on canonical type definitions for the data corresponding to each operation, and in one implementation of Artix it uses XML to represent these.
- the language of XML used is web service's WSDL (Web Services Description Language).
- WSDL Web Services Description Language
- Artix does not have to use web service's data format (XML, or the XML language SOAP) to transmit or store data in a canonical format; it just needs some canonical way of describing data.
- Each type in XML is defined within the context of a name space, and we use the format foo:A to refer to the type A defined in the name space foo.
- foo:A we sometimes use the term Qname (qualified name) to refer to a full name such as foo:A, and we sometimes use the term simple name to refer to a name such as A.
- Artix has a data structure that lists the operations that can be sent or received on each port, and, for each, the data type of each message part (the term part is used here, but the term parameter may be more appropriate for certain uses, especially for ports to or from operation-based, rather than messaging-based systems) and their ordering rules.
- Each part's data type is recorded as a Qname, and this acts as a reference to the data definition.
- Artix For each Qname, Artix has a type factory that knows how to create data-objects for that type. In one implementation of Artix, data-objects are of type xsd:any; and this is castable to concrete generated types. Artix has a data structure that allows it to find the correct type factory given a Qname.
- the code for a type factory can either be generated from the definition of the corresponding type, or generic type factory code can be used (that is, shared code that is given the type definition at runtime and then behaves much like a type factory generated from the same type definition would behave).
- the code for a data-object can either be generated from the definition of the corresponding type, or generic data-object code can be used (that is, shared code that is given the type definition at runtime and then behaves much like a data-object generated from the same type definition would behave).
- the Artix Bus asks the corresponding type factory to create a data-object, and passes this data-object to the in-port so that the data-object can be populated with values from the incoming message.
- a data-object is created for each top-most part of the incoming message; in yet another implementation, only one data-object is created for the whole incoming message; other implementations (and granularities) are also possible.
- the Artix Bus passes the data-object to an out-port so that it can be written out.
- the Artix Bus creates all of the data-objects for a message, and passes these at one time to an in-port so that they can be populated. In one implementation of Artix, the Artix Bus passes all of the populated data-objects for a message to an out-port in one step, so that they can be written out.
- the Artix Bus creates one data-object at a time and, as each is created, passes it to the in-port so that it can be populated; once populated, it is passed to the out-port. In this way, the creation and formatting of the output data and message (and possibly the use of the underlying middleware) can take place in parallel with the processing of the input message.
- Each in-port and each out-port knows how to handle the simple types that it can process (e.g., some subset of those defined in the xsi name space: e.g., xsi:int). In one implementation of Artix, this represents between 12 and 24 data types.
- the in-port may recurse/call-back to the Artix Bus to complete its population. For example, if the data-object is created to read a composite value of type foo:A, and this contains a value of type bar:B, then the in-port with recurse/call-back on the Artix Bus so that a data-object can be created to handle the value of type bar:B (via the type factory for this type).
- Each in-port and each output knows how to handle the “envelope” for each composite type that it handles. For example:
- a message part is supposed to contain a type foo:A but in fact contains an extended type bar:E, then the following happens. Firstly a data-object of corresponding to type foo:A is created, but when this tries to populate itself via the in-port, the in-port notices that the actually type of data in the message is of type bar:E. A recursion/call-back to the Artix runtime then occurs so that a data-object corresponding to type bar:E is created, and it is instructed to populate itself via the in-port.
- the interface to a data-object is in two parts.
- the first part contains functions that instruct a data-object to populate itself via an in-port and to write itself to an out-port, as discussed previously. Among other uses, these are used by the Artix Bus to facilitate the interoperability of middleware.
- the second part contains functions to read and write individual parts of the values held by a data-object.
- these functions are used by applications built on top of Artix.
- an application that wishes to send a message using Artix can use the write functions to create and populate a data-object that can be delivered to an out-port.
- the advantage of this for such an application is that it can construct and populate such a data-object and have it delivered to an out-port without having to be concerned with the details of the out-port, and in particular what data format, message format and/or protocols (among other details) that it uses to transmit the data.
- an application can send a full message independently of the underlying middleware that is chosen to transmit it (by changing the out-port, the chosen middleware can be changed, without changing the application code that creates and populates the data-objects).
- Another example of using these functions is for an application to be able to accept an incoming message from any underlying middleware without being concerned with the data format, message format and/or protocols (among other details) used to receive the data.
- An application can receive a full message independently of the underlying middleware, and handle the data as a list of data-objects.
- the in-port (or intermediary) [here after, the supplier] is given a functor object on which it makes a sequence of calls.
- the supplier parses each data element in the message or input stream that it handles, it calls a function on the functor object.
- a functor object provides such a function for each of the data types that it supports, normally the basic data types (e.g., some subset of those defined in the xsi name space: e.g., xsi:int); and also for the generic complex type (such as sequences, structures/records, and so on).
- an in-port would call functions on a functor that is processed by an out-port (in one implementation of Artix, the out-port itself acts as the functor).
- Artix decides creates different paths, through the in-ports and out-ports that it has configured, by giving an in-port a reference to a functor that is handled by an out-port of Artix's choosing. For example, for one operation on in-port ip 1 , Artix could give ip 1 a reference to a functor handled by out-port op 1 ; whereas for a different operation it could give ip 1 a reference to a functor handled by out-port op 2 . (This is an example of operation-based routing; Artix can handle other forms of routing, as explained elsewhere).
- the in-port is given a functor that is handled by a first intermediary (in one implementation, the intermediary itself acts as the functor); which in turn is given a functor that is handled by the next intermediary; with the last intermediary given a functor that is handled by the out-port.
- a security intermediary which in turn calls functions on a functor that is handled by a security intermediary, which in turn calls functions on a functor that is handled by a transformation intermediary, which in turn calls functions on a functor that is handled by an out-port.
- One of the advantages of streaming is that it makes it easier to implement certain intermediaries in certain ways. For example, if XSLT is used to transform data, it is normal to feed it an input stream, and for it to produce an output stream. Using the blocking approach, the sequence of data objects form the in-port (or other intermediate step) would have to be transformed to a stream to feed the XSLT transformation step, and the stream that produced by the XSLT transformation step would have to be transformed back to a sequences of data objects to feed the next intermediary or the out-port.
- Another advantage is data objects do not need to be created. In some cases, the creation of these objects can cause a significant overhead (depending on issues such as: the number of objects that need to be created; the size of these objects; the programming language being used; and so on).
- Yet another advantages is that the system can handle operation payloads that cannot fit into memory, or cannot fit efficiently into memory.
- the streaming to blocking converter takes a stream as input (that it, it handles the calls made on a functor object) and produces a sequence of data objects.
- the blocking to streaming converter takes a sequence of data objects and it makes a corresponding set of calls on a functor object.
- streaming is the preferred approach, but where there are some in-ports, out-ports and/or intermediaries already implemented using blocking, these converters between streaming and blocking allow these to be used in an environment in which the other elements of the various paths are implemented using streaming.
- a development team may need to add an element to a path (for example, an in-port for a particular middleware), but may not wish to take on the additional burden of writing a streaming element, instead preferring to implement a blocking element. To fit their new element into paths that already contain one or more streaming elements, they may need to use a converter.
- Another use of the converter from streaming to blocking is to allow a server directly implemented on top of the Artix APIs to see a blocking interface if it wishes, even though the last part of the path to the server is implementing using streaming.
- Another use of the converter from blocking to streaming is to allow a server directly implemented on top of the Artix APIs to see a streaming interface if it wishes, even though the last part of the path to the server is implementing using blocking.
- One of the optimizations carried out by Artix is that it can pass pointers/references to data from the in-port to the out-port without copying the data that is pointed to. For example, if an incoming message has a string, then a data-object can be populated (in whole or in part) with a pointer/reference to this string rather than making a copy of the string. The out-port, when it is given this data-object, can access the original string.
- Avoidance of copying has a number of advantages, including: saving the effort and time required to carry this out; placing less stress on the heap (one advantages of this is that SMP machines can scale better to the task.)
- Great care must be taken when implementing this optimization because each middleware has different rules for when it or the code built on top of it can, will should or must deallocate (free) memory (such as the string used in the above example).
- an integration technique based on a canonical format for data at runtime must copy the incoming data into the canonical format. This not only increases the load on the processor, but it also puts a lot of stress on the heap because of all of the heap allocations and subsequent de-allocations carried out.
- An integration technique that uses XML as the canonical format would use, on the incoming side, an XML generator to construct the canonical format, and an XML parser, on the out going side, to access its parts.
- XML generators and parsers use heap allocations for each data element/attribute, and they are also very processor intensive.
- Some integration techniques transmit the canonical format between processes, and possibly between machines. Artix can be assembled into a single process, and yet its paths can be dynamically (or statically) configured.
- no-copy and no-conversion optimizations described here apply equally to intermediary steps/elements in a path, and not just to in-ports and out-ports.
- a string traversing a path that has intermediary steps/elements may still require no copying and no conversions. Copying and conversion will be done only as required along the path. If a string is once transformed from, say, UTF-8 to Unicode for the use by one intermediary, the other intermediaries and the final out-port can request either UTF-* or Unicode without further conversion.
- the Artix Bus can be informed of the operation name, and start the Artix-controlled processing of a message, before the whole of the message has been received by the in-port (in a series of packages/chunks or in a stream) and/or processed by the in-port.
- an in-port can still be receiving and/or processing parts of an overall message, while intermediaries and possibly the out-port along a path can be processing and even transmitting earlier parts of the same message.
- the present invention provides for an article of manufacture comprising computer readable program code contained within implementing one or more modules implementing a communication system integrating a plurality of middleware and implementing sophisticated paths for data flow.
- the present invention includes a computer program code-based product, which is a storage medium having program code stored therein which can be used to instruct a computer to perform any of the methods associated with the present invention.
- the computer storage medium includes any of, but is not limited to, the following: CD-ROM, DVD, magnetic tape, optical disc, hard drive, floppy disk, ferroelectric memory, flash memory, ferromagnetic memory, optical storage, charge coupled devices, magnetic or optical cards, smart cards, EEPROM, EPROM, RAM, ROM, DRAM, SRAM, SDRAM, or any other appropriate static or dynamic memory or data storage devices.
- the present invention may be implemented on a conventional IBM PC or equivalent, multi-nodal system (e.g., LAN) or networking system (e.g., Internet, WWW, wireless web). All programming and data related thereto are stored in computer memory, static or dynamic, and may be retrieved by the user in any of: conventional computer storage, display (i.e., CRT) and/or hardcopy (i.e., printed) formats.
- the programming of the present invention may be implemented by one of skill in the art of middleware programming.
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
Abstract
Description
- facilitate interoperability between a set of applications that use two or more middlewares,
- integrate the middleware islands in an enterprise, or
- to integrate multiple enterprises.
- A to B, B to A, A to C, C to A, C to B, B to C and A to D, D to B
- no effort is required to specify/program interoperability connections that aren't required; and
- at runtime, the size of Artix can be reduced.
- It can be based on the port number of an incoming message, so that all messages that arrive on a given port are sent along a specific path (or part of a path) that is configured in the routing information,
- It can be based on the operation name (which may be called other things, such as a subject, in some middleware), so that all incoming messages with a given operation name are sent along a specific path (or part of a path) that is configured in the routing information.
- It can be based on the content of a message, so that all incoming messages with content that fulfils certain criteria are sent along a specific path (or part of a path) that is configured in the routing information.
- Fan-out can be used, whereby messages are sent along multiple paths (or parts of paths) that are configured in the routing information.
- Failover can be used, whereby messages are sent one available path (or part of a path) from a set of paths (or parts of paths) that is configured in the routing information. Availability can be determined in a number of ways, including: the availability of the final destination of a message; the availability of some or all of the entities between the router and the final destination.
- These and other approaches can be mixed. For example: port and operation routing can be mixed; port, operation and content routing can be mixed; failover and fan out can be mixed; failover and content can be mixed.
- a. As a switch between different middleware. Typically in this usage, there will be one or more in-ports and one or more out-ports, with the possibility of having other path elements.
- b. (Embedded in clients) To allow clients to be built directly on it. Typically, in this usage, there will be one or more out-ports (with the possibility of having other path elements), and a client directly uses the Artix APIs to send messages.
- c. (Embedded in servers) To allow servers to be built directly on it. Typically, in this usage, there will be one or more in-ports (with the possibility of having other path elements), and a server directly uses the Artix APIs to receive messages.
- d. (Co-located with clients) This functionality is similar to the “switch” arrangement but the Artix environment is co-located on the same machine as the client application.
- e. (Co-located with the servers) This functionality is similar to the “switch” arrangement but the Artix environment is co-located on the same machine as the server application.
- Traditional hub-and-spoke in which the intermediary accepts all inputs (i.e., has all in-ports) and can forward messages to all outputs (i.e., has all out-ports).
- It can have one in-port, to middleware MI, and many out-ports. This allows services available on many middlewares (those for which an out-port is configured) to be made available to applications that can make calls to applications via MI. For example, where MI is SOAP/Web-services, this Artix configuration becomes similar in capability to IBM's WSF.
- It can have many in-ports and one out-port, MO. This allows services implemented in a wide range of middlewares (those for which an in-port is configured) to use the services provided by applications that can be communicated with via MO. This is useful in many situations. For example, a well established service available over middleware MO, can be made available to further applications without proliferating MO. Instead, it can be accessed using a range of other middlewares.
- It can have many in-ports and many out-ports.
- The Artix Bus does not have to deal with the data of full messages as a unit, but instead it can handle the data in a message as a number of parts, one part at a time. Data can be passed from an in-port to the Artix Bus one part (to various granularities) at a time (in some cases, without copying); and from the Artix Bus to an out-port one part at a time. In these cases, the Artix Bus does not have to define any rules for how a set of data elements are stored to make up a message; for example, it does not have to serialize these data elements into an overall message. It does not have to deal with issues such as byte alignment or padding. That is, it does not have to define a canonical message format. This simplifies the Artix Bus and in/out-ports.
- The Artix Bus has no knowledge of, or concern for, the details of how the primitive/basic and composite types are stored in memory; that is, their bit and byte layout. It sees them simply as programming language data values in whatever programming language it is written in (for example, C++ or Java). This bit and byte layout can vary between different programming language compilers on the same underlying machine architecture, and between different machine architectures. Even one given same programming language compiler on one given machine architecture could have different configurations/switches that could cause it to use different bit and byte layouts.
- Copies of data elements, parts of messages or even whole messages do not always have to be made.
- Where all messages sent to a given in-port are of the same operation, the determination is obviously trivial.
- The size of a message may determine the operation.
- The message header added/managed by the middleware handled by the port may contain enough information to determine the operation. Examples include: the operation name field of an IIOP message; a Tuxedo service name; a SOAP/HTTP action header.
- In some circumstances, the in-port has to parse part of the payload of a message to determine the operation. The extent of the parsing varies greatly from middleware to middleware. For the Fixed data format, there is a discriminator, which is a fixed value per operation. For XML data formatting, an XML parser (e.g., a SAX XML parser) may be required to find the XML element or elements that hold the operation identifier.
- the data-object for a simple records/structures knows that it contains a fixed number of parts of different types. For example, the binding to handle the SOAP data format knows that each record/structure must have XML elements that enclose the overall record/structure.
- the data object for a simple sequences knows that it contains a variable number of parts of the same type, and that there must be some way to determine the actual number of such part in any given sequence. For example, the binding to handle the Fixed data format knows that there must be a “count” field that gives the length of a sequence.
Note on Handing Type Extensions
Claims (17)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/307,040 US7836202B2 (en) | 2005-01-19 | 2006-01-19 | Communication system integrating a plurality of middleware and implementing sophisticated paths for data flow |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US64458105P | 2005-01-19 | 2005-01-19 | |
US11/307,040 US7836202B2 (en) | 2005-01-19 | 2006-01-19 | Communication system integrating a plurality of middleware and implementing sophisticated paths for data flow |
Publications (2)
Publication Number | Publication Date |
---|---|
US20060206525A1 US20060206525A1 (en) | 2006-09-14 |
US7836202B2 true US7836202B2 (en) | 2010-11-16 |
Family
ID=36972284
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/307,040 Expired - Fee Related US7836202B2 (en) | 2005-01-19 | 2006-01-19 | Communication system integrating a plurality of middleware and implementing sophisticated paths for data flow |
Country Status (1)
Country | Link |
---|---|
US (1) | US7836202B2 (en) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101496333B1 (en) * | 2008-12-09 | 2015-02-26 | 삼성전자주식회사 | System and method for inter connection between component in using software bus |
US9384066B1 (en) * | 2013-12-27 | 2016-07-05 | Symantec Corporation | Heuristics-based protocol labeling for industrial control systems |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020161907A1 (en) * | 2001-04-25 | 2002-10-31 | Avery Moon | Adaptive multi-protocol communications system |
US20020178273A1 (en) * | 2001-04-05 | 2002-11-28 | Real-Time Innovations, Inc. | Real-time publish-subscribe system |
US6633923B1 (en) * | 1999-01-29 | 2003-10-14 | Iona Technologies Inc. | Method and system for dynamic configuration of interceptors in a client-server environment |
US6990511B2 (en) * | 2000-07-27 | 2006-01-24 | Bea Systems, Inc. | System and method for concentration and load-balancing of requests |
US7268585B1 (en) * | 2004-12-29 | 2007-09-11 | Actel Corporation | System for signal routing line aggregation in a field-programmable gate array |
-
2006
- 2006-01-19 US US11/307,040 patent/US7836202B2/en not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6633923B1 (en) * | 1999-01-29 | 2003-10-14 | Iona Technologies Inc. | Method and system for dynamic configuration of interceptors in a client-server environment |
US6990511B2 (en) * | 2000-07-27 | 2006-01-24 | Bea Systems, Inc. | System and method for concentration and load-balancing of requests |
US20020178273A1 (en) * | 2001-04-05 | 2002-11-28 | Real-Time Innovations, Inc. | Real-time publish-subscribe system |
US20020161907A1 (en) * | 2001-04-25 | 2002-10-31 | Avery Moon | Adaptive multi-protocol communications system |
US7268585B1 (en) * | 2004-12-29 | 2007-09-11 | Actel Corporation | System for signal routing line aggregation in a field-programmable gate array |
Also Published As
Publication number | Publication date |
---|---|
US20060206525A1 (en) | 2006-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7949720B2 (en) | Message object model | |
US8205007B2 (en) | Native format tunneling | |
US9195527B2 (en) | System and method for processing messages using native data serialization/deserialization in a service-oriented pipeline architecture | |
US8806506B2 (en) | System and method for processing messages using a common interface platform supporting multiple pluggable data formats in a service-oriented pipeline architecture | |
US7904587B2 (en) | Flexibly deployable communication device facilitating interoperation between middleware | |
US10038762B2 (en) | Request and response decoupling via pluggable transports in a service oriented pipeline architecture for a request response message exchange pattern | |
US20100161821A1 (en) | Midleware broker | |
Lampesberger | Technologies for web and cloud service interaction: a survey | |
US20040111533A1 (en) | Transformations as web services | |
KR20040084812A (en) | Transmitting and receiving messages through a customizable communication channel and programming model | |
US20100211961A1 (en) | Data bus between middleware layers | |
US8135785B2 (en) | System and method for processing messages using pluggable protocol processors in a service-oriented pipeline architecture | |
Heinzl et al. | Flex-swa: Flexible exchange of binary data based on soap messages with attachments | |
AU2007262660B2 (en) | Middleware broker | |
JP2005174120A (en) | Web service connection processing method, system, and program | |
US7836202B2 (en) | Communication system integrating a plurality of middleware and implementing sophisticated paths for data flow | |
Chou et al. | Web service enablement of communication services | |
Lytra et al. | A pattern language for service-based platform integration and adaptation | |
Matsumura et al. | Situated web service: context-aware approach to high-speed web service communication | |
Farrell | Core Standards | |
NZ574307A (en) | Middleware broker |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: IONA TECHNOLOGIES INC., IRELAND Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:COUSINS, PETER LAWRENCE;CONWAY, ALAN THOMAS;REEL/FRAME:017426/0230 Effective date: 20060330 |
|
AS | Assignment |
Owner name: IONA TECHNOLOGIES LIMITED, BERMUDA Free format text: RE-REGISTRATION AS A PRIVATE COMPANY;ASSIGNOR:IONA TECHNOLOGIES, PLC;REEL/FRAME:023254/0603 Effective date: 20090108 Owner name: IONA TECHNOLOGIES LIMITED,BERMUDA Free format text: RE-REGISTRATION AS A PRIVATE COMPANY;ASSIGNOR:IONA TECHNOLOGIES, PLC;REEL/FRAME:023254/0603 Effective date: 20090108 |
|
CC | Certificate of correction | ||
AS | Assignment |
Owner name: MICRO FOCUS IP DEVELOPMENT LIMITED, UNITED KINGDOM Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:IONA TECHNOLOGIES LIMITED;REEL/FRAME:029832/0838 Effective date: 20130215 Owner name: IONA TECHNOLOGIES, PLC, IRELAND Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:IONA TECHNOLOGIES, INC.;REEL/FRAME:029833/0138 Effective date: 20130215 |
|
FPAY | Fee payment |
Year of fee payment: 4 |
|
AS | Assignment |
Owner name: BANK OF AMERICA, N.A., CALIFORNIA Free format text: SECURITY INTEREST;ASSIGNOR:MICRO FOCUS IP DEVELOPMENT LIMITED;REEL/FRAME:035633/0599 Effective date: 20141120 |
|
AS | Assignment |
Owner name: BANK OF AMERICA, N.A., CALIFORNIA Free format text: CORRECTIVE ASSIGNMENT TO CORRECT THE ASSIGNOR FIELD TO SHOW MICRO FOCUS (IP) LIMITED AS AN ASSIGNOR/GRANTOR TO THE SECURITY INTEREST PREVIOUSLY RECORDED ON REEL 035633 FRAME 0599. ASSIGNOR(S) HEREBY CONFIRMS THE GRANT OF SECURITY INTEREST;ASSIGNORS:MICRO FOCUS IP DEVELOPMENT LIMITED;MICRO FOCUS (IP) LIMITED;REEL/FRAME:035685/0628 Effective date: 20141120 |
|
AS | Assignment |
Owner name: MICRO FOCUS IP DEVELOPMENT LIMITED, UNITED KINGDOM Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:BANK OF AMERICA, N.A.;REEL/FRAME:042205/0235 Effective date: 20170501 Owner name: MICRO FOCUS (IP) LIMITED, UNITED KINGDOM Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:BANK OF AMERICA, N.A.;REEL/FRAME:042205/0235 Effective date: 20170501 Owner name: MICRO FOCUS (IP) LIMITED, UNITED KINGDOM Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:BANK OF AMERICA, N.A.;REEL/FRAME:042205/0867 Effective date: 20170501 Owner name: MICRO FOCUS IP DEVELOPMENT LIMITED, UNITED KINGDOM Free format text: RELEASE BY SECURED PARTY;ASSIGNOR:BANK OF AMERICA, N.A.;REEL/FRAME:042205/0867 Effective date: 20170501 |
|
FEPP | Fee payment procedure |
Free format text: MAINTENANCE FEE REMINDER MAILED (ORIGINAL EVENT CODE: REM.) |
|
LAPS | Lapse for failure to pay maintenance fees |
Free format text: PATENT EXPIRED FOR FAILURE TO PAY MAINTENANCE FEES (ORIGINAL EVENT CODE: EXP.); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY |
|
STCH | Information on status: patent discontinuation |
Free format text: PATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362 |
|
FP | Lapsed due to failure to pay maintenance fee |
Effective date: 20181116 |