JAX-WS en Spring

Normaal laat je de dependencies door Spring injecteren. Maar hoe doe je dat met objecten die niet door Spring gemanaged worden? In het geval van JAX-WS endpoint klassen is dat ene probleem. Instanties van deze klassen worden gemaakt door de container. Spring biedt wel wat mogelijkheden. In WAS 7 werkt de super-klasse aanpak niet, omdat de Spring context nog niet geinitialiseerd is op het moment dat de instantie wordt aangemaakt. WAS 7 doet dat voordat de web applicatie zelf geinitialiseerd wordt gezamenlijk met de WebApplicationContext. Dat werkt dus niet.

Via een statische klasse die geïnjecteerd wordt door Spring kun je via een omweg alsnog aan de dependencies komen.

Maar, misschien dat de manier met AspectJ in combinatie met Spring 3.1.0 en WebSphere Load Time weaving wel gaat werken. Ik moet het nog verder uitzoeken.

In Glassfish met CDI zijn er blijkbaar ook problemen mee, geeft een kennis van mij aan. Het is blijkbaar allemaal niet zo simpel.

Zodra ik weer wat verder ben, komt er weer een berichtje over.

Update: Met de LTW lukt het ook niet. Ondanks dat de Endpoint klassen door de classloader worden geladen die door Spring is voorzien van LTW, is de endpoint klasse zo’n beetje de enige klasse die niet geweaved wordt. Allemaal heel raar, maar het is zo.

Uiteindelijk gekozen voor een oplossing waarbij de Endpoint klasse zo goed als leeg is. Alle functionaliteit wordt in een Delegate geprogrammeerd. Deze delegaten is een Spring managed klasse. Via een base klasse kan dit op een eenvoudige manier worden gerealiseerd met een minimum aan code in de Endpoint klasse. Het is niet de meest mooie oplossing, maar het werkt wel.