Diferencia entre revisiones de «Work Manager en Weblogic»
(Página creada con '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 We…') |
(→Modulo EJB) |
||
(No se muestran 6 ediciones intermedias del mismo usuario) | |||
Línea 25: | Línea 25: | ||
</weblogic-web-app> | </weblogic-web-app> | ||
+ | </code> | ||
+ | |||
+ | == 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. | ||
+ | |||
+ | <code 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> | ||
+ | </code> | ||
+ | |||
+ | Ahora hay que relacionar los servlet con el Work Manager, esto se especifica en el archivo web.xml. | ||
+ | |||
+ | <code 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> | ||
+ | </code> | ||
+ | |||
+ | === 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. | ||
+ | |||
+ | <code 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> | ||
</code> | </code> |
Revisión actual del 13:11 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>