Sugerencias de hebras para programación de clientes ActiveX

El puente de ActiveX a Enterprise JavaBeans (EJB) da soporte al acceso con hebras libres y con hebras de departamento e implementa el Marshaler con hebras libres para que funcione en un entorno híbrido como, por ejemplo, Active Server Pages (ASP). Cada hebra creada en el proceso ActiveX se duplica en el entorno Java™ cuando la hebra se comunica a través del puente ActiveX a EJB.

Cuando todas las referencias a objetos Java (no hay objetos JObjectProxy o JClassProxy ) se cargan en una hebra ActiveX , el puente de ActiveX a EJB desconecta la hebra del código de la máquina virtual Java (JVM). Por lo tanto, debe tener cuidado de que cualquier código Java al que acceda desde una aplicación Windows multihebra sea seguro para hebras. Esencialmente, el código Visual Basic y las aplicaciones VBScript son de hebras individuales. Por lo tanto, las aplicaciones Visual Basic y VBScript no tienen problemas de hebras en los programas Java a los que acceden. Active Server Pages y los programas C y C++ de varias hebras pueden tener problemas.

Consideremos el escenario siguiente:
  1. Se inicia un contenedor de automatización de Windows multihebra (nuestro proceso ActiveX ). Existe en la hebra A.
  2. El proceso ActiveX inicializa el puente de ActiveX a EJB, el cual inicia el código JVM. La JVM se conecta a la misma hebra y llama internamente a la hebra 1.
  3. El proceso ActiveX inicia dos hebras: B y C.
  4. La hebra B del proceso ActiveX utiliza el puente de ActiveX a EJB para acceder a un objeto que se ha creado en la hebra A. La JVM se conecta a la hebra B y la llama hebra 2.
  5. La hebra C del proceso ActiveX no se comunica nunca con el código JVM, por lo tanto, JVM no necesita nunca conectarse a la misma. Este es un caso en el que el código JVM no tiene una relación de uno a uno entre las hebras ActiveX y las hebras Java.
  6. Posteriormente, la hebra B libera todos los objetos JObjectProxy y JClassProxy que utiliza. La hebra 2 de Java está desconectada.
  7. La hebra B vuelve a utilizar el puente de ActiveX a EJB para acceder a un objeto que se ha creado en la hebra A. Una vez más, el código JVM se conecta a la hebra y la llama hebra 3.
Tabla 1. Escenario de hebra.. Escenario de hebra
Proceso ActiveX Acceso a JVM mediante el proceso ActiveX
Hebra A - creada en 1 Hebra 1 - conectada a 2
Hebra B - creada en 4 Hebra 2 - conectada en 4, desconectada en 6 Hebra 3 - Conectada en 7
Hebra C - Creada en 4  

Hebras y Active Server Pages

Active Server Pages (ASP) en Microsoft Internet Information Server es un entorno multihebra. Cuando cree el objeto XJB.JClassFactory, puede almacenarlo en la agrupación de aplicaciones como un objeto global de aplicación. Ahora, todas las hebras del entorno ASP pueden acceder al mismo objeto de puente de ActiveX a EJB. De forma predeterminada, Active Server Pages crean 10 hebras de departamentos por proceso ASP para cada CPU. Esto significa que cuando se inicializa el objeto de puente de ActiveX a EJB, cualquiera de las 10 hebras pueden llamarlo, y no simplemente la hebra que lo ha creado.

Si tiene que simular el comportamiento de un solo apartamento, puede crear una biblioteca de enlaces dinámicos (DLL) de ActiveX de hebras de un solo apartamento en el código Visual Basic y encapsular el objeto de puente de Active X a EJB. Esta encapsulación garantiza que todos los accesos al objeto JVM se hagan en la misma hebra. Debe utilizar el código < OBJECT > para asignar el XJB XJB.JClassFactory a un objeto de aplicación y debe ser consciente de las consecuencias de introducir un comportamiento de una sola hebra en una aplicación web.

Microsoft KnowlegeBase tiene varios artículos sobre ASP y hebras, incluyendo:
  • Q243543 INFO: Do Not Store STA Objects in Session or Application
  • Q243544 INFO: Component Threading Model Summary Under Active Server Pages
  • Q243548 INFO: Design Guidelines for VB Components Under ASP