Diferencia entre revisiones de «Work Manager en Weblogic»
(→Modulo EJB) |
(→Configuración en aplicación) |
||
Línea 31: | Línea 31: | ||
También es posible crearlos y configurarlos en la aplicación, esto es mediante los descriptores de los respectivos módulos. | 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 con una capacidad máxima de 7 Threads y una cantidad máxima de 5 Threads de procesamiento. | + | 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. | 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. |
Revisión del 13:10 10 feb 2012
Un Work Manager en Weblogic permite, entre otras cosas, crear limitaciones para los hilos (threads) de aquellas aplicaciones que estén asociadas a él.
Contenido
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> Creación del Work Manager, esto se especifica en el archivo