|
Accessing .NET assemblies
ColdFusion provides two methods for accessing .NET assemblies:
For both methods, install the ColdFusion .NET extension and run
the ColdFusion .NET service on the system that hosts the assemblies.
You need not install the extension or run the service on a ColdFusion
system that accesses only remote assemblies. For information on
installing the ColdFusion .NET extension, see Installing ColdFusion guide.
Accessing local assembliesFor local access, ColdFusion automatically generates and
uses proxies for the required .NET assemblies when you first use
the cfobject tag or CreateObject function.
ColdFusion caches the proxies for future use, so it does not generate
assembly proxies each time.
Usually when you are accessing local .NET assemblies, you do
not have to override the default communication configuration settings.
Sometimes you could have to specify these settings, however. If
other software on your system uses the default 6086 port, for example,
change the port number specification in the jnbridge\DotNetSide.exe.config
file, and specify the changed port number in your cfobject tag
or CreateObject tag. For information on changing
the port number specification, see Configuring the .NET-side system,
To use
the local access method, use the cfobject tag or CreateObject function
to create and access the proxy. You can use the resulting ColdFusion object
to construct the .NET object, call the .NET object’s methods, and
access its fields. For detailed information on using .NET classes,
see Using .NET classes.
Accessing remote assembliesThe
remote access technique accesses .NET assemblies by using TCP or
HTTP to communicate with a .NET-side agent on a remote system. You
create proxy instances and call assembly methods as you do in the
Local access method, but first configure the remote .NET-side agent
and, in most cases, the proxy classes that represent the remote
.NET classes.
Configure remote .NET accessOn the remote system, install the ColdFusion .NET
integration software and run the .NET-side agent (see Installing ColdFusion guide).
If the .NET assemblies reside only on the remote system,
generate proxy JAR files on that system that represent the assemblies
(see Generating the Java proxy classes). Then copy or move the proxy files
to the local system. If identical .NET assemblies also reside on
the local system, you can skip this step.
Configure the .NET-side system for remote access (see Configuring the .NET-side system).
Generating the Java proxy classesThe Java proxy generation code requires direct access to
the .NET assemblies to generate the proxy classes. Therefore, if
the system that runs your ColdFusion application does not have the
assemblies installed, run a tool on the .NET-side system to create
the Java proxies. ColdFusion installs two proxy generation programs,
jnbproxyGui.exe and jnbproxy.exe in the jnbridge directory when
you install the .NET services. The jnbproxyGui.exe program is a
Windows user interface application, and the jnbproxy.exe program
is a command line application. Both programs have identical capabilities.
Note: If the system running the ColdFusion application
has the assemblies installed, but must access remote versions of
the assemblies (for example, because of configuration differences),
you need not manually generate the proxy classes, and you can skip
this step. Instead, specify the paths to the local .exe or .dll
files in the assembly attribute of the cfobject tag
(or CreateObject function) and specify the remote
server in the server attribute. Configure the remote
system for access, however.
On a ColdFusion system, the jnbproxyGui and jnbproxy programs
are located in the cfroot\jnbridge directory. When you use
the stand-alone installer, the programs are located in the installDir\jnbridge
directory.
This document provides the basic information necessary to generate
a proxy JAR file using the jnbproxyGui tool. Additional information
is available in the following locations:
The jnbridge directory includes a jnbproxy.chm Windows
Help file with more complete documentation on the JNBridge technology
that powers the ColdFusion .NET feature, including detailed information
on both the jnbproxyGui and jnbproxy programs.
The jnbridge\docs subdirectory includes additional documentation,
including users guide.pdf, a PDF version of the information in the
Help file.
Note: The JNBridge documentation includes information
on features that are not supported in ColdFusion. ColdFusion, for
example, does not support access from .NET assemblies to ColdFusion
or memory-only communication.
Using the jnbproxyGui toolYou use the jnbproxyGui program to generate a proxy JAR
file.
Generate and install a proxy JARStart JNBProxyGui.exe.
The first time you run the program, it displays the Enter
Java Options dialog box. Configure the options, and click OK.
You
can change the configuration settings at a later time by selecting
Project > Java Options.
On a system with ColdFusion: If
ColdFusion is currently running on this system, ensure that the
Start Java Automatically option, located on the right side of the
JNBProxy Enter Java Options (Project > Java Options) dialog box
is cleared. Leave the default values for the other settings.
When
you open an existing project, you could get a Restart Java Side
pop-up window with the message "You must stop and restart the Java
side before these changes to the classpath can take effect." You
can ignore this message and click OK to proceed.
When you
start the program, the Java Options dialog box could appear. You
do not have to change anything; click OK or Cancel to open the Launch
JNBProxy dialog box.
In some cases, JNBProxyGui could behave
as follows when the Start Java Automatically option is not selected.
On a system without ColdFusion: If
ColdFusion is not currently running on the system, ensure that the
following options, which are located on the right side of the interface,
are set. Leave the default values for the other settings.
Ensure that the Start Java Automatically option is selected.
Specify the java.exe file to use to compile the JAR file.
You can use a Java 1.4 or 1.5 (J2SE 5.0) version of this file.
Specify the jnbcore.jar file. The ColdFusion server installer
places this file in the cfroot\lib directory. The J2EE installer
places the file in the cf_webapp_root\WEB‑INF\cfusion\lib
directory.
Specify the bcel.jar file. The ColdFusion server installer
places this file in the cfroot\lib directory. The J2EE installer
places the file in the cf_webapp_root\WEB-INF\cfusion\lib
directory.
In the Launch JNBProxy dialog box, select Create New Java
> .NET Project, and click OK.
In the main Java proxy generation interface, set up and build
a project:
If you have not already done so, add the
directory that contains your assembly files to the JNBProxy your
project. Select Project >Edit Assembly List. In the Assembly
List dialog box, click the Add button. In the New Assembly List
Element dialog box, navigate to the directory that contains your
assemblies. Select the directory (or directories) in the tree, and
click OK. Then click OK in the Edit Assembly List dialog box.
Open the Locate Assembly File dialog box (Project > Add
Classes From Assembly File) and navigate to the directory that you
added to the assembly list in step a. Select the assembly file or
files that contain classes that require proxies and click OK.
The classes in the selected file, and other .NET core classes
on which they depend, appear in the Environment pane. Select all
classes for which you want proxies in your JAR file, and click the
Add+ button to add the selected classes and all supporting classes.
In the Exposed Proxies list, select the classes to include
in the JAR file. Normally, select all the listed classes, which
ensures that all required classes are included.
Select Project > Build from the main menu. In the Save
Generated Proxies dialog box, specify the location and JAR file
in which to save the generated proxies, and click Save.
After the project is built, select File > Save Project
and specify the file in which to save your project.
The next
time you run the jnbproxyGui program, you can select your project and
reuse your previous settings, including the Assembly List.
Copy the JAR file to a directory on your ColdFusion system.
You specify this path in the cfobject tag assembly attribute.
Supporting classesJNBProxy can generate proxies not only for the .NET classes
that are explicitly listed, but also for supporting classes.
A supporting class for a given .NET class is any class that could
be needed as a direct or indirect result of using that .NET class.
For a given .NET class, supporting classes include all of the following:
The class.
The class’s superclass or superinterface (if it exists) and
all of its supporting classes.
The class’s implemented interfaces (if any) and all of their
supporting classes.
For each field in the class:
The field’s class
and all of its supporting classes.
For each of the field’s index parameters, the parameter’s
class and all of its supporting classes.
For each method in the class:
The method’s
return value’s class (if any) and all of its supporting classes.
For each of the method’s parameters, the parameter’s class
and all of its supporting classes.
For each constructor in the class, for each of the constructor’s
parameters, the parameter’s class and all of its supporting classes.
Unlike Java, where supporting classes include exceptions that
methods throw, .NET supporting classes don’t include thrown exceptions,
because they are not declared in advance.
The number of supporting classes depends on the classes explicitly
listed, but it often can be 200-250 classes. Usually you generate
all supporting classes. However, to save time or space, you can
generate only those classes explicitly specified, without supporting
classes.
If a proxy for a supporting class has not been generated, and
a proxy for such a class is later needed when the proxies are used,
the proxy for the nearest superclass to the required class is used
instead. If that proxy hasn’t been generated, the proxy for the
superclass of that superclass is used if it has been generated,
and so forth, until the proxy for System.Object (which is always
generated) is encountered. Thus, even with an incomplete set of
proxies, code executes, although functionality and other information
could be lost.
In the jnbproxyGui tool, when you click the Add button, the list
includes only the explicitly listed classes. When you click the
Add+ button, the list also includes the supporting classes. In the
jnbproxy command line program, the default command generates proxies
for the supporting classes; use the /ns option
to override this default.
Configuring the .NET-side systemTo configure the .NET-side system,
you edit the jnbridge\JNBDotNetSide.exe.config configuration file
in the following ways:
For local assemblies, edit this file only if you do not
use the default port, or if you use SSL security.
For a .NET assembly on a remote machine, register the assemblies
in this file to make it accessible to ColdFusion.
Edit the configuration fileEnsure that the following lines are in the <configSections>
subsection of the <configuration> section:
<jnbridge>
<javaToDotNetConfig scheme="Protocol" port="local port number"
useSSL="true|false" certificateLocation="server certificate path"/>
</jnbridge>
The scheme attribute
specifies the communications protocol, and must be jtcp or http.
The port number is the port of the .NET-side agent, normally
6086.
The useSSL attribute specifies whether to
use SSL for secure communications. The attribute is optional; the
default is to not use SSL.
The certificateLocation attribute specifies
the location of the server SSL certificate. It is required only
if the useSSL attribute is true.
These
settings must be the same as the corresponding attributes in your cfobject tag.
If the .NET assemblies are on a remote system, specify the
assemblies that ColdFusion accesses by adding the following elements
inside the <jnbridge> section.
<assemblyList>
<assembly file="path to assembly or fully qualified name"/>
...
</assemblyList>
Stop and restart the .NET-side agent, if it is running. For
example, on a ColdFusion system, restart the ColdFusion .NET Service.
Your ColdFusion application can now access the .NET classes that
you configured.
The following example is a bare-bones JNBDotNetSide.exe.config
file that specifies a .NET-side TCP server configuration. The server
communicates by using TCP binary mode and listens on port 6086.
Java clients can access \\x
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<sectionGroup name="jnbridge">
<section name="dotNetToJavaConfig"
type="System.Configuration.SingleTagSectionHandler"/>
<section name="javaToDotNetConfig"
type="System.Configuration.SingleTagSectionHandler"/>
<section name="tcpNoDelay"
type="System.Configuration.SingleTagSectionHandler"/>
<section name="javaSideDeclarations"
type="System.Configuration.NameValueSectionHandler"/>
<section name="assemblyList"
type="com.jnbridge.jnbcore.AssemblyListHandler, JNBShare"/>
</sectionGroup>
<jnbridge>
<javaToDotNetConfig scheme="jtcp" port="6086"/>
<assemblyList>
\\x
<assembly file="System.Windows.Forms, Version=1.0.5000.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</assemblyList>
</jnbridge>
</configuration>
|