Wesley Wu wrote: > Thanks for the quick response. > > I don't expect a quick resolve of this bug, since it DOES have a workaround. > > After some examination of the source code, I think the implementation around > scoped adapter may need a serious refactorying because it's something like > a HACK resolution. > Yep. The final spec API for that concept doesn't match the way I think about the circular resolution issue (and had changed many times before the final release), but I'm still not sure if I just need to study the API more or if it's cleaner to work around it. So the current code is a mixture between the two.
-- Scott > -Wesley > > 2010/1/29 Scott Ferguson <[email protected]>: > >> Wesley Wu wrote: >> >>> Hi Scott, >>> >>> When a @ApplicationScoped/@Singleton bean is designed to be initialized >>> after webapp starts (I.E. when first http request was fired) instead of >>> being >>> initialized during startup stage, in given circumstance, it won't be >>> injected correctly. >>> >>> >> Thanks for tracking this down. It looks like a circularity problem, >> which we should handle but our current tests don't have exactly this >> configuration. >> >> -- Scott >> >>> This is my test case: >>> >>> ========== StartBean =========== >>> public class StartBean { >>> @Inject >>> FirstBean firstBean; >>> } >>> ========== FirstBean =========== >>> public class FirstBean { >>> @Inject >>> SecondBean secondBean; >>> } >>> ========== SecondBean =========== >>> public class SecondBean { >>> @Inject >>> ThirdBean thirdBean; >>> @Inject >>> FourthBean fourthBean; >>> } >>> ========== ThirdBean =========== >>> public class ThirdBean { >>> @Inject >>> SingletonBean singletonBean; >>> } >>> ========== FourthBean =========== >>> public class FourthBean { >>> @Inject >>> SingletonBean dao; >>> } >>> ========== SingletonBean =========== >>> @Singleton >>> //@Startup >>> public class SingletonBean { >>> } >>> ========== MyServlet =========== >>> public class MyServlet extends HttpServlet { >>> @Inject >>> StartBean startBean; >>> >>> protected void doGet(HttpServletRequest request, HttpServletResponse >>> response) >>> throws ServletException, IOException { >>> System.out.println("hello"); >>> } >>> } >>> >>> ========= web.xml =========== >>> <?xml version="1.0" encoding="UTF-8"?> >>> <web-app xmlns="http://java.sun.com/xml/ns/javaee" >>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee >>> http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" >>> version="2.5"> >>> >>> <servlet id="MyServlet"> >>> <servlet-name>MyServlet</servlet-name> >>> <servlet-class>com.mycompany.servlet.MyServlet</servlet-class> >>> </servlet> >>> <servlet-mapping> >>> <servlet-name>MyServlet</servlet-name> >>> <url-pattern>/MyServlet</url-pattern> >>> </servlet-mapping> >>> </web-app> >>> >>> ================================= >>> >>> The "http://localhost:8080/MyServlet" request will produce this exception: >>> >>> com.mycompany.servlet.MyServlet.startBean: >>> com.mycompany.beans.StartBean.firstBean: >>> com.mycompany.beans.FirstBean.secondBean: >>> com.mycompany.beans.SecondBean.fourthBean: >>> com.mycompany.beans.FourthBean.singletonBean: >>> java.lang.IllegalArgumentException: >>> Can not set com.mycompany.beans.SingletonBean field >>> com.mycompany.beans.FourthBean.singletonBean >>> to com.mycompany.beans.FourthBean >>> >>> When I annotate the SingletonBean as @Startup, it's fine. (uncomment >>> the //@Startup line in SingletonBean.java) >>> >>> Either @Singleton or @ApplicationScoped throws the exception. >>> >>> It's a weird bug, taking me nearly two days to reproduce it in such a >>> simple test case. >>> >>> -Wesley >>> >>> >>> _______________________________________________ >>> resin-interest mailing list >>> [email protected] >>> http://maillist.caucho.com/mailman/listinfo/resin-interest >>> >>> >>> >> >> _______________________________________________ >> resin-interest mailing list >> [email protected] >> http://maillist.caucho.com/mailman/listinfo/resin-interest >> >> > > > _______________________________________________ > resin-interest mailing list > [email protected] > http://maillist.caucho.com/mailman/listinfo/resin-interest > > _______________________________________________ resin-interest mailing list [email protected] http://maillist.caucho.com/mailman/listinfo/resin-interest
