ActiveX 客户机编程最佳实践

访问 Java™ 组件的最佳方式是使用 Java 语言。 建议您使用 Java 语言尽可能多地编程,并在 COM Automation 容器(例如 Visual Basic)和 Java 代码之间使用小而简单的接口。使用这种接口在跨接口移动时可避免开销和性能问题。

最佳实践 最佳实践: 包括了以下主题:
  • Visual Basic 准则
  • CScript 和 Windows 脚本编制主机
  • ASP 准则
  • J2EE 准则
best-practices

Visual Basic 准则

下列准则旨在帮助您优化使用与 Visual Basic 一起使用的 ActiveX 到 EJB 网桥。

  • 通过 launchClientXJB.bat 文件启动 Visual Basic 复制。如果您要通过 Visual Basic 调试器运行 Visual Basic 应用程序,那么在 ActiveX 到 EJB 网桥环境中运行 Visual Basic 集成开发环境 (IDE)。在创建 Visual Basic 工程后,可从命令行启动它;例如,launchClientXJB MyApplication.vbp。您还可以在 ActiveX 到 EJB 环境中单独启动 Visual Basic 应用程序,方法是在 Windows 开始菜单上更改 Visual Basic 快捷方式,这样就可以先调用 launchClientXJB.bat 文件,然后再调用 VB6.EXE 文件。
  • 在调试程序之前退出 Visual Basic IDE。

    因为 Java 虚拟机 (JVM) 代码连接到正在运行中的进程,所以必须退出 Visual Basic 编辑器,然后调试程序。如果您先运行进程,然后退出 Visual Basic IDE 中的程序,那么 JVM 代码会继续运行并在调试器调用 XJBInit() 时重新连接到同一 JVM 代码。这会在您尝试更新 XJBInit() 自变量(例如,classpath)时发生问题,因为直到重新启动 Visual Basic 程序后,才会应用这些更改。

  • 全局存储 XJB.JClassFactory 对象。

    因为您无法卸装或重新初始化 JVM 代码,所以产生的 XJB.JClassFactory 对象将高速缓存为一个全局变量。将此对象处理为一个全局变量或传递单个引用的开销要比多次重新创建新 XJB.JClassFactory 对象和调用 XJBInit() 自变量的开销要小得多。

CScript 和 Windows 脚本编制主机

下列准则旨在帮助您使用 CScript 和 Windows 脚本编制主机 (WSH),优化对 ActiveX 到 EJB 网桥的使用。
  • 在 ActiveX 到 EJB 环境中启动。
    在 ActiveX 到 EJB 网桥环境中启动 VBScript 文件,以运行 .vbs 文件中的 VBScript 文件。有两种启动脚本的公共方法:
    • launchClientXJB MyScript.vbs
    • launchClientXJB cscript MyScript.vbs

ASP 准则

下列准则旨在帮助您优化使用与 Active Server Page 软件一起使用的 ActiveX 到 EJB 网桥:

  • 使用 Active Server Page 应用程序中的 ActiveX 到 EJB 助手功能。

    因为 Active Server Page (ASP) 代码通常使用 VBScript,所以您可使用任何 VBScript 环境中包含的助手功能(只需做少量更改)。要获得有关这些助手功能的更多信息,请参阅“用于数据类型转换的助手功能”。要在 ASP 环境外运行,移除或更改所有对 Server、Request、Response、Application 和 Session 对象的引用;例如,将 Server.CreateObject 更改为 CreateObject

  • 在系统中全局设置 JRE 路径。

    XJB.JClassFactory 对象必须能够找到初始化时的 Java 运行时动态链接库 (DLL)。在 Internet Information Server 中,您不能各自指定其进程的路径;必须在系统 PATH 变量中设置进程路径。 在使用 ASP 应用程序的机器上只能有一个可用 JVM 版本。同时,记住在更改系统 PATH 变量之后必须重新引导 Internet Information Server 机器,以使 Internet Information Server 能看到更改。

  • 设置系统 TEMP 环境变量。

    如果尚未设置系统 TEMP 环境变量,Internet Information Server 会将所有临时文件存储在 WINNT 目录中,通常我们不希望使用此目录。

  • 使用高隔离或已隔离进程。

    在将 ActiveX 到 Java 网桥与 Active Server Pages 软件一起使用时,建议您在其自身的进程中创建 Web 应用程序。您只能在单个进程中装入一个 JVM 指令,如果您希望运行具有不同 JVM 环境选项(例如,不同的类路径)的多个应用程序,那么您需要有分开的进程。

  • 使用应用程序卸装选项。

    调试应用程序时,在 Internet Information Server 管理控制台上查看 ASP 应用程序属性时使用卸载以卸载内存中的进程,从而卸载了 JVM 代码。

  • 每个应用程序运行一个进程。

    在您的 ASP 环境中,每个 J2EE 应用程序或 JVM 环境仅使用一个 ASP 应用程序。如果您需要分隔类路径或 JVM 设置,那么需要分隔 ASP 应用程序(具有高隔离或已隔离进程的虚拟目录)。

  • 在应用程序范围中存储 XJB.JClassFactory 对象。

    因为在 JVM 指令和进程间需要一对一关系,并且因为 JVM 代码从不独立地从进程中拆离或关闭,所以只需一次在应用程序范围中高速缓存 XJB.JClassFactory 对象和调用 XJBInit() 方法。

    因为 ActiveX 到 EJB 网桥使用自由线程 marshaler,它利用了 Internet Information Server 和 ASP 环境的多线程性质的优点。如果您选择重新初始化 Page 范围(局部变量)上的 XJB.JClassFactory 对象,那么 XJBInit() 方法只能初始化局部的 XJB.JClassFactory 变量。它比从前更有效的使用 XJBInit() 方法。

  • 使用 VBScript 转换函数。

    因为 VBScript 代码仅支持变体数据类型,所以使用 CStr()、CByte()、CBool()、CCur()、CInt()、Clng()、CSng() 和 CDbl() 函数来告诉 activeX 到 EJB 网桥要使用哪个数据类型;例如,oMyObject.Foo(CDbl(1.234))。

