SIP-Anwendungskomposition konfigurieren
Im Standard JSR 116 für SIP-Anwendungen wird in Abschnitt 2.4 festgelegt, dass mehrere Anwendungen für dieselbe SIP-Anforderung aufgerufen werden können. Der Prozess, Anwendungen zu konfigurieren, die diesem Standard entsprechen, wird als Anwendungskomposition bezeichnet.
Informationen zu diesem Vorgang
Für die Anwendungskomposition werden Implementierungen benötigt, die ein kaskadierendes Servicemodell verwenden. Das kaskadierende Servicemodell erfordert einen sequenziellen Start der Serviceanwendungen, die auf demselben Host gestartet werden, so wie es beim Starten von Anwendungen auf unterschiedlichen Hosts der Fall ist. Deshalb werden die Antworten im Upstream-Verfahren übertragen und erreichen die Anwendungen in der umgekehrten Reihenfolge der entsprechenden Anforderungen.
Bei der ersten eingehenden Anforderung probiert der SIP-Container jede potenzielle Regel in der vorgegebenen Reihenfolge aus. Wenn der Container die n'te Übereinstimmung findet, ruft er das entsprechende Servlet auf.
Falls das Servlet die Anforderung über einen Proxy weiterleiten muss, überprüft der Container die Regeln erneut, um weitere Übereinstimmungen zu finden. Findet der Container die (n+1)'te Übereinstimmung, ruft er das entsprechende Servlet auf.
Alle Servlets, die sich in derselben Anwendung wie das zuvor aufgerufene Servlet befinden, werden vom Abgleichverfahren ausgeschlossen. Es ist nicht zulässig, ein Servlet zwei Mal für dieselbe SIP-Anforderung aufzurufen.
Sie können Prioritäten für das Laden beim Start definieren. Das Element <load-on-startup> in der Datei sip.xml definiert die Reihenfolge, in der Servlets beim Start initialisiert werden. Wenn der Wert dieser Einstellung kleiner als null ist, werden die Servlets initialisiert, wenn ihnen auf der Basis der Zuordnungsregel und der Zusammenstellungsreihenfolge die erste Anforderung zugeordnet wird. Null ist eine zulässige Wertigkeit für die Initialisierungsreihenfolge beim Start. Wenn dieses Tag nicht vorhanden ist oder wenn es einen negativen Wert enthält, wird das Servlet beim Start nicht initialisiert.
Fügen Sie <load-on-startup> auch demselben Tag in der Datei web.xml hinzu, wenn Sie die Datei manuell ändern. ´Der Web-Container lädt Servlets (und Siplets) und sucht nur in der Datei web.xml. Wenn Sie eine SAR-Datei implementieren, muss nur die Datei sip.xml geändert werden. Die Datei web.xml wird nach der Implementierung automatisch richtig erstellt.
Das Tag "load-on-startup", das im SIP-Implementierungsdeskriptor-Tag für ein Servlet integriert ist, gibt den Punkt in der Reihenfolge vor, an dem die Anwendung beim Starten des Servers geladen wird. Es gibt nicht ovr, wann die Anwendung aufgerufen wird, wenn die Anwendung zu einer Kette von Anwendungen gehört, die den Regeln für die Verarbeitung einer neuen eingehenden Nachricht entspricht.
Die Anfangswertigkeit für Anwendungen und ihre Module wird in der Datei deployment.xml angegeben. Die Reihenfolge, in der Module Anforderungen auswählen, wird zunächst nach den Wertigkeiten der Anwendungen und danach nach den Wertigkeiten der Module ermittelt. Sie können die folgenden Schritte in beliebiger Reihenfolge ausführen, um die Anwendungswertigkeiten oder Modulwertigkeiten über die Administrationskonsole festzulegen.
Vorgehensweise
- Zum Festlegen der Wertigkeiten von Anwendungen (EAR-Dateien) klicken Sie auf und definieren anschließend die Startreihenfolge.
- Zum Festlegen der Wertigkeiten von Modulen (WAR-Dateien) klicken Sie auf und definieren anschließend die Anfangswertigkeit.
- Starten Sie die geänderten Anwendungen erneut.
Beispiel
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>
Das folgende Beispiel bezieht sich auf einen eigenständigen Server.
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>