JSF WebappClassloader.modified() aktualisiert Klassen nicht

andkam

Mitglied
Hallo zusammen,

seit längerem stehe ich vor einem Problem. Das pluginbasierte Laden von Klassen funktioniert wunderbar und die Beans werden auch mittels

beanManager.register(new ManagedBeanInfo());

in den entsprechenden Scope registriert. Aber.. das Aktualisieren der Klassen wird erst nach einem Neustart der Webapp durchgeführt.

Woran könnte das liegen? Wenn ihr mehr Informationen braucht.. Kein Problem :)


Viele Grüße
André
 
N

nillehammer

Gast
1. Meinst Du damit, dass Du beim Entwickeln neue class-Dateien deployst, diese geänderten class-Dateien vom Webcontainer aber nicht ohne ein manuelles Context-Reload erkannt/geladen werden?
2. Arbeitest Du mit Tomcat?

Falls beide Fragen "Ja", dann schau Dir mal das hier an: Apache Tomcat Configuration Reference (6.0.35) - The Context Container

Im Context-Element gibt es das Attribut
Code:
reloadable
, das für ein automatisches Erkennen von Änderungen sorgt. Seine Benutzung ist aber nur für Entwicklungs-/Testumgebungen zu Empfehlen. In der Produktion frisst das zu viele Resourcen. Wobei, in einer Produktionsumgebung wird man ja eh nicht on the fly class-Dateien austauschen. Und wenn, dann kann man ja mal einen manuellen Context-Reload machen.
 

andkam

Mitglied
Nein.

Ich versuche, Plugins in einer bereits existenten Webapp zu installieren. Selbst geschriebene Plugins (Interface, PluginManager etc.).

Die Klassen lade ich mittels Webapp Classloader nach. Das funktioniert auch wunderbar.
Aber: Der BeanManager backt nicht die aktualisierten Versionen der Beans.

Lade ich mit dem WebappClassLoader die Bean, wird die aktuelle geladen (System.out.println im Konstruktor der geladenen Klasse).

Möchte ich jetzt via JSF drauf zugreifen, wird die alte Version der Bean gebacken. Der BeanManager oder der BeanBuilder.. einer von den beiden greift nicht auf die aktualisierte Version der Bean zu, sondern lädt sie aus dem Speicher.


Ich weiß auch nicht genau, welche Argumente hier erwartet werden:

Java:
beanBuilder.destroy(InjectionProver, Object);
beanBuilder.build(InjectionProvider, FacesContext);

Ich habe das jetzt erst mal so versucht. Bringt aber leider nichts.

Java:
beanBuilder.destroy(ApplicationAssociate.getInstance(context.getExternalContext().getInjectionProvicer, FacesContext.getCurrentInstance().getExternalContext());

beanMananger.register(new ManagedBeanInfo("testBean", clazz.getName(), "session", null, null, null, null));
 
Zuletzt bearbeitet:
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben