Configurando Composição de Aplicativos SIP
O padrão JSR 116 para aplicativos SIP declara na seção 2.4 que vários aplicativos podem ser chamados no mesmo pedido SIP. O processo de configuração de aplicativos em conformidade com esse padrão é chamado composição de aplicativos.
Sobre Esta Tarefa
A composição de aplicativos exige que as implementações utilizem um modelo de serviços em cascata. O modelo de serviços em cascata exige que os aplicativos de serviços acionados no mesmo host sejam acionados em sequência, como se o acionamento ocorresse em hosts diferentes. Por isso, as respostas fluem na direção contrária ao fluxo e atingem os aplicativos na ordem inversa dos pedidos correspondentes.
No caso de um pedido de entrada inicial, o contêiner SIP tenta cada regra potencial na ordem. Quando o contêiner encontra a correspondência nth, ele chama o servlet correspondente.
Se o servlet precisar de um proxy para o pedido, o contêiner varrerá as regras novamente para procurar correspondências adicionais. Quando o contêiner encontra a correspondência (n+1)th, ele chama o servlet correspondente.
Todo servlet no mesmo aplicativo do servlet chamado anteriormente é excluído do processo de correspondência. Nenhum servlet pode ser chamado duas vezes para o mesmo pedido SIP.
É possível especificar o carregamento na prioridade de inicialização. <load-on-startup> em sip.xml define a ordem na qual os servlets são inicializados na inicialização. Se esse valor for menor que zero, os servlets serão inicializados quando o primeiro pedido corresponder a eles de acordo com a regra de correspondência e a ordem de composição. Zero é um peso legítimo para a ordem de inicialização. Se essa tag não existir ou contiver um valor negativo, o servlet não será inicializado na inicialização.
Você também deve incluir <load-on-startup> à mesma tag em web.xml, se estiver alterando manualmente. É o WebContainer que carrega os servlets (e siplets) e procura apenas no web.xml. Ao implementar um SAR, apenas o sip.xml precisa ser alterado. web.xml é automaticamente construído corretamente após a implementação.
A tag load-on-startup integrada na tag do descritor de implementação do SIP para um servlet indica a ordem em que o aplicativo é carregado na inicialização do servidor. Ela não dita a ordem em que um aplicativo é chamado quando o aplicativo é um membro de uma cadeia de composição do aplicativo, que corresponde as regras ao processo de uma nova mensagem de entrada.
O peso inicial para aplicativos e seus módulos é especificado no arquivo deployment.xml. A ordem na qual os módulos selecionam os pedidos na composição é avaliada pelo peso dos aplicativos primeiro e depois pelo peso dos módulos. As etapas a seguir podem ser concluídas em qualquer ordem para especificar o peso dos aplicativos ou dos módulos no console administrativo.
Procedimento
- Para especificar o peso dos aplicativos (EARs), expanda e defina a ordem de inicialização.
- Para especificar o peso dos módulos (WARs), expanda e defina o peso inicial.
- Reinicie os aplicativos alterados.
Exemplo
sip.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sip-app
PUBLIC "-//Java Community Process//DTD SIP Application 1.0//EN"
"http://www.jcp.org/dtd/sip-app_1_0.dtd">
<sip-app>
<display-name>SIPSampleProxy</display-name>
<servlet>
<servlet-name>SIPSampleProxy</servlet-name>
<servlet-class>sipes.test.container.proxy.SIPSampleProxy</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SIPSampleProxy</servlet-name>
<pattern>
<equal>
<var>request.uri.user</var>
<value>SIPSampleProxy</value>
</equal>
</pattern>
</servlet-mapping>
<proxy-config>
<sequential-search-timeout>1000</sequential-search-timeout>
</proxy-config>
<session-config>
<session-timeout>12</session-timeout>
</session-config>
</sip-app>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="WebApp">
<display-name>SIPSampleProxy</display-name>
<servlet>
<servlet-name>SIPSampleProxy</servlet-name>
<display-name>SIPSampleProxy</display-name>
<servlet-class>sipes.test.container.proxy.SIPSampleProxy</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SIPSampleProxy</servlet-name>
<url-pattern>/SIPSampleProxy</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
O exemplo a seguir é para um servidor independente.
deployment.xml
<?xml version="1.0" encoding="UTF-8" ?>
- <appdeployment:Deployment xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI"
xmlns:appdeployment="http://www.ibm.com/websphere/appserver/schemas/5.0/appdeployment.xmi"
xmi:id="Deployment_1137951186883">
- <deployedObject xmi:type="appdeployment:ApplicationDeployment" xmi:id="ApplicationDeployment_1137951186883" deploymentId="0" startingWeight="1" binariesURL="$(APP_INSTALL_ROOT)/OrangeNode08Cell/SipContainerTestSuite.ear" useMetadataFromBinaries="false" enableDistribution="true" createMBeansForResources="true" reloadEnabled="false" appContextIDForSecurity="href:OrangeNode08Cell/SipContainerTestSuite" filePermission=".*\.dll=755#.*\.so=755#.*\.a=755#.*\.sl=755" allowDispatchRemoteInclude="false" allowServiceRemoteInclude="false">
<targetMappings xmi:id="DeploymentTargetMapping_1137951186883" enable="true" target="ServerTarget_1137951186883" />
<classloader xmi:id="Classloader_1137951186883" mode="PARENT_FIRST" />
- <modules xmi:type="appdeployment:WebModuleDeployment" xmi:id="WebModuleDeployment_1137951186883" deploymentId="1" startingWeight="10000" uri="sipunit.war">
<targetMappings xmi:id="DeploymentTargetMapping_1137951186884" target="ServerTarget_1137951186883" />
<classloader xmi:id="Classloader_1137951186884" /> </modules>
<properties xmi:id="Property_1137951186883" name="validateinstall" value="warn" /> </deployedObject>
<deploymentTargets xmi:type="appdeployment:ServerTarget" xmi:id="ServerTarget_1137951186883"
name="server1" nodeName="OrangeNode10" /> </appdeployment:Deployment>