Eine Anwendung durch Programmierung aktualisieren
Sie können eine vorhandene Anwendung mit der Administrationskonsole, dem Tool "wsadmin" oder durch Programmierung aktualisieren. Dieses Beispiel veranschaulicht die Aktualisierung einer Anwendung durch Programmierung.
Vorbereitende Schritte
Für diese Task werden Grundkenntnisse in der Programmierung von MBeans vorausgesetzt. Weitere Informationen zur MBean-Programmierung finden Sie in der Dokumentation zu den MBean-Java™-APIs. Klicken Sie in diesem Information Center auf .
Bevor Sie eine Anwendung in WebSphere Application Server aktualisieren können, müssen Sie die Anwendung installieren.
Informationen zu diesem Vorgang
Führen Sie die folgenden Tasks aus, um eine Anwendung durch Programmierung vollständig zu aktualisieren.
Vorgehensweise
- Stellen Sie eine Verbindung zu WebSphere Application Server her.
- Erstellen Sie einen Proxy-Server für die Anwendungsverwaltung.
- Erstellen Sie den Benachrichtigungsfilter für den Empfang von Ereignissen.
- Fügen Sie den Listener hinzu.
- Bereiten Sie die EAR-Datei durch Hinzufügen der Bindungsinformationen vor.
- Aktualisieren Sie die Anwendung.
- Warten Sie ein Zeitlimit ab, damit das Programm nicht beendet wird.
- Warten Sie auf JMX-Benachrichtigungen (Java Management Extensions), um sich vom Abschluss der Operation zu überzeugen.
- Nachdem Sie die Anwendung aktualisiert haben, entfernen Sie den Listener und beenden das Programm.
Ergebnisse
Wenn der Code fehlerfrei ausgeführt wird, wurde die Anwendung aktualisiert.
Beispiel
Das folgende Beispiel zeigt, wie Sie basierend auf den zuvor beschriebenen Schritten eine Anwendung aktualisieren. Einige Anweisungen sind zur besseren Lesbarkeit auf mehrere Zeilen verteilt.
import java.lang.*;
import java.io.*;
import java.util.*;
import java.lang.reflect.*;
import com.ibm.websphere.management.application.*;
import com.ibm.websphere.management.application.client.*;
import com.ibm.websphere.management.*;
import javax.management.*;
public class aa {
public static void main(String[] args) {
try {
// Verbindung zu WebSphere Application Server herstellen.
String host = "localhost";
String port = "8880";
String target = "WebSphere:cell=cellName,node=nodeName,server=server1";
Properties config = new Properties();
config.put (AdminClient.CONNECTOR_HOST, host);
config.put (AdminClient.CONNECTOR_PORT, port);
config.put (AdminClient.CONNECTOR_TYPE, AdminClient.CONNECTOR_TYPE_SOAP);
System.out.println ("Config: " + config);
AdminClient _soapClient = AdminClientFactory.createAdminClient(config);
// Proxy für die Anwendungsverwaltung (AppManagement) erstellen.
AppManagement proxy = AppManagementProxy.getJMXProxyForClient (_soapClient);
String appName = "MyApp";
![[Windows]](../images/windows.gif)
String fileContents = "C:\test\test.ear";
![[Linux]](../images/linux.gif)
![[HP-UX]](../images/hpux.gif)
![[Solaris]](../images/solaris.gif)
![[AIX]](../images/aixlogo.gif)
![[z/OS]](../images/ngzos.gif)
![[IBM i]](../images/iseries.gif)
String fileContents = "/test/test.ear";
// Benachrichtigungsfilter erstellen.
NotificationFilterSupport myFilter = new NotificationFilterSupport();
myFilter.enableType (NotificationConstants.TYPE_APPMANAGEMENT);
//Listener hinzufügen
NotificationListener listener = new AListener(_soapClient, myFilter,
"Install: " + appName, AppNotification.INSTALL);
// Das Installationsbeispiel zeigt, wie Sie die EAR-Datei durch Hinzufügen von
// Bindungsinformationen vorbereiten können.
// Wenn der Code für die Vorbereitungsphase gestartet wurde, ist die Optionstabelle bereits vorhanden.
// Andernfalls eine neue Tabelle erstellen und die Modul/Serverbeziehung hinzufügen, indem
// Sie das Kommentarzeichen in der folgenden Zeile entfernen.
//Hashtable options = new Hashtable();
options.put (AppConstants.APPDEPL_LOCALE, Locale.getDefault());
options.put ((AppConstants.APPUPDATE_CONTENTTYPE, AppConstants.APPUPDATE_CONTENT_APP);
// Kommentarzeichen aus den folgenden Zeilen entfernen, um die Tabelle
// für die Modul/Server-Beziehung hinzuzufügen, sofern diese in der
// Vorbereitungsphase nicht erfasst wurde.
//Hashtable module2server = new Hashtable();
//module2server.put ("*", target);
//options.put (AppConstants.APPDEPL_MODULE_TO_SERVER, module2server);
// Update the application.
proxy.updateApplication ( appName,
null,
fileContents,
AppConstants.APPUPDATE_UPDATE,
options,
null);
// Zeitlimit abwarten. Die Installations-API ist
// asynchron und gibt sofort ein Ergebnis zurück.
// Falls das Programm an dieser Stelle nicht wartet, wird das Programm beendet.
Thread.sleep(300000); // Warten, damit das Programm nicht beendet wird
}
catch (Exception e) {
e.printStackTrace();
}
}
}
// JMX-Listener für Benachrichtigungen für JMX-Ereignisse angeben.
class AListener implements NotificationListener
{
AdminClient _soapClient;
NotificationFilterSupport myFilter;
Object handback;
ObjectName on;
String eventTypeToCheck;
public AListener(AdminClient cl, NotificationFilterSupport fl,
Object h, String eType) throws Exception
{
_soapClient = cl;
myFilter = fl;
handback = h;
eventTypeToCheck = eType;
Iterator iter = _soapClient.queryNames (new ObjectName(
"WebSphere:type=AppManagement,*"), null).iterator();
on = (ObjectName)iter.next();
System.out.println ("ObjectName: " + on);
_soapClient.addNotificationListener (on, this, myFilter, handback);
}
public void handleNotification (Notification notf, Object handback)
{
AppNotification ev = (AppNotification) notf.getUserData();
System.out.println ("!! JMX event Recd: (handback obj= " + handback+ "): " + ev);
//Nach Abschluss der Installation Listener entfernen und Programm beenden.
if (ev.taskName.equals (eventTypeToCheck) &&
(ev.taskStatus.equals (AppNotification.STATUS_COMPLETED) ||
ev.taskStatus.equals (AppNotification.STATUS_FAILED)))
{
try
{
_soapClient.removeNotificationListener (on, this);
}
catch (Throwable th)
{
System.out.println ("Error removing listener: " + th);
}
System.exit (0);
}
}
}