HomeDocumentation > Apache Geronimo v1.1 - Guí­a de Usuario > Aplicaciones ejemplo > Exponiendo Aplicaciones Web en puertos distintos
{scrollbar}

top

Podrías requerir el ejecutar aplicaciones web distintas en puertos distintos. Por ejemplo, podrías requerir una aplicación de administración en un puerto distinto al de una aplicación de producción.

Este ejemplo también demuestra como iniciar a escuchar en los puertos después de que las aplicaciones web han sido completamente activadas y están listas a ser usadas.

Ejemplo con Tomcat

En tomcat no-geronimo puedes hacerlo con incluir dos ó más definiciones de servidor en tu archivo server.xml, e incluyendo las aplicaciones en los elementos servidor. Es posible preparar esencialmente la misma estructura en geronimo.

He aquí una aplicación ejemplo:

http://issues.apache.org/jira/secure/attachment/12334215/appPerPort.ear

Si la desempacas la puedes activar en sitio (inplace) con algo como

java -jar bin/deployer.jar deploy --inPlace appPerPort.ear
(Asumiento que previamente ingresaste al deployer)

A continuación se muestra el plan, con un poco de explicación. Lo primero es que los gbeans en el ear enfocan el inicio; esto inicia 2 servidores tomcat pero sin conectores para ellos.

Después las tres aplicaciones web inician en orden. Las dos primeras son aplicaciones web con contenido. Nota que cada una tiene un gbean-link web-container hacia el contenedor web apropiado que acaba de iniciar.

La tercer aplicación web tiene el conector gbeans para los contenedores web que iniciamos. Nota que las aplicaciones web son módulos así como el ear en si mismo, y que los módulos web inician en el mismo orden en el cual esten listados en application.xml. Recuerda también que para que un módulo pueda iniciar, todos sus gbeans deben iniciar completamente. Por ende, primero tenemos el inicio de los contenedores tomcat, después la activación de las aplicaciones web hacia distintos contenedores tomcat, y finalmente al completar el inicio de las aplicaciones web, los conectores que abren listeners en los dos puertos distintos.

Colocando al conector gbeans en una aplicación web no vacía tiene éxito en la demora de la apertura de puertos hasta después de que las aplicaciones estén listas, pero no es propiamente elegante. Si deseas tener más que un módulo, puedes colocar al conector gbeans en un plan de servicio y enlistar al ear como una dependencia para obtener el mismo efecto.

