You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2009/02/06 17:57:59 UTC

[jira] Updated: (WICKET-2080) InjectorHolder is broken when wicket-ioc.jar is shared between multiple web applications

     [ https://issues.apache.org/jira/browse/WICKET-2080?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Igor Vaynberg updated WICKET-2080:
----------------------------------

    Fix Version/s: 1.5-M1
          Summary: InjectorHolder is broken when wicket-ioc.jar is shared between multiple web applications  (was: Is @SpringBean applicationContext aware? )

this is exactly why sharing jars between applications is not recommended. anyways, i think there is a way to get around it, but not without making api breaks - eg removing springinjector.set/getinjector() - so we wont be able to make this change until 1.5

> InjectorHolder is broken when wicket-ioc.jar is shared between multiple web applications
> ----------------------------------------------------------------------------------------
>
>                 Key: WICKET-2080
>                 URL: https://issues.apache.org/jira/browse/WICKET-2080
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-spring
>    Affects Versions: 1.4-M3
>         Environment: Java6 tomcat 6.0.18
>            Reporter: Matej Zupanc
>            Assignee: Igor Vaynberg
>             Fix For: 1.5-M1
>
>
> I notice that in case, when I use two web-application on tomcat, sharing spring and wicket libraries, applications start to behave unpredictably.
> After short exploring and debug running, I discovered that wicket "ProxyBean" return wrong bean from Spring. When I try with ordinary call to Spring context (WebApplicationContextUtils.getRequiredWebApplicationContext(WebApplication.get().getServletContext()).getBean("testBeanName");) I get correct bean.
> My testCase has been run on tomcat 6.0.18. Shared library are placed under shared lib location in tomcat. All spring and wicket libraries are placed in shared lib location. For test I create webA and webB war archives. In both applications I use bean named "appIdProvider" but each application has different implementing class for this bean. When I start tomcat I see in logs, that both spring applicationContext are initialised. First I test webA application and result is what I expect. Next I make call to webB and result isn't what I expect, but result of call to bean injected with @SpringBean is same to call from webA application.
> Same story happens if I make first call to webB and after that to webA. In this case call to webB are correct and execution of webA is wrong.
> After printing the returned beans I see that annotated beans (@SpringBean) are LazyInitProxyFactory (in test values are "org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler@107eafc") and are same instances in both applications. If I make direct lookup in SpringContext I get back concrete bean and instances of this bean are different for each webapplication.
> All this doesn't happens if I deploy both web-application together with all spring and wicket libraries embedded into web application archive (WEB-INF/lib). But deployment of spring and wicket libraries for each application is expensive if I have many web application (using wicket and spring) on same server.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.