Work Manager en Weblogic

De Dos Ideas.
Saltar a: navegación, buscar

Un Work Manager en Weblogic permite, entre otras cosas, crear limitaciones para los hilos (threads) de aquellas aplicaciones que estén asociadas a él.

Configuración en Weblogic 10.x

El proceso consiste en crear por consola el Work Manager en si, y luego un componente especifico por cada limitación que quisiéramos activar.

El primer paso es ir a la consola del Weblogic --> Enviroment --> Work Managers --> New --> Work Manager. El nombre que elijamos luego lo utilizaremos en la aplicacion destino.

Luego debemos crear un componente por tipo de limitación que necesitamos.

Si por ejemplo queremos que se ejecuten como máximo dos hilos y otros dos queden encolados, creamos un Maximum Threads Constraint con valor dos y Capacity Constraint con valor 4.

Paso siguiente ingresamos en el Work Manager que creamos al comienzo, y le asignamos las limitaciones correspondientes. Recordar que al hacer este paso debemos reiniciar los servidores donde afecte dicha configuración.

Finalmente debemos decirle a nuestra aplicacion que utilice un Work Manager específico y no el default que provee Weblogic. Esto se configura en los descriptores de nuestra aplicación. En el caso de una aplicacion web, lo indicamos en el weblogic.xml:

<?xml version="1.0" encoding="UTF-8"?>

<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">

 <context-root>/conexto-aplicacion</context-root>
 
 <wl-dispatch-policy>miWorkManager</wl-dispatch-policy>
 

</weblogic-web-app>

Configuración en aplicación

También es posible crearlos y configurarlos en la aplicación, esto es mediante los descriptores de los respectivos módulos.

El ejemplo se basa en dos Work Manager, el web con una capacidad máxima de 7 Threads y una cantidad máxima de 5 Threads de procesamiento y el ejb con una cantidad máxima de 5 Threads de procesamiento.

Por ejemplo en el caso de que lleguen 10 peticiones HTTP, se procesaran 5 en el momento, 2 quedaran encoladas para ser procesadas y 3 serán rechazadas con un error HTTP 503. En el caso del modulo EJB, lo que ocurre con el MDB es que se podrán procesar solo 5 mensajes en paralelo y el resto quedara en la cola a la espera de ser procesados.

Modulo WEB

Creación del Work Manager, esto se especifica en el archivo weblogic.xml.

<?xml version="1.0" encoding="UTF-8"?> <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd"> <wls:weblogic-version>10.3.2</wls:weblogic-version>

 <wls:context-root>/workmanager-demo-web</wls:context-root>
   <wls:work-manager>
     <wls:name>WorkManagerdemo_web</wls:name>
     <wls:max-threads-constraint>
       <wls:name>5-Max-Threads</wls:name>
       <wls:count>5</wls:count>
     </wls:max-threads-constraint>
     <wls:capacity>
       <wls:name>7-Max-Capacity</wls:name>
       <wls:count>7</wls:count>
     </wls:capacity>
 </wls:work-manager>

</wls:weblogic-web-app>

Ahora hay que relacionar los servlet con el Work Manager, esto se especifica en el archivo web.xml.

<servlet>

 <servlet-name>WorkManagerServlet</servlet-name>
 <servlet-class>com.dosideas.controller.WorkManagerServlet</servlet-class>
 <init-param>
   <param-name>wl-dispatch-policy</param-name>
   <param-value>WorkManagerdemo_web</param-value>
 </init-param>

</servlet>

Modulo EJB

En este caso la creación y la asociación del Work Manager a los componentes se especifica en el mismo archivo weblogic-ejb-jar.xml.

<?xml version="1.0" encoding="UTF-8"?> <weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd">

 <weblogic-enterprise-bean>
   <ejb-name>WorkManagerMdb</ejb-name>
   <message-driven-descriptor>
     <pool>
       <max-beans-in-free-pool>5</max-beans-in-free-pool>
       <initial-beans-in-free-pool>
         1
       </initial-beans-in-free-pool>
     </pool>
     <destination-jndi-name>demo-queue</destination-jndi-name>
     <connection-factory-jndi-name>
       DemoConnectionFactory
     </connection-factory-jndi-name>
     </message-driven-descriptor>
     <enable-call-by-reference>true</enable-call-by-reference>
     <dispatch-policy>workManagerdemo_mdb</dispatch-policy>
 </weblogic-enterprise-bean>
 <work-manager>
   <name>workManagerdemo_mdb</name>
   <max-threads-constraint>
     <name>5-Max-Threads</name>
     <count>5</count>
   </max-threads-constraint>
 </work-manager>

</weblogic-ejb-jar>