Common Object Request Broker Architecture: Difference between revisions

Content deleted Content added
Bluelinking 5 books for verifiability.) #IABot (v2.1alpha3
Line 1:
{{more footnotes|date=February 2009}}
{{Use dmy dates|date=JulyDecember 20112019}}
{{Infobox standardref
| title = Common Object Request Broker Architecture
Line 16 ⟶ 17:
| website = {{URL|corba.org/}}
}}
{{Use dmy dates|date=July 2011}}
 
The '''Common Object Request Broker Architecture''' ('''CORBA''') is a [[Standardization|standard]] defined by the [[Object Management Group]] (OMG) designed to facilitate the communication of systems that are deployed on diverse platforms. CORBA enables collaboration between systems on different operating systems, [[programming language]]s, and computing hardware. CORBA uses an object-oriented model although the systems that use the CORBA do not have to be object-oriented. CORBA is an example of the [[distributed object]] paradigm.
Line 23:
CORBA enables communication between software written in different languages and running on different computers. Implementation details from specific operating systems, programming languages, and hardware platforms are all removed from the responsibility of developers who use CORBA. CORBA normalizes the method-call semantics between application objects residing either in the same address-space (application) or in remote address-spaces (same host, or remote host on a network). Version 1.0 was released in October 1991.
 