xmlsolidgeronimo-application.xml <?xml version="1.0" encoding="UTF-8"?> <!-- Copyright 2004-2005 The Apache Software Foundation Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <!-- $Rev: 395697 $ $Date: 2006-04-20 14:07:47 -0700 (Thu, 20 Apr 2006) $ --> <application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.1"> <dep:environment xmlns:dep="http://geronimo.apache.org/xml/ns/deployment-1.1"> <dep:moduleId> <dep:groupId>geronimo</dep:groupId> <dep:artifactId>appPerPort-tomcat</dep:artifactId> <dep:version>1.1-SNAPSHOT</dep:version> <dep:type>car</dep:type> </dep:moduleId> <dep:dependencies> <dep:dependency> <dep:groupId>geronimo</dep:groupId> <dep:artifactId>tomcat</dep:artifactId> <dep:type>car</dep:type> </dep:dependency> </dep:dependencies> <dep:hidden-classes/> <dep:non-overridable-classes/> </dep:environment> <module> <web>war1.war</web> <web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-1.1"> <context-priority-classloader>false</context-priority-classloader> <web-container> <gbean-link>TomcatWebContainer1</gbean-link> </web-container> </web-app> </module> <module> <web>war2.war</web> <web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-1.1"> <context-priority-classloader>false</context-priority-classloader> <web-container> <gbean-link>TomcatWebContainer2</gbean-link> </web-container> </web-app> </module> <module> <web>connectors.war</web> <web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-1.1"> <context-priority-classloader>false</context-priority-classloader> <gbean name="TomcatWebConnector1" class="org.apache.geronimo.tomcat.ConnectorGBean"> <attribute name="name">HTTP</attribute> <attribute name="host">localhost</attribute> <attribute name="port">8081</attribute> <attribute name="maxHttpHeaderSizeBytes">8192</attribute> <attribute name="maxThreads">150</attribute> <attribute name="minSpareThreads">25</attribute> <attribute name="maxSpareThreads">75</attribute> <attribute name="hostLookupEnabled">false</attribute> <attribute name="redirectPort">8453</attribute> <attribute name="acceptQueueSize">100</attribute> <attribute name="connectionTimeoutMillis">20000</attribute> <attribute name="uploadTimeoutEnabled">false</attribute> <reference name="TomcatContainer"> <name>TomcatWebContainer1</name> </reference> </gbean> <gbean name="TomcatWebConnector2" class="org.apache.geronimo.tomcat.ConnectorGBean"> <attribute name="name">HTTP</attribute> <attribute name="host">localhost</attribute> <attribute name="port">8082</attribute> <attribute name="maxHttpHeaderSizeBytes">8192</attribute> <attribute name="maxThreads">150</attribute> <attribute name="minSpareThreads">25</attribute> <attribute name="maxSpareThreads">75</attribute> <attribute name="hostLookupEnabled">false</attribute> <attribute name="redirectPort">8453</attribute> <attribute name="acceptQueueSize">100</attribute> <attribute name="connectionTimeoutMillis">20000</attribute> <attribute name="uploadTimeoutEnabled">false</attribute> <reference name="TomcatContainer"> <name>TomcatWebContainer2</name> </reference> </gbean> </web-app> </module> <gbean name="TomcatWebContainer1" class="org.apache.geronimo.tomcat.TomcatContainer"> <attribute name="catalinaHome">var/catalina</attribute> <reference name="EngineGBean"> <name>TomcatEngine1</name> </reference> <reference name="ServerInfo"> <name>ServerInfo</name> </reference> <reference name="WebManager"> <name>TomcatWebManager</name> </reference> </gbean> <gbean name="TomcatEngine1" class="org.apache.geronimo.tomcat.EngineGBean"> <attribute name="className">org.apache.geronimo.tomcat.TomcatEngine</attribute> <attribute name="initParams"> name=Geronimo1 </attribute> <reference name="DefaultHost"> <name>TomcatHost1</name> </reference> <references name="Hosts"> <pattern> <name>TomcatHost1</name> </pattern> </references> <reference name="RealmGBean"> <name>TomcatJAASRealm</name> </reference> </gbean> <gbean name="TomcatHost1" class="org.apache.geronimo.tomcat.HostGBean"> <attribute name="className">org.apache.catalina.core.StandardHost</attribute> <attribute name="initParams"> name=localhost appBase= workDir=work </attribute> </gbean> <gbean name="TomcatWebContainer2" class="org.apache.geronimo.tomcat.TomcatContainer"> <attribute name="catalinaHome">var/catalina</attribute> <reference name="EngineGBean"> <name>TomcatEngine2</name> </reference> <reference name="ServerInfo"> <name>ServerInfo</name> </reference> <reference name="WebManager"> <name>TomcatWebManager</name> </reference> </gbean> <gbean name="TomcatEngine2" class="org.apache.geronimo.tomcat.EngineGBean"> <attribute name="className">org.apache.geronimo.tomcat.TomcatEngine</attribute> <attribute name="initParams"> name=Geronimo2 </attribute> <reference name="DefaultHost"> <name>TomcatHost2</name> </reference> <references name="Hosts"> <pattern> <name>TomcatHost2</name> </pattern> </references> <reference name="RealmGBean"> <name>TomcatJAASRealm</name> </reference> </gbean> <gbean name="TomcatHost2" class="org.apache.geronimo.tomcat.HostGBean"> <attribute name="className">org.apache.catalina.core.StandardHost</attribute> <attribute name="initParams"> name=localhost appBase= workDir=work </attribute> </gbean> </application>

Jetty

Aplicaciones web en Jetty tienen la misma capacidad de especificar qué contenedor jetty debería ser usado, sin embargo, no tenemos un plan ejemplo para demostrar su funcionamiento.

Es posible que exista una forma más simple para limitar en qué puertos esta disponible una aplicación en un contenedor web jetty, por lo cual en jetty no se requerirían dos contenedores jetty. Lo anterior requiere mayor investigación.