Tareas de perfilado de aplicaciones
Las tareas se denominan unidades de trabajo. Son el mecanismo mediante el cual el entorno de ejecución determina qué políticas de intento de acceso se deben aplicar cuando se cargan los datos de un bean de entidad desde el sistema del programa de fondo.
Con los perfiles de aplicación, los desarrolladores pueden configurar un bean de entidad con varias políticas de intento de acceso; si hay n instancias de perfiles en una aplicación determinada, cada bean se puede configurar con hasta n políticas de intento de acceso.
Una tarea está asociada con una transacción o una sesión de actividad al inicio de la unidad de trabajo. La tarea, que no puede cambiar durante la duración de la unidad de trabajo, está siempre disponible en cualquier punto del ámbito de esa unidad de trabajo para aplicar la política de intento de acceso configurada para esa unidad de trabajo.
Si se configura una aplicación empresarial para utilizar perfiles de aplicación en cualquier parte de ésta, estarán activos los perfiles de la aplicación y las configuraciones de intento de acceso a nivel de método se ignorarán cuando se asocien unidades de trabajo a tareas conocidas para la aplicación.
Si se carga un bean de entidad en una unidad de trabajo que no está asociada con una tarea, o si se asocia con una tarea que no está asociada con un perfil de aplicación, se aplica la configuración de intento de acceso a nivel de bean o de intento de acceso a nivel de método. Si se asocia una unidad de trabajo con una tarea que está configurada con un perfil de aplicación, se aplica la configuración de intento de acceso a nivel de bean dentro del perfil de aplicación correspondiente.
Por ejemplo, una aplicación tiene dos módulos EJB: EJBModule1 y EJBModule2.
EJBModule1 tiene un perfil de aplicación denominado AppProfile1. Este AppProfile1 está registrado por una tarea denominada task1. Esta task1 se convierte en una tarea conocida para la aplicación y se reconoce cuando se asocia con una unidad de trabajo dentro de esta aplicación. Con la presencia de cualquier tarea conocida para la aplicación, se ignoran las configuraciones de intentos de acceso de nivel de método y sólo se aplican las configuraciones de intentos de acceso de nivel de bean.
EJBModule2 no contiene datos de configuración de perfiles de aplicaciones. Todos los beans de entidad no están configurados con intento de acceso de nivel de bean explícitamente, pero algunos métodos tienen configuraciones de intentos de acceso de nivel de método. Si se carga un bean de entidad de EJBModule2 en una unidad de trabajo que está asociada con task1, la configuración de intentos de acceso de nivel de bean se aplica y la configuración de intentos de acceso de nivel de método se ignora. Puesto que el intento de acceso de nivel de bean no se ha establecido de forma explícita, se aplica el intento de acceso de nivel de bean, que es wsPessimisticUpdate-WeakestLockAtLoad.
La tarea activa depende del mecanismo de la unidad de trabajo actual. Si la unidad de trabajo actual es una transacción global, la tarea es el nombre asociado con esa transacción. Si a la transacción global no se le asignó un nombre cuando se inició, no habrá ninguna tarea activa en ningún punto del ámbito de esa transacción.
Si la unidad de trabajo actual es una transacción local asociada con una sesión de actividad, la tarea es el nombre asociado con esa sesión de actividad. Si a la sesión de actividad no se le asignó un nombre cuando se inició, no habrá ninguna tarea activa para ninguna transacción local enlazada a esa sesión de actividad. Si la unidad de trabajo actual es una transacción local que no está asociada con una sesión de actividad, la tarea será el nombre asociado con esa transacción local. Si la transacción local no se asoció con una tarea cuando se inició la transacción local, no hay ninguna tarea activa durante la duración de dicha transacción local. En otras palabras, la tarea activa es la tarea asociada con la unidad de trabajo en la hebra que esta coordinando los recursos de la base de datos. Si la unidad de trabajo de control no se asoció con una tarea cuando se inició esa unidad de trabajo, no hay ninguna tarea activa en el ámbito de esa unidad de trabajo,
Por ejemplo, consideremos la aplicación de una escuela que realiza llamadas mediante un bean de sesión para interactuar con los registros de los estudiantes. Un método del bean de sesión permite a los administradores modificar los registros de los estudiantes; otro método da soporte a las solicitudes de los estudiantes para ver sus propios registros. Sin el perfilado de aplicaciones, las dos tareas funcionarán de forma anónima y el entorno de ejecución no podrá distinguir el trabajo que se lleva a cabo en nombre de una tarea o de otra. Para optimizar la aplicación, el desarrollador puede configurar uno de los métodos del bean de sesión con la tarea "updateRecords" y el otro método del bean de sesión con la tarea "readRecords". Cuando se registra con un perfil de aplicación que tiene el bean del estudiante configurado con el intento de acceso de bloqueo correspondiente, se garantiza a la tarea "updateRecords" que no se bloquean innecesariamente transacciones que se necesitan para sólo leer los registros. Para obtener más información sobre las relaciones entre tareas y unidades de trabajo, consulte Consideraciones acerca de las tareas y las unidades de trabajo.
Las tareas se pueden configurar para que las gestione el contenedor o para que la aplicación las establezca mediante programación. Las tareas gestionadas por contenedor se pueden configurar en servlets, archivos JSP (JavaServer Pages), clientes de aplicaciones y en los métodos de los EJB (Enterprise JavaBeans Beans). Las tareas gestionadas por contenedor configuradas se asocian sólo con unidades de trabajo que el contenedor inicia después de que se haya establecido el nombre de tarea. Las tareas gestionadas por la aplicación se pueden configurar en todos los componentes J2EE. En el caso de los enterprise beans, deben ser transacciones gestionadas por bean.
Para que un cliente de la Versión 6.x interactúe con aplicaciones ejecutadas bajo la modalidad de compatibilidad de perfilado de aplicaciones 5.x, debe establecer la propiedad de sistema appprofileCompatibility en true en el proceso de cliente. Para ello, especifique la opción -CCDappprofileCompatibility=true cuando invoque el mandato launchClient.