Ik ben bezig met het programmeren van een systeem dat web-plugins gebruikt voor configuratie. Deze plugins kan ik op dit moment al dynamisch laden (eigen classloader), starten, stoppen, enz.
Ik gebruik Jetty (jetty.mortbay.org) als embedded web/app server, wat zeer prettig werkt. Een module creeert zodra hij gestart wordt automatisch een nieuwe HttpContext in jetty, en is daarna direct toegangkelijk.
Alle functionaliteit wil ik in de module stoppen (niet in de JSPs); Deze regelt database toegang, enz. Ik wil vervolgens vanuit mijn JSPs functies aanroepen op mijn modules.
Ik wil binnen iedere HttpContext de bijbehorende module beschikbaar maken, zodat ik de functionaliteit die erin zit kan aanspreken. Mijn vraag is dus: hoe voeg ik in Jetty een geinstantieerd object toe aan de HttpContext van de JSPs die bij de module horen?
Ik heb reeds het volgende geprobeerd:
Embedded Jetty:
In mijn JSP:
Waarbij IModule mijn generieke module interface is, en Usermgt een specifieke implementatie ervan (module voor gebruikersbeheer).
Ik wil de module generiek beschikbaar stellen, omdat de appserver de exacte implementatie dan niet nodig heeft, en pas hoeft te laden zodra ik in mijn JSP de module cast naar de benodigde implementatie.
Ik krijg echter alleen null door, en niet mijn IModule... Vermoedelijk zit ik in de verkeerde context, maar ik kan er weinig over vinden met google, dus tast in het duister.
Ik gebruik Jetty (jetty.mortbay.org) als embedded web/app server, wat zeer prettig werkt. Een module creeert zodra hij gestart wordt automatisch een nieuwe HttpContext in jetty, en is daarna direct toegangkelijk.
Alle functionaliteit wil ik in de module stoppen (niet in de JSPs); Deze regelt database toegang, enz. Ik wil vervolgens vanuit mijn JSPs functies aanroepen op mijn modules.
Ik wil binnen iedere HttpContext de bijbehorende module beschikbaar maken, zodat ik de functionaliteit die erin zit kan aanspreken. Mijn vraag is dus: hoe voeg ik in Jetty een geinstantieerd object toe aan de HttpContext van de JSPs die bij de module horen?
Ik heb reeds het volgende geprobeerd:
Embedded Jetty:
Java:
1
2
3
4
5
6
7
8
9
10
11
| public void addModuleToContext(String context, IModule module) throws Exception{ HttpHandler []handlers = server.getContext(context).getHandlers(); for(int i=0; i< handlers.length; i++) { if(handlers[i] instanceof ServletHandler) { // We have a JSP context, add the module to it ServletHandler handler = (ServletHandler) handlers[i]; handler.getServletContext().setAttribute("Module", module); } } } |
In mijn JSP:
Java:
1
2
| IModule module = (IModule) application.getAttribute("Module"); Usermgt mgt = (Usermgt) module; |
Waarbij IModule mijn generieke module interface is, en Usermgt een specifieke implementatie ervan (module voor gebruikersbeheer).
Ik wil de module generiek beschikbaar stellen, omdat de appserver de exacte implementatie dan niet nodig heeft, en pas hoeft te laden zodra ik in mijn JSP de module cast naar de benodigde implementatie.
Ik krijg echter alleen null door, en niet mijn IModule... Vermoedelijk zit ik in de verkeerde context, maar ik kan er weinig over vinden met google, dus tast in het duister.