Seit einiger Zeit beschäftige ich mich mit dem Seam Framework: www.seamframework.de
Seam ist ein modernes Web Framework, welches die Entwicklung mit JSF und EJB enorm vereinfacht. Seam wird von JBoss entwickelt. Das schöne ist jedoch, dass Seam auf JEE Standards basiert und deshalb in jedem JEE kompatiblen Application Server lauffähig ist.
Es ist sogar recht einfach möglich, eine Seam Applikation in einem Tomcat auszuführen (http://seamframework.org/Documentation/RunningSeamExamplesWithApacheTomcat)
Nach erfolgreichem Generieren eines Projektes mit Hilfe von seam-gen, war mein Ziel, eine Anwendung zu implementieren, die auf den Documentum Foundation Services (DFS) basiert. So sollte es möglich sein, über Web Services auf das Dokumentenmanagement System von EMC zuzugreifen. Wie sich herausstellte, ist Seam und DFS eine sehr schöne Kombination.
Zunächst einmal ist es möglich, eine Seam Komponente beim Starten des Applikationsservers zu laden und diese in den Application Scope zu legen. Dazu sind folgende Seam-Annotations notwendig:
@Name("searchFactory")
@Startup
@Scope(ScopeType.APPLICATION)
Der nächste Schritt besteht darin, eine Service Factory zu initialisieren, welche die Documentum Services zur Verfügung stellt:
@Create
private void initializeServiceFactory() {
contextFactory = ContextFactory.getInstance();
context = contextFactory.getContext();
RepositoryIdentity repoId= new RepositoryIdentity();
repoId.setRepositoryName(DOCBASE);
repoId.setUserName(USERNAME);
repoId.setPassword(PASSWORD);
context.addIdentity(repoId);
serviceFactory = ServiceFactory.getInstance();
}
Die @Create Annotation besagt, dass die Methode sofort beim Laden der Komponente ausgeführt werden soll. Da die Instanziierung der Service Factory sehr aufwändig ist, macht es Sinn, sie schon beim Starten des Servers zu initialisieren.
Wenn der Applikationsserver gestartet ist, ist auch die ServiceFactory startklar und kann sehr komfortabel in einer anderen Komponente injiziert werden:
@In
private SearchFactory searchFactory;
Schließlich können die Services über die Factory bezogen werden und die Business Logik kann die Services verwenden:
IQueryService queryService = searchFactory.getQueryService();