Unschön ist dabei allerdings die unnötig komplizierte Einbindung in aktuelle Java EE-Umgebungen, da zum Abfragen von Enterprise-Ressourcen (z.B. Session Beans) explizite JNDI-ServiceLocator-Aufrufe nötig sind.
In JEE-Standard-Klassen ("managed classes") wie Servlets und JSF Managed Beans steht dagegen Dependecy Injection (DI) zur Verfügung, wodurch man sich Referenzen auf Enterprise-Ressourcen nicht mehr aktiv holen muss, sondern automatisch bereitgestellt bekommt.
Mit meiner kleinen Bibliothek Struts-DI funktioniert dies auch innerhalb von Struts-Actions:
public class MyAction extends org.apache.struts.action.Action {
@EJB
private MySessionBean msb;
@Override
public ActionForward execute(...) throws Exception {
String backendResponse = msb.myCall(...);
...
}
}
Die dazu notwendige Konfiguration ist denkbar einfach. Anstelle des Struts-RequestProcessors wird in der struts-config.xml ein neuer RequestProcessor eingetragen:
<controller nocache="true"
processorClass=
"com.muchsoft.struts.annotations.RequestProcessor"/>
Dies ist unter Struts 1.2 das übliche Vorgehen, um sich in die Action-Verarbeitung einzuklinken. Mit Struts 1.3 funktioniert dies ebenso (der dort vorhandene Chain-Mechanismus wird nicht verwendet).