Sie können mithilfe von WebSphere Application Server Developer Tools for Eclipse ein angepasstes Skalierungslistener-Bundle erstellen. Ein angepasster Skalierungslistener wird über alle anstehenden Skalierungsaktionen
benachrichtigt. Der Listener kann die Skalierungsaktion daraufhin zulassen oder verweigern. Außerdem kann der Listener entscheiden, die Aktion
zu verarbeiten, und so das Skalierungsverhalten vollständig anpassen.
Informationen zu diesem Vorgang
Sie müssen die Listenerschnittstelle implementieren und die Implementierungsklasse in der Service-Registry registrieren.
Ihr Skalierungslistener kann Skalierungsaktionen zulassen, verweigern und verarbeiten.
Die Java-API-Dokumentation für jede Liberty-SPI ist in einer eigenen komprimierten Datei in einem der Unterverzeichnisse des Verzeichnisses
${wlp.install.dir}/dev der API-Dokumentation
verfügbar.
Vorgehensweise
- Klicken Sie auf . Erweitern Sie dann die Anzeige für OSGi.
- Klicken Sie auf OSGi-Bundle-Projekt und dann auf Weiter.
Das Fenster Neues OSGi-Bundle-Projekt wird geöffnet.
- Geben Sie ScalingSPISampleBundle als Projektnamen ein. Wählen Sie WebSphere Application Server Liberty in der Liste der Ziellaufzeitumgebungen aus.
Ist keine Laufzeitumgebung vorhanden, klicken Sie auf Neue Laufzeit, um eine WebSphere Application Server Liberty-Laufzeit zu erstellen.
- Wählen Sie das Optionsfeld Bundle zur Anwendung hinzufügen ab.
- Klicken Sie zweimal auf Weiter und öffnen Sie die Seite OSGi-Bundle.
- Markieren Sie auf der Seite OSGi-Bundle die Option Generieren eines Aktivators, also einer Java-Klasse zur Steuerung des Lebenszyklus des Bundle.
Übernehmen Sie scalingspisamplebundle.Activator für Aktivatorname und klicken Sie auf Fertigstellen.
- Klicken Sie auf . Erweitern Sie dann die Anzeige für OSGi.
- Klicken Sie auf Liberty-Featureprojekt und dann auf
Weiter. Das Fenster Liberty-Featureprojekt wird geöffnet.
- Geben Sie ScalingSPISampleFeature als Projektnamen an.
- Wählen Sie WebSphere Application Server Liberty in der Liste der Ziellaufzeitumgebungen aus und klicken Sie auf
Weiter. Die Auswahlseite für OSGi-Bundles wird geöffnet.
- Wählen Sie auf der Seite Auswahlseite für OSGi-Bundles das Bundle ScalingSPISampleBundle
1.0.0 für Enthaltene Bundles aus und klicken Sie auf
Fertigstellen.
- Klicken Sie auf und wählen Sie
WebSphere Application Server Liberty mit SPI aus.
- Klicken Sie auf Anwenden und auf OK.
- Erweitern Sie die Anzeige für und öffnen Sie die Datei MANIFEST.MF mit dem
Plug-in-Manifesteditor.
- Wählen Sie das Register Abhängigkeiten aus und fügen Sie die Pakete
com.ibm.wsspi.scaling.action.consumer und
com.ibm.wsspi.scaling.action.controller dem Teilfenster Importierte Pakete hinzu.
Möglicherweise müssen Sie die Tastenkombination Strg+S drücken, um die Änderungen zu speichern.
- Fügen Sie im Projekt "ScalingSPISampleBundle" eine Implementierungsklasse mit dem Namen ScalingSPISamplePlugin hinzu. Diese neue Klasse implementiert die Schnittstelle
com.ibm.wsspi.scaling.action.consumer.ScalingActionPlugin.
package scalingspisamplebundle;
import com.ibm.wsspi.scaling.action.consumer.ScalingActionPlugin;
import com.ibm.wsspi.scaling.action.controller.ScalingActionContext;
import com.ibm.wsspi.scaling.action.controller.ScalingActionContext.ActionType;
import com.ibm.wsspi.scaling.action.controller.ScalingActionContext.ActionDecision;;
/**
* Dies ist ein Liberty-Beispielskalierungs-SPI-Plug-in, das als Vorlage für die Entwicklung
* eines angepassten SPI-Plug-ins dient. In diesem Plug-in wird keine Bearbeitung durchgeführt
* und der Rückgabewert für den Liberty-Skalierungscontroller ist immer DEFAULT_ACTION.
*
*/
public class ScalingSPISamplePlugin implements ScalingActionPlugin {
/** {@inheritDoc} */
@Override
public ActionDecision actionRequired(ScalingActionContext action) {
ActionDecision returnType = ActionDecision.DEFAULT_ACTION;
if (action.getActionType() == ActionType.START_SERVER) {
returnType = startServer(action);
}
else if (action.getActionType() == ActionType.CREATE_SERVER) {
returnType = createServer(action);
}
else if (action.getActionType() == ActionType.STOP_SERVER) {
returnType = stopServer(action);
}
return returnType;
}
private ActionDecision startServer(ScalingActionContext action) {
// Aktionen zum Starten eines Servers ausführen
return ActionDecision.DEFAULT_ACTION;
}
private ActionDecision createServer(ScalingActionContext action) {
// Aktionen zum Erstellen eines Servers ausführen
return ActionDecision.DEFAULT_ACTION;
}
private ActionDecision stopServer(ScalingActionContext action) {
// Aktionen zum Stoppen eines Servers ausführen
return ActionDecision.DEFAULT_ACTION;
}
}
- Öffnen Sie im Projekt ScalingSPISampleBundle die Klasse Activator
und bearbeiten Sie die Methode start(BundleContext), um Code hinzuzufügen, der den neuen Listener-Service registriert.
public void start(BundleContext context) throws Exception {
final Hashtable<String, Object> properties = new Hashtable<String, Object>();
ScalingSPISamplePlugin scalingSPISamplePlugin = new ScalingSPISamplePlugin();
context.registerService(ScalingActionPlugin.class, scalingSPISamplePlugin, properties);
}
Wenn Sie zum Import einer HashMap (Hashzuordnung) aufgefordert werden, wählen Sie java.util.HashMap für den Import aus.
- Klicken Sie mit der rechten Maustaste auf das Projekt ScalingSPISampleFeature und klicken Sie auf
Feature installieren, um das Feature in der Liberty-Laufzeitumgebung zu installieren.
Die Menüoption Feature installieren finden Sie in der Ansicht "Enterprise-Explorer" der Perspektive "Java EE".
- Bearbeiten Sie die Datei server.xml, um ScalingSPISampleFeature zu aktivieren.
...
<featureManager>
...
<feature>scalingController-1.0</feature>
<feature>usr:ScalingSPISampleFeature</feature>
</featureManager>
...