Derzeit haben wir eine Webanwendung, die einen Spring-Anwendungskontext lädt, der einen Stapel von Geschäftsobjekten, DAO-Objekten und Hibernate instanziiert. Wir möchten diesen Stapel mit einer anderen Webanwendung teilen, um zu vermeiden, dass mehrere Instanzen derselben Objekte vorhanden sind.Was ist der beste Weg, Geschäftsobjektinstanzen zwischen Java Web Apps mit JBoss und Spring zu teilen?
Wir haben verschiedene Ansätze untersucht; Aussetzen der Objekte mithilfe von JMX oder JNDI oder mithilfe von EJB3.
Die verschiedenen Ansätze haben alle ihre Probleme, und wir suchen nach einer leichten Methode.
Irgendwelche Vorschläge, wie man das löst?
Edit: Ich habe Kommentare erhalten anfordernden mich ein bisschen zu erarbeiten, geht so hier:
Das Hauptproblem wir lösen wollen, ist, dass wir nur eine Instanz von Hibernate haben wollen. Dies liegt an Problemen mit der Ungültigmachung des Secondlevel-Caches von Hibernate, wenn mehrere Client-Anwendungen ausgeführt werden, die mit derselben Datenquelle arbeiten. Auch der Business-/DAO/Hibernate-Stack wird ziemlich groß, so dass es nicht sinnvoll ist, ihn zu duplizieren.
Zuerst haben wir versucht zu sehen, wie die Business-Schicht allein anderen Web-Anwendungen ausgesetzt sein könnte, und Spring bietet JMX-Wrapping zum Preis einer winzigen Menge an XML. Es war uns jedoch nicht möglich, die JMX-Entitäten an die JNDI-Struktur zu binden, sodass wir die Objekte nicht über die Webanwendungen suchen konnten.
Dann versuchten wir, die Business-Schicht direkt an JNDI zu binden. Obwohl Spring keine Methode dafür bot, war die Verwendung von JNDITemplate, um sie zu binden, auch trivial. Dies führte jedoch zu mehreren neuen Problemen: 1) Der Sicherheitsmanager verweigert den Zugriff auf den RMI-Klassenlader, so dass der Client fehlschlug, nachdem wir versucht hatten, Methoden auf der JNDI-Ressource aufzurufen. 2) Sobald die Sicherheitsprobleme gelöst wurden, hat JBoss IllegalArgumentException ausgelöst: Objekt ist keine Instanz der deklarierenden Klasse. Ein bisschen Lesen zeigt, dass wir Stub-Implementierungen für die JNDI-Ressourcen benötigen, aber das scheint eine Menge Ärger (vielleicht hilft uns der Frühling?)
Wir haben noch nicht zu viel in EJB geschaut, aber nach dem ersten Bei zwei Versuchen frage ich mich, ob das, was wir erreichen wollen, überhaupt möglich ist.
Zusammenfassend, was wir erreichen wollen: Eine JBoss-Instanz, mehrere Web-Apps, die einen Stapel von Geschäftsobjekten über DAO-Ebene und Hibernate verwenden.
Mit freundlichen Grüßen,
Nils
Können Sie etwas zu 1. Was Sie versuchen zu lösen versuchen; 2. Die Probleme, die Sie bei den von Ihnen genannten Ansätzen gefunden haben. Dies würde eine zielgerichtetere Antwort ermöglichen ... – johnstok
Es war schwierig, alles in 300 Zeichen zu sagen, also habe ich die Frage bearbeitet, um weitere Details hinzuzufügen :-) –