Thema dieser Dokumentation / Das FirstSpirit 5 Modul- / Komponenten-Modell / Von Gadgets, Aspects, Brokern und Agents / Broker / Das Interface SpecialistsBroker

Das Interface SpecialistsBroker

Package: de.espirit.firstspirit.agency

Package: de.espirit.firstspirit.webedit.client.agency

Im Zuge der Refaktorisierung des FirstSpirit-Komponentenmodells war es notwendig, die Abhängigkeit der Werteträger vom UserService auszubauen und durch den SpecialistsBroker zu ersetzen. Die hierdurch erreichte Unabhängigkeit ist insbesondere für die Implementierung im Werteträgerbereich (Gadgets) von Vorteil. Eine Instanz vom Typ SpecialistsBroker bietet Zugriff auf bestimmte Dienste oder Informationen. So ermöglicht das Interface SpecialistsBroker indirekt unter anderem die Benutzer-Interaktion, indem es beispielsweise über einen OperationAgent (siehe Das Interface OperationAgent) eine RequestOperation und eine ShowFormDialogOperation zur Verfügung stellt. Das Interface und die zugehörigen Methoden sind so ausgelegt, dass sie für den SiteArchitect und den ContentCreator identisch verwendet werden können und sich in beiden Clients auch annähernd identisch verhalten (soweit dies möglich ist).

Es gibt unterschiedliche API-Einstiegspunkte für die Verwendung eines SpecialistsBrokers. Neben der Verwendung in Modulkomponenten (Services, Projektanwendungen, …) zählen dazu beispielsweise auch Skripte innerhalb der Auftragsverwaltung oder innerhalb von Arbeitsabläufen. Jeder dieser Einstiegspunkte kann eine Instanz vom Typ SpecialistsBroker liefern, abhängig vom Einstiegspunkt entweder über eine Connection oder über einen Context. Dabei gilt: Alle FirstSpirit-Kontexte, die von BaseContext ableiten (z. B. GuiScriptContext, ScheduleContext,…), sind zugleich auch eine Instanz vom Typ SpecialistsBroker. Andere, wie beispielsweise SwingGadgetContext verfügen über eine Methode #getBroker um eine Instanz vom Typ SpecialistsBroker anzufordern.

Einstiegspunkte:

  • Standalone-API-User: In diesem Fall wird extern eine Connection via ConnectionManager#getConnection aufgebaut. Das Interface Connection bietet Zugriff auf die Methode #getBroker, die eine (projektungebundene) Instanz vom Typ SpecialistsBroker liefert (Beispiel siehe unten).
  • Server-Auftragsskripte: In diesem Fall steht ein Context (ScheduleContext) zur Verfügung, der selbst ein SpecialistsBroker ist. Diese Instanz vom Typ SpecialistsBroker besitzt aber im Fall von Server-Aufträgen keine Projektbindung.
  • Modul – Implementierungen:
    1. Service: Über das ServerEnvironment (Methode #getBroker) erhält eine Service-Implementierung eine (projektungebundene) Instanz vom Typ SpecialistBroker.
    2. ProjectApp: Die ProjectApp hat ein ProjectEnvironment, welches von ServerEnvironment erbt und erhält (über die Methode #getBroker) eine (projektgebundene) Instanz vom Typ SpecialistsBroker.
    3. WebApp: Die WebApp hat ein WebEnvironment, welches von ProjectEnvironment erbt und erhält (über die Methode #getBroker) eine (projektgebundene) Instanz vom Typ SpecialistsBroker. Im Falle der nachträglich eingeführten globalen Webapps liefert das WebEnvironment aber null für #getProject. In diesem Fall liefert auch der Aufruf von #getBroker eine projektungebundene Instanz vom Typ SpecialistsBroker.

Einige Agents und Operations benötigen einen projektgebundenen SpecialistsBroker (z. B. ProjectAgent), andere können auch auf einem Broker ohne Projektbindung angefordert werden.

Wichtig Generell gilt: Über jede Instanz vom Typ SpecialistsBroker ohne Projektbindung, kann eine neue Instanz vom Typ SpecialistsBroker mit Projektbindung geholt werden. Der Wechsel von einem projektungebundenen zu einem projektgebundenen SpecialistsBroker erfolgt über einen Spezialisten vom Typ BrokerAgent mithilfe der Methode #getBrokerByProjectName (siehe dazu Das Interface BrokerAgent).

Codebeispiel Skript (z. B. Server-Auftragsskript):

import de.espirit.firstspirit.agency.BrokerAgent;
import de.espirit.firstspirit.agency.ProjectAgent;
import de.espirit.firstspirit.agency.QueryAgent;

brokerAgent = context.requireSpecialist(BrokerAgent.TYPE);
projectBroker = brokerAgent.getBrokerByProjectName("Mithras");

getAgent(agentType) {
agent = projectBroker.requireSpecialist(agentType);
context.logInfo("agent: " + agent);
return agent;
}

agent = getAgent(ProjectAgent.TYPE);
name = agent.getName();
context.logInfo("name: " + name);

agent = getAgent(QueryAgent.TYPE);
result = agent.answer("fs.uid = solar_concept_car");
context.logInfo("result: " + result);

Codebeispiel Java (z. B. Modul-Implementierung):

import de.espirit.firstspirit.access.Connection;
import de.espirit.firstspirit.access.ConnectionManager;
import de.espirit.firstspirit.access.project.Project;
import de.espirit.firstspirit.access.store.pagestore.Page;
import de.espirit.firstspirit.agency.BrokerAgent;
import de.espirit.firstspirit.agency.SpecialistsBroker;
import de.espirit.firstspirit.agency.StoreElementAgent;
import de.espirit.firstspirit.common.MaximumNumberOfSessionsExceededException;
import de.espirit.firstspirit.forms.FormData;
import de.espirit.firstspirit.server.authentication.AuthenticationException;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;

public class test {
public static void main(final String... params)
throws MaximumNumberOfSessionsExceededException,
IOException, AuthenticationException {
final Connection connection = connectionManager.getConnection("localhost",
8080, ConnectionManager.HTTP_MODE, "Admin", "Admin");
try {
connection.connect();
final SpecialistsBroker connectionBroker = connection.getBroker();
final BrokerAgent brokerAgent =
connectionBroker.requireSpecialist(BrokerAgent.TYPE);
final SpecialistsBroker projectBroker =
brokerAgent.getBrokerByProjectName("Mithras");
if (projectBroker != null) {
final StoreElementAgent storeElementAgent =
projectBroker.requestSpecialist(StoreElementAgent.TYPE);
if (storeElementAgent != null) {
final Page page = (Page) storeElementAgent
.loadStoreElement("mithras_home", Page.UID_TYPE, false);
if (page != null) {
final FormData data = page.getFormData();
System.out.println("data: " + data);
}
}
}
} finally {
connection.disconnect();
}
}
}

© 2005 - 2024 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2024.13 | Datenschutz