ActiveX 客户机编程(线程技术技巧)

ActiveX 到 Enterprise JavaBeans (EJB) 网桥支持自由线程访问和单元线程访问,并使自由线程封送拆收器能够在混合环境(如 Active Server Page (ASP))中运行。ActiveX 进程中创建的每个线程都将在线程通过 ActiveX 到 EJB 网桥通信时在 Java™ 环境中反映出来。

当所有对 Java 对象的引用(没有 JObjectProxy 或 JClassProxy 对象)都被装入到 ActiveX 线程中时,ActiveX 到 EJB 网桥就通过 Java 虚拟机 (JVM) 代码拆离该线程。因此,您必须注意确保从多线程的 Windows 应用程序访问的任何 Java 代码是线程安全的状态。Visual Basic 代码和 VBScript 应用程序本质上都是单线程的。因此,Visual Basic 和 VBScript 应用程序访问 Java 程序时不会遇到其中的线程技术问题。Active Server Page 与多线程 C 和 C++ 程序可能会有问题。

请考虑下列情况:
  1. “多线程 Windows 自动化容器”(我们的“ActiveX 进程”)开始。它位于线程 A。
  2. ActiveX 进程初始化 ActiveX 到 EJB 网桥,它启动 JVM 代码。JVM 连接到同一线程并内部地将其称为 Thread 1。
  3. ActiveX 进程启动两个线程:B 和 C。
  4. ActiveX 进程中的线程 B 使用 ActiveX 到 EJB 网桥访问线程 A 中创建的对象。JVM 连接到线程 B 并将其称为 Thread 2。
  5. ActiveX 进程中的线程 C 从不与 JVM 代码交流,因此 JVM 从不需要连接到。当 JVM 代码在 ActiveX 线程和 Java 线程之间没有形成一对一关系时,会出现这种情况。
  6. 线程 B 稍后释放其使用的所有 JObjectProxy 和 JClassProxy 对象。Java Thread 2 被分离。
  7. 线程 B 再次使用 ActiveX 到 EJB 网桥访问线程 A 中创建的对象。JVM 代码再次连接到线程并将其称为 Thread 3。
表 1. 线程情形. 线程场景
ActiveX 进程 由 ActiveX 进程访问的 JVM
线程 A - 在 1 中创建 Thread 1 - 在 2 中连接
线程 B - 在 4 中创建 Thread 2 - 在 4 中连接,在 6 Thread 3 中分离 - 在 7 中连接
线程 C - 在 4 中创建  

线程和 Active Server Page

Microsoft Internet Information Server 中的 Active Server Page (ASP) 是多线程环境。当您创建 XJB.JClassFactory 对象时,您可以将其存储到应用程序集合中作为应用程序全局对象。 现在,ASP 环境中的所有线程都访问相同的 ActiveX 到 EJB 网桥对象。Active Server Page 在缺省情况下对每个 CPU 每个 ASP 进程创建 10 个单元线程。这意味着当初始化您的 ActiveX 到 EJB 网桥对象时,它可以通过 10 个线程的任何一个调用该对象,而不是仅通过创建该对象的那一个线程。

如果您需要模拟 single-apartment 的行为,可以用 Visual Basic 代码创建 single-apartment 线程的 ActiveX 动态链接库 (DLL) 并封装 ActiveX 到 EJB 网桥对象。 此封装保证所有到 JVM 对象的访问都使用了相同的线程。您需要使用 <OBJECT> 标记将 XJB.JClassFactory 指定给应用程序对象,并且必须明白将单线程的行为引入到 Web 应用程序后的结果。

Microsoft KnowlegeBase 中有几篇关于 ASP 和线程的文章,其中包括:
  • Q243543 INFO:不要将 STA 对象存储到会话或应用程序中
  • Q243544 INFO:在 Active Server Page 下的组件线程模型摘要
  • Q243548 INFO:为 ASP 下的 VB 组件设计准则

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



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