J2EE 准则

下列准则旨在帮助您优化使用与 J2EE 环境一起使用的 ActiveX 到 EJB 网桥;

  • 全局存储客户机容器对象。

    因为每个进程只能有一个 JVM 指令,而每个 JVM 指令有单个 J2EE 客户机容器 (com.ibm.websphere.client.applicationclient.launchClient),所以只需初始化 J2EE 客户机容器一次并复用。对于 ASP 应用程序,将 J2EE 客户机容器存储在应用程序级别变量中,且它只能初始化一次(在 global.asa 文件中的 Application_OnStart() 事件上或通过检查查看它是否是 IsEmpty())。

    全局存储客户机容器对象的副作用是:不销毁对象并创建一个新的就不能更改客户机容器参数。这些参数包含 EAR 文件、引导主机、类路径等。 如果正在运行 Visual Basic 应用程序并希望更改客户机容器参数,您就必须结束此应用程序并重新将它启动。如果运行 Active Server Page 应用程序,那么必须首先从 Internet Information Server 卸装该应用程序(请参阅 Active Server Pages 准则下的“使用应用程序卸载按钮”)。然后,装入具有不同客户机容器参数的 Active Server Page 应用程序。Active Server Page 应用程序首次装入这些参数集合。由于客户机容器存储在 Internet Information Server 上,所以所有浏览器客户机使用 Active Server Page 应用程序共享这些参数。这种行为对于 Active Server Pages 代码非常正常,但是当您尝试使用相同的 Active Server Pages 应用程序,运行到不支持该应用程序的不同 WebSphere® Application Servers 时,这种行为会发生混淆。

  • 复用 EAR 文件解压缩的定制临时目录。

    缺省情况下,客户机容器启动应用程序 .ear 文件,并将它解压缩到您的临时目录,然后安装线程类装入器以使用解压缩的 EAR 文件目录和客户机 JAR 清单中包括的 JAR 文件。此进程耗时,而且由于通过 Java 本机接口 (JNI) 进行的 JVM 关闭和文件锁定方面的某些限制,这些文件从未进行过整理。

    明确地说,每次调用客户机容器 launch() 方法时,它都会将 EAR 文件解压缩到硬盘驱动器上的临时目录的一个随机目录名中。然后,更改当前的 Java 线程类装入器为指向该解压缩目录,而此目录会顺序锁定其中的文件。在正常的 J2EE Java 客户机中,这些文件会在应用程序退出后进行自动整理。当调用客户机容器关闭挂钩时会发生此清除(此情况决不会发生在 ActiveX 到 EJB 网桥中),但临时目录仍保留在那里。

    要避免这些问题,您可以指定解压缩 EAR 文件的目录,方法是设置com.ibm.websphere.client.applicationclient.archivedir Java 系统属性,然后调用客户机容器 launch() 方法。如果此目录不存在或为空,那么解压缩 EAR 文件仍会正常进行。如果先前已解压缩了 EAR 文件,将复用此目录。此功能对于可以停止和重新启动的服务器进程(例如,ASP)尤为重要,其可能多次调用 launchClient() 方法。

    如果您需要更新 EAR 文件,那么首先删除该临时目录。然后创建客户机容器对象,它将新的 EAR 文件解压缩到临时目录。如果您不删除临时目录或不将系统属性值更改为指向另一个临时目录,那么客户机容器将复用当前解压缩的 EAR 文件,而不使用您更改的 EAR 文件。

    注: 当指定 com.ibm.websphere.client.applicationclient.archivedir 属性时,确保您指定的目录对于所用的每个 EAR 文件都是唯一的。 例如,不要将 MyEar1.earMyEar2.ear 文件指向相同目录。

    如果选择不使用此系统属性,请定期访问 Windows temp 目录,删除 WSTMP* 子目录。过不了多长时间,这些子目录就会浪费可观的硬盘驱动器空间。


指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rcli_activexbestpractice
文件名:rcli_activexbestpractice.html