CORBA uses an [[interface definition language]] (IDL) to specify the interfaces that objects present to the outer world. CORBA then specifies a ''mapping'' from IDL to a specific implementation language like [[C++]] or [[Java (programming language)|Java]]. Standard mappings exist for [[Ada (programming language)|Ada]], [[C (programming language)|C]], [[C++]], [[C++11]], [[COBOL]], [[Java (programming language)|Java]], [[Lisp (programming language)|Lisp]], [[PL/I]], [[Object Pascal]], [[Python (programming language)|Python]], [[Ruby (programming language)|Ruby]] and [[Smalltalk]]. Non-standard mappings exist for [[C Sharp (programming language)|C#]], [[Erlang (programming language)|Erlang]], [[Perl]], [[Tcl]] and [[Visual Basic]] implemented by [[object request broker]]s (ORBs) written for those languages.
 
The CORBA specification dictates there shall be an ORB through which an application would interact with other objects. This is how it is implemented in practice:
Line 45:
| title=History of CORBA
| publisher=[[Object Management Group]]
| accessdate=2017-03-12 March 2017}}</ref><ref>{{cite web
| url=http://www.corba.org/history_of_corba.htm
| title=History of CORBA
| publisher=[[Object Management Group]]
| accessdate=4 June 2017-06-04}}</ref>
{| class="wikitable"
|-
Line 122:
| title=The CORBA Component Model
| publisher=[[Dr. Dobb's Journal]]
| date=1 September 2004-09-01
| accessdate=2017-03-13 March 2017}}</ref> It was introduced with CORBA 3 and it describes a standard application framework for CORBA components. Though not dependent on "language dependent [[Enterprise Java Beans]] (EJB)", it is a more general form of EJB, providing four component types instead of the two that EJB defines. It provides an abstraction of entities that can provide and accept services through well-defined named interfaces called ''ports''.
 
The CCM has a component container, where software components can be deployed. The container offers a set of services that the components can use. These services include (but are not limited to) [[Notification system|notification]], [[authentication]], [[persistence (computer science)|persistence]] and [[transaction processing]]. These are the most-used services any distributed system requires, and, by moving the implementation of these services from the software components to the component container, the complexity of the components is dramatically reduced.
Line 146:
 
===VMCID (Vendor Minor Codeset ID)===
Each standard CORBA exception includes a minor code to designate the subcategory of the exception. Minor exception codes are of type unsigned long and consist of a 20-bit “Vendor"Vendor Minor Codeset ID”ID" (VMCID), which occupies the high order 20 bits, and the minor code proper which occupies the low order 12 bits.
 
Minor codes for the standard exceptions are prefaced by the VMCID assigned to OMG, defined as the unsigned long constant CORBA::OMGVMCID, which has the VMCID allocated to OMG occupying the high order 20 bits. The minor exception codes associated with the standard exceptions that are found in Table 3-13 on page 3-58 are or-ed with OMGVMCID to get the minor code value that is returned in the ex_body structure (see Section 3.17.1, “Standard"Standard Exception Definitions", on page 3-52 and Section 3.17.2, “Standard"Standard Minor Exception Codes", on page 3-58).
 
Within a vendor assigned space, the assignment of values to minor codes is left to the vendor. Vendors may request allocation of VMCIDs by sending email to tagrequest@omg.org. A list of currently assigned VMCIDs can be found on the OMG website at: http://www.omg.org/cgi-bin/doc?vendor-tags
 
The VMCID 0 and 0xfffff are reserved for experimental use. The VMCID OMGVMCID (Section 3.17.1, “Standard"Standard Exception Definitions", on page 3-52) and 1 through 0xf are reserved for OMG use.
 
[http://www.omg.org/cgi-bin/doc?formal/98-12-01 The Common Object Request Broker: Architecture and Specification (CORBA 2.3)]
Line 185:
 
== Problems and criticism ==
While CORBA delivered much in the way code was written and software constructed, it has been the subject of criticism.<ref name="CORBA_trouble">{{cite web |url=http://www.davidchappell.com/articles/article_Trouble_CORBA.html |archiveurl=https://web.archive.org/web/20121203074323/http://www.davidchappell.com/articles/article_Trouble_CORBA.html |archivedate=3 December 2012 |title=Trouble with CORBA |last=Chappel |first=David |date=May 1998 |accessdate=15 March 2010 |publisher=www.davidchappel.com}}</ref>
 
Much of the criticism of CORBA stems from poor implementations of the standard and not deficiencies of the standard itself. Some of the failures of the standard itself were due to the process by which the CORBA specification was created and the compromises inherent in the politics and business of writing a common standard sourced by many competing implementors.
Line 195:
:CORBA's notion of ___location transparency has been criticized; that is, that objects residing in the same [[address space]] and accessible with a simple [[function call]] are treated the same as objects residing elsewhere (different processes on the same machine, or different machines). This is a fundamental design flaw,<ref>{{cite journal|last=Waldo|first=Jim|author2=Geoff Wyant |author3=Ann Wollrath |author4=Sam Kendall |title=A Note on Distributed Computing|journal=Sun Microsystem Laboratories|date=November 1994|url=http://www.cc.gatech.edu/classes/AY2010/cs4210_fall/papers/smli_tr-94-29.pdf|accessdate=4 November 2013}}</ref>{{Failed verification|date=November 2017}} as it makes all object access as complex as the most complex case (i.e., remote network call with a wide class of failures that are not possible in local calls). It also hides the inescapable differences between the two classes, making it impossible for applications to select an appropriate use strategy (that is, a call with 1[[µs]] latency and guaranteed return will be used very differently from a call with 1s latency with possible transport failure, in which the delivery status is potentially unknown and might take 30s to time out).
;Design and process deficiencies
:The creation of the CORBA standard is also often cited for its process of [[design by committee]]. There was no process to arbitrate between conflicting proposals or to decide on the hierarchy of problems to tackle. Thus the standard was created by taking a union of the features in all proposals with no regard to their coherence.<ref name="ACM_fall"/> This made the specification complex, expensive to implement entirely, and often ambiguous.
 
:A design committee composed of a mixture of implementation vendors and customers created a diverse set of interests. This diversity made difficult a cohesive standard. Standards and interoperability increased competition and eased customers' movement between alternative implementations. This led to much political fighting within the committee and frequent releases of revisions of the CORBA standard that some ORB implementors ensured were difficult to use without proprietary extensions.<ref name="CORBA_trouble"/> Less ethical CORBA vendors encouraged customer lock-in and achieved strong short-term results. Over time the ORB vendors that encourage portability took over market share. {{Citation needed|date=November 2017}}
Line 209:
:CORBA (more precisely, [[General Inter-ORB Protocol|GIOP]]) is not tied to any particular communications transport. A specialization of GIOP is the Internet Inter-ORB Protocol or IIOP. IIOP uses raw [[TCP/IP]] connections in order to transmit data.
 
:If the client is behind a very restrictive firewall or [[transparent proxy]] server environment that only allows [[HTTP]] connections to the outside through port 80, communication may be impossible, unless the proxy server in question allows the [[Tunneling protocol|HTTP CONNECT]] method or [[SOCKS]] connections as well. At one time, it was difficult even to force implementations to use a single standard port &mdash; they tended to pick multiple random ports instead. As of today, current ORBs do have these deficiencies. Due to such difficulties, some users have made increasing use of [[web services]] instead of CORBA. These communicate using [[XML]]/[[SOAP]] via port 80, which is normally left open or filtered through a HTTP proxy inside the organization, for web browsing via HTTP. Recent CORBA implementations, though, support [[Secure Sockets Layer|SSL]] and can be easily configured to work on a single port. Some ORBS, such as [[TAO (software)|TAO]], omniORB and [[JacORB]] also support bidirectional GIOP, which gives CORBA the advantage of being able to use callback communication rather than the polling approach characteristic of web service implementations. Also, most modern firewalls support GIOP & IIOP and are thus CORBA-friendly firewalls.
 
== See also ==
Line 219:
 
;Component-based software technologies
* [[Freedesktop.org]] [[D-Bus]] &mdash; current open cross-language cross-platform object model
* [[GNOME]] [[Bonobo (GNOME)|Bonobo]] &mdash; deprecated GNOME cross-language object model
* [[KDE]] [[DCOP]] &mdash; deprecated KDE interprocess and software componentry communication system
* [[KDE]] [[KDE Platform#KParts|KParts]] &mdash; KDE component framework
* [[Component Object Model]] (COM) &mdash; Microsoft Windows-only cross-language object model
* [[Distributed Component Object Model|DCOM]] (Distributed COM) &mdash; extension making COM able to work in networks
* [[Common Language Infrastructure]] &mdash; Current [[.NET Framework|.NET]] cross-language cross-platform object model
* [[XPCOM]] (Cross Platform Component Object Model) &mdash; developed by Mozilla for applications based on it (e.g. [[Mozilla Application Suite]], [[SeaMonkey]] 1.x)
* [[IBM System Object Model]] SOM and DSOM &mdash; component systems from IBM used in [[OS/2]] and [[AIX]]
* [[Internet Communications Engine]] (ICE)
* [[Java remote method invocation]] (Java RMI)
Line 235:
* [[Remote procedure call]] (RPC)
* [[Windows Communication Foundation]] (WCF)
* [[Software Communications Architecture]] (SCA) &mdash; components for embedded systems, cross-language, cross-transport, cross-platform
 
;Language bindings