The following sections describe how to create, or instantiate, a CORBA object and how to use it in your ColdFusion application.
The cfobject
tag and CreateObject
functions create in ColdFusion a stub, or proxy object, for the CORBA object on the remote server. You use this stub object to invoke the remote object.
The following table describes the attributes you use in the cfobject
tag to create a CORBA object:
For example, use the following CFML to invoke a CORBA object specified by the tester.ior file if you configured your ORB name as Visibroker:
<cfobject action = "create" type = "CORBA" context = "IOR" class = "d:\temp\tester.ior" name = "handle" locale = "Visibroker">
When you use the CreateObject
function to invoke this CORBA object, specify the name as the function return variable, and specify the type, class, context, and locale as arguments. For example, the following line creates the same object as the preceding cfobject
tag:
handle = CreateObject("CORBA", "d:\temp\tester.ior", "IOR", "Visibroker")
For the complete cfobject
and CreatObject
syntax, see CFML Reference.
Currently, ColdFusion can only resolve objects registered in a CORBA 2.3-compliant naming service.
If you use a naming service, make sure that its naming context is identical to the naming context specified in the property file of the Connector configuration in use, as specified in the ColdFusion Administrator CORBA Connectors page. The property file must contain the line "SVCnameroot=name" where name is the naming context to be used. The server implementing the object must bind to this context, and register the appropriate name.
After you create the object, you can invoke attributes and operations on the object using the syntax described in "Creating and using objects". The following sections describe the rules for using CORBA objects in ColdFusion pages. They include information on using methods in ColdFusion, which IDL types you can access from ColdFusion, and the ColdFusion data types that correspond to the supported IDL data types.
When you use the cfobject
tag or the CreateObject
function to create a CORBA object, ColdFusion creates a handle to a CORBA interface, which is identified by the cfobject
name
attribute or the CreateObject
function return variable. For example, the following CFML creates a handle named myHandle:
<cfobject action = "create" type = "CORBA" context = "IOR" class = "d:\temp\tester.ior" name = "myHandle" locale="visibroker"> <cfset myHandle = CreateObject("CORBA", "d:\temp\tester.ior", "IOR", "visibroker")
You use the handle name to invoke all of the interface methods, as in the following CFML:
<cfset ret=myHandle.method(foo)>
The following sections describe how to call CORBA methods correctly in ColdFusion.
Method names in IDL are case-sensitive. However, ColdFusion is case-insensitive. Therefore, do no use methods that differ only in case in IDL.
For example, the following IDL method declarations correspond to two different methods:
testCall(in string a); // method #1 TestCall(in string a); // method #2
However, ColdFusion cannot differentiate between the two methods. If you call either method, you cannot be sure which of the two will be invoked.
CORBA in parameters are always passed by value. When calling a CORBA method with a variable in ColdFusion, specify the variable name without quotes, as shown in the following example:
IDL |
void method(in string a); |
---|---|
CFML |
<cfset foo="my string"> <cfset ret=handle.method(foo)> |
CORBA out and inout parameters are always passed by reference. As a result, if the CORBA object modifies the value of the variable that you pass when you invoke the method, your ColdFusion page gets the modified value.
To pass a parameter by reference in ColdFusion, specify the variable name in double quotes in the CORBA method. The following example shows an IDL line that defines a method with a string variable, b, that is passed in and out of the method by reference. It also shows CFML that calls this method.
IDL |
void method(in string a, inout string b); |
---|---|
CFML |
<cfset foo = "My Initial String"> <cfset ret=handle.method(bar, "foo")> <cfoutput>#foo#</cfoutput> |
In this case, the ColdFusion variable foo corresponds to the inout parameter b. When the CFML executes, the following happens:
cfoutput
tag prints the new value of the foo variable.Use CORBA methods that return values as you would any ColdFusion function; for example:
IDL |
double method(out double a); |
---|---|
CFML |
<cfset foo=3.1415> <cfset ret=handle.method("foo")> <cfoutput>#ret#</cfoutput> |
The following sections describe how ColdFusion supports CORBA data types. They include a table of supported IDL types and information about how ColdFusion converts between CORBA types and ColdFusion data.
The following table shows which CORBA IDL types ColdFusion supports, and whether they can be used as parameters or return variables. (NA means not applicable.)
The following table lists IDL data types and the corresponding ColdFusion data types:
ColdFusion treats any of the following as Boolean values:
True |
"yes", "true", or 1 |
False |
"no", "false", or 0 |
You can use any of these values with CORBA methods that take Boolean parameters, as the following code shows:
For IDL struct types, use ColdFusion structures. You can prevent errors by using the same case for structure key names in ColdFusion as you do for the corresponding IDL struct field names.
ColdFusion treats the enum IDL type as an integer with the index starting at 0. As a result, the first enumerator corresponds to 0, the second to 1, and so on. In the following example, the IDL enumerator a corresponds to 0, b to 1 and c to 2:
In this example, the CORBA object gets called with the second (not first) entry in the enumerator, a.
If you are using an ORB that supports CORBA later than version 2.0, you do not have to do anything to support double-byte characters. Strings and characters in ColdFusion will appropriately convert to wstring and wchar when they are used. However, the CORBA 2.0 IDL specification does not support the wchar and wstring types, and uses the 8-bit Latin-1 character set to represent string data. In this case, you cannot pass parameters containing those characters, however, you can call parameters with char and string types using ColdFusion string data.
Use the cftry
and cfcatch
tags to catch CORBA object method exceptions thrown by the remote server, as follows:
type="coldfusion.runtime.corba.CorbaUserException"
in the cfcatch
tag to catch CORBA exceptions.
cfcatch.getContents
method to get the contents of the exception object.
The the cfcatch.getContents
method returns a ColdFusion structure containing the data specified by the IDL for the exception.
The following code example shows the IDL for a CORBA object that raises an exception defined by the PrimitiveException exception type definition, and the CFML that catches the exception and displays the contents of the object.