Ein Modul vorbereiten und durch Programmierung einer vorhandenen Anwendung hinzufügen

Sie können ein Modul mit der Administrationskonsole, mit dem Tool "wsadmin" oder durch Programmierung einer vorhandenen Anwendung hinzufügen. Das folgende Beispiel veranschaulicht das Hinzufügen eines Moduls 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 Referenz > MBean-Schnittstellen.

Bevor Sie ein Modul einer Anwendung in WebSphere Application Server hinzufügen können, müssen Ihre Anwendung installieren.

Informationen zu diesem Vorgang

Führen Sie die folgenden Tasks aus, um einer Anwendung durch Programmierung ein Modul hinzuzufügen.

Vorgehensweise

  1. Erstellen Sie eine Controller-Instanz für die Anwendungsimplementierung, um die Moduldatei mit Bindungsinformationen zu füllen.
  2. Speichern Sie die Bindungsinformationen im Modul.
  3. Ermitteln Sie die Installationsoptionen.
  4. Wenn Sie die Vorbereitungsphase (Füllen der EAR-Datei) überspringen, führen Sie die folgenden Aktionen aus:
    1. Erstellen Sie eine Optionstabelle, die an die MBean-API updateApplication übergeben werden soll.
    2. Erstellen Sie eine Tabelle für die Modul/Server-Beziehungen, und fügen Sie die Tabelle der Optionstabelle hinzu.
  5. Stellen Sie eine Verbindung zu WebSphere Application Server her.
  6. Erstellen Sie einen Proxy-Server für die Anwendungsverwaltung.
  7. Erstellen Sie den Benachrichtigungsfilter.
  8. Fügen Sie den Listener hinzu.
  9. Fügen Sie der Anwendung das Modul hinzu.
  10. Geben Sie das Ziel für das neue Modul an.
  11. Warten Sie ein Zeitlimit ab, damit das Programm nicht beendet wird.
  12. Warten Sie auf JMX-Benachrichtigungen (Java Management Extensions), um sich vom Abschluss der Operation zu überzeugen.

Ergebnisse

Nach erfolgreicher Ausführung des Codes wird das Modul der Anwendung hinzugefügt.

Beispiel

Das folgende Beispiel zeigt, wie Sie basierend auf den zuvor beschriebenen Schritten einer Anwendung ein Modul hinzufügen. Einige Anweisungen sind zur besseren Lesbarkeit auf mehrere Zeilen verteilt.

//Eingabe:
//moduleName gibt den Namen des Moduls an, das Sie der Anwendung hinzufügen.
//moduleURI gibt den URI für die Zielposition des Modularchivinhalts
// in einem Dateisystem an. Der URI gibt die Position des neuen Moduls
// nach der Installation an. Der URI ist relativ zum Anwendungs-URL.
// uniquemoduleURI gibt den URI für die Zielposition der Deployment-
// Deskriptordatei an. Der URI ist relativ zum Anwendungs-URL.
// target gibt Zelle, Knoten und Server für die Modulinstallation an.
[Windows]
String moduleName = "C:\apps\foo.jar";
[Linux][HP-UX][Solaris][AIX][z/OS][IBM i]
String moduleName = "/apps/foo.jar";
String moduleURI = "Increment.jar";
String uniquemoduleURI = "Increment.jar+META-INF/ejb-jar.xml";
String target = "WebSphere:cell=cellname,node=nodename,server=servername";

// Controller-Instanz für die Anwendungsimplementierung erstellen,
// um die JAR-Datei mit Bindungsinformationen zu füllen.
// Die Bindungsinformationen sind Informationen, die spezielle für die implementierung von WebSphere Application Server gelten.

Hashtable preferences = new Hashtable();
preferences.put (AppConstants.APPDEPL_LOCALE, Locale.getDefault());
preferences.put (AppConstants.APPUPDATE_CONTENTTYPE, AppConstants.APPUPDATE_CONTENT_MODULEFILE);
AppDeploymentController controller = AppManagementFactory.readArchiveForUpdate(
				moduleName, 
				moduleURI, 
				AppConstants.APPUPDATE_ADD,
				preferences, 
				null); 

Wenn das Modul, das Sie hinzufügen möchten, keine Bindungen hat, fügen Sie Bindungen hinzu, damit das Modul hinzugefügt werden kann. Verwenden Sie zum Erfassen und Hinzufügen der Bindungen die öffentlichen APIs, die mit dem Produkt bereitgestellt werden. In der Java-Dokumentation zur com.ibm.websphere.management.application.client.AppDeploymentController-Instanz können Sie nachlesen, wie Tasks mit spezifischen Bindungsinformationen für WebSphere Application Server erfasst und eingetragen werden. Die AppDeploymentController-Instanz enthält Metadaten, die in XML-basierten Implementierungsdeskriptoren definiert sind, sowie Annotationen, die in Java-Klassen im Eingabemodul definiert sind.

//Nachdem Sie alle Bindungsinformationen erfasst haben, speichern Sie sie im Modul.
controller.saveAndClose();

//Installationsoptionen ermitteln.
Hashtable options = controller.getAppDeploymentSavedResults();

// Verbindung zwischen Verwaltungsclient, AdminClient und WebSphere Application Server herstellen.
AdminClient client = ...;

//Proxy-Server für Anwendungsverwaltung erstellen.
AppManagement proxy = AppManagementProxy.getJMXProxyForClient(client);

// Vorhandene Anwendung, MyApp, durch Hinzufügen des Moduls aktualisieren.
String appName = "MyApp";

options.put (AppConstants.APPUPDATE_CONTENTTYPE, 
			AppConstants. APPUPDATE_CONTENT_MODULEFILE);

// Benachrichtigungsfilter erstellen.
  NotificationFilterSupport myFilter = new NotificationFilterSupport();
  myFilter.enableType (NotificationConstants.TYPE_APPMANAGEMENT);
  //Listener hinzufügen
  NotificationListener listener = new AListener(_soapClient, myFilter, 
"Install: " + appName, AppNotification.UPDATE);

// Ziel für das neue Modul angeben.
Hashtable mod2svr = new Hashtable();
options.put (AppConstants.APPDEPL_MODULE_TO_SERVER, mod2svr);
mod2svr.put (uniquemoduleURI, target);
proxy.updateApplication (	appName, 
				moduleURI, 
				moduleName,
				AppConstants.APPUPDATE_ADD,
				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);
        }
    }
}

Nächste Schritte

Nachdem Sie das Modul erfolgreich hinzugefügt haben, entfernen Sie den Listener und beenden das Programm.


Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tjmx_add_module
Dateiname:tjmx_add_module.html