This issue may be a little hard for me to fix due to the lazy loading of DataSource. I'll wait for the next release. :-) Thanks.
-Wesley ----- Original Message ----- From: "Mattias Jiderhamn" <[EMAIL PROTECTED]> To: <resin-interest@caucho.com> Sent: Thursday, May 08, 2008 2:22 AM Subject: Re: [Resin-interest] <database> config shouldbeinitializedbeforeanysingleton beans > As you can see for yourself the bug is still marked as "open" in Mantis > so it will probably/hopefully be fixed until next release. > If you want to increase the chances of the bug being fixed soon (and > have a workaround meanwhile), fix it yourself and attach your suggested > patch to the bug report. > > /Mattias > > ----- Original Message ----- > Subject: Re: [Resin-interest] config > shouldbeinitializedbeforeanysingleton beans > Date: Thu, 8 May 2008 01:30:35 +0800 > From: "wesley" > > Hi Scott, > > Congratulations for the new release. > It seems that 3.1.6 release does not have this bug fixed. > It's really a stop bug for me and prevents the whole webapp from starting. > > -Wesley > > ----- Original Message ----- > From: "Scott Ferguson" > To: "General Discussion for the Resin application server" > > Sent: Monday, May 05, 2008 9:54 PM > Subject: Re: [Resin-interest] config shouldbeinitializedbeforeany > singleton beans > > > > > > On May 4, 2008, at 8:39 PM, wesley wrote: > > > >> I've set logging to "finer" and found datasource being initialized > >> after > >> AmberContainer parsing persistence.xml. > >> > >> After some tracing, I think the issue is also an order problem. > >> > >> After resin server initialized, it began to init the webapp, at the > >> order > >> below: > >> > >> 1. Look at persistence.xml and try to init an AmberContainer. > >> 2. Parse resin-web.xml to init DataSource, JCA connectors, EJBs and > >> Singletons. > >> > >> Note, at the first step method getJtaDataSource() of > >> com.caucho.amber.cfg.PersistenceUnitConfig will be > >> called. It tried to find a DataSource in JNDI and failed, > >> because a DataSource will be available in JNDI until the > >> 2nd step finished. > > > > Ok. This use of PersistenceUnitConfig should be lazy. Resin can > > register the PersistenceUnit/PersistenceContext before initializing > > the provider. > > > > thanks, I'd missed that case. http://bugs.caucho.com/view.php?id=2648 > > > >> I'm using hibernate persistence provider. > >> > >> Now I'm frustrated. How could we managed to garantee these init > >> orders? > >> 1. First of all, DataSource in resin-web.xml to make sure a > >> DataSource being > >> registered. > >> 2. persisence.xml to make sure any @PersistenceUnit and > >> @PersistenceContext > >> injection available. * > > > > This would be split into two parts: registering the @PersistenceUnit > > and a later start() phase. > > > >> 3. JCA connectors (if any) in resin-web.xml. * > >> 4. EJBs in resin-web.xml (if any). Why should EJBs be initialized > >> after > >> persistence.xml? It may need to inject a @PersistenceUnit. > > > > EJBs also have a 2-phase init process, so the same idea applies. > > > > -- Scott > > > >> 5. Singletons in resin-web.xml. > >> * 2 & 3 may be reversed. > >> > >> Any ideas? > >> > >> -Wesley > >> > >> > >> ----- Original Message ----- > >> From: "Scott Ferguson" > >> To: "General Discussion for the Resin application server" > >> > >> Sent: Monday, May 05, 2008 6:11 AM > >> Subject: Re: [Resin-interest] config should > >> beinitializedbeforeany singleton beans > >> > >> > >>> > >>> On May 4, 2008, at 1:17 PM, wesley wrote: > >>> > >>>> Hi Scott, > >>>> > >>>> Is this issue resolved in snapshot0502? I've tried 0502 snapshot and > >>>> found > >>>> my singleton beans still throwing the same exception: > >>>> > >>>> java.lang.UnsupportedOperationException: The user must supply a > >>>> JDBC > >>>> connection > >>>> > >>>> I believe that the same problem still exists: DataSource SHOULD be > >>>> initialized > >>>> and be put in JNDI registry before the singletons try to find it. > >>> > >>> That should be a different issue. That stack trace is happening at > >>> the end of the initialization, so all the data sources would already > >>> be initialized. > >>> > >>> If you set the logging to "finer" do you see the database getting > >>> registered? > >>> > >>> -- Scott > >>> > >>>> > >>>> > >>>> stacktrace at web-app initialing phase > >>>> ========================================================== > >>>> [04:08:57.373] {resin-15} java.lang.UnsupportedOperationException: > >>>> The user > >>>> must supply a JDBC connection > >>>> [04:08:57.373] {resin-15} at > >>>> org > >>>> .hibernate > >>>> .connection > >>>> .UserSuppliedConnectionProvider > >>>> .getConnection(UserSuppliedConnectionProvider.java:30) > >>>> [04:08:57.373] {resin-15} at > >>>> org > >>>> .hibernate > >>>> .jdbc.ConnectionManager.openConnection(ConnectionManager.java:423) > >>>> [04:08:57.373] {resin-15} at > >>>> org > >>>> .hibernate > >>>> .jdbc.ConnectionManager.getConnection(ConnectionManager.java:144) > >>>> [04:08:57.373] {resin-15} at > >>>> org > >>>> .hibernate > >>>> .jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java: > >>>> 139) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.loader.Loader.doQuery(Loader.java:673) > >>>> [04:08:57.373] {resin-15} at > >>>> org > >>>> .hibernate > >>>> .loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java: > >>>> 236) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.loader.Loader.doList(Loader.java:2213) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.loader.Loader.list(Loader.java:2099) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378) > >>>> [04:08:57.373] {resin-15} at > >>>> org > >>>> .hibernate > >>>> .hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java: > >>>> 338) > >>>> [04:08:57.373] {resin-15} at > >>>> org > >>>> .hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java: > >>>> 172) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) > >>>> [04:08:57.373] {resin-15} at > >>>> org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:65) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .buysou > >>>> .jpa.PersistenceStrategy.getResultList(PersistenceStrategy.java:584) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .buysou > >>>> .stock > >>>> .business.stock.GlobalStockCalendar.reload(GlobalStockCalendar.java: > >>>> 41) > >>>> [04:08:57.373] {resin-15} at > >>>> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > >>>> [04:08:57.373] {resin-15} at > >>>> sun > >>>> .reflect > >>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > >>>> [04:08:57.373] {resin-15} at > >>>> sun > >>>> .reflect > >>>> .DelegatingMethodAccessorImpl > >>>> .invoke(DelegatingMethodAccessorImpl.java:25) > >>>> [04:08:57.373] {resin-15} at > >>>> java.lang.reflect.Method.invoke(Method.java:597) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .config.j2ee.PostConstructProgram.inject(PostConstructProgram.java: > >>>> 60) > >>>> [04:08:57.373] {resin-15} at > >>>> com.caucho.webbeans.component.ComponentImpl.init(ComponentImpl.java: > >>>> 502) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .webbeans > >>>> .component > >>>> .SingletonClassComponent.init(SingletonClassComponent.java: > >>>> 139) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .webbeans > >>>> .component.SingletonClassComponent.get(SingletonClassComponent.java: > >>>> 96) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .webbeans > >>>> .component.SingletonClassComponent.get(SingletonClassComponent.java: > >>>> 81) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .webbeans > >>>> .manager.WebBeansContainer.startSingletons(WebBeansContainer.java: > >>>> 1079) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .webbeans > >>>> .manager.WebBeansContainer.environmentStart(WebBeansContainer.java: > >>>> 1059) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .loader.EnvironmentClassLoader.start(EnvironmentClassLoader.java: > >>>> 583) > >>>> [04:08:57.373] {resin-15} at > >>>> com.caucho.server.webapp.WebApp.start(WebApp.java:1835) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .server.deploy.DeployController.startImpl(DeployController.java:667) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .server.deploy.DeployController.restartImpl(DeployController.java: > >>>> 630) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .server > >>>> .deploy > >>>> .StartAutoRedeployAutoStrategy > >>>> .alarm(StartAutoRedeployAutoStrategy.java:177) > >>>> [04:08:57.373] {resin-15} at > >>>> com > >>>> .caucho > >>>> .server.deploy.DeployController.handleAlarm(DeployController.java: > >>>> 789) > >>>> [04:08:57.373] {resin-15} at > >>>> com.caucho.util.Alarm.handleAlarm(Alarm.java:375) > >>>> [04:08:57.373] {resin-15} at com.caucho.util.Alarm.run(Alarm.java: > >>>> 345) > >>>> [04:08:57.373] {resin-15} at > >>>> com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:721) > >>>> [04:08:57.373] {resin-15} at > >>>> com.caucho.util.ThreadPool$Item.run(ThreadPool.java:643) > >>>> [04:08:57.373] {resin-15} at java.lang.Thread.run(Thread.java:619) > >>>> = > >>>> ==================================================================== > >>>> > >>>> -Wesley > >>>> > >>>> ----- Original Message ----- > >>>> From: "wesley" > >>>> To: "General Discussion for the Resin application server" > >>>> > >>>> Sent: Wednesday, April 23, 2008 1:51 AM > >>>> Subject: Re: [Resin-interest] config should be > >>>> initializedbeforeany singleton beans > >>>> > >>>> > >>>>> So singleton beans will also got a lazy load after DataSource, > >>>>> right? > >>>>> > >>>>> Thanks, Scott. > >>>>> > >>>>> ps. Do you have time to look at my previous post about how to > >>>>> config jca > >>>>> connection pool max-active-time? > >>>>> > >>>>> ----- Original Message ----- > >>>>> From: "Scott Ferguson" > >>>>> To: "General Discussion for the Resin application server" > >>>>> > >>>>> Sent: Tuesday, April 22, 2008 10:35 PM > >>>>> Subject: Re: [Resin-interest] config should be > >>>>> initialized > >>>>> beforeany singleton beans > >>>>> > >>>>> > >>>>>> > >>>>>> On Apr 22, 2008, at 2:45 AM, wesley wrote: > >>>>>> > >>>>>>> Hi Scott, > >>>>>>> > >>>>>>> I'm upgrading snap080331 to snap080417. I found my hibernate > >>>>>>> persistence unit not > >>>>>>> working, with no jta-data-source configured. > >>>>>>> I added 080417 src into my project and traced for a while and > >>>>>>> found > >>>>>>> the reason. > >>>>>> > >>>>>> This is something I worked on yesterday. The next snapshot should > >>>>>> have the fix. > >>>>>> > >>>>>> The fix involves making the persistence.xml lookup of the > >>>>>> dataSource > >>>>>> lazy, so it only occurs using web-app start time, not at > >>>>>> persistence.xml start. > >>>>>> > >>>>>> -- Scott > >>>>>> > >>>>>>> > >>>>>>> > >>>>>>> I put an breakpoint at com.caucho.naming.Jndi.bindImpl(...) > >>>>>>> line: > >>>>>>> 91 > >>>>>>> and recorded > >>>>>>> the jndi resources registered at order below: > >>>>>>> "java:comp/env/jmx/MBeanServer" ... > >>>>>>> "java:comp/env/jmx/GlobalMBeanServer" ... > >>>>>>> "java:comp/UserTransaction" ... > >>>>>>> "java:comp/TransactionManager" ... > >>>>>>> "java:/TransactionManager" ... > >>>>>>> "java:comp/ThreadPool" > >>>>>>> "java:comp/env/caucho/persistent-store" > >>>>>>> and then my singleton beans were then initialized, then > >>>>>>> "java:comp/env/jdbc/stock" // my config in resin- > >>>>>>> web.xml > >>>>>>> "java:comp/env/activemq" // my config > >>>>>>> in resin-web.xml > >>>>>>> > >>>>>>> Some of singleton beans need to access database by inject a > >>>>>>> EMF, so > >>>>>>> amber start to > >>>>>>> load persistence unit. During parsing the persistence.xml, the > >>>>>>> xml > >>>>>>> config will set the > >>>>>>> "jta-data-source" property of the > >>>>>>> com.caucho.amber.cfg.PersistenceUnitConfig object > >>>>>>> by reflection. Before doing it, it will call JNDI.lookup to find > >>>>>>> the > >>>>>>> DataSource with name > >>>>>>> specified in persistence.xml, of cource nothing found! It was not > >>>>>>> registered yet! > >>>>>>> > >>>>>>> I switched to snapshot080331 binary and still retained some src > >>>>>>> of > >>>>>>> 080417 (src package: > >>>>>>> com.caucho.amber, com.caucho.config, com.caucho.naming) then > >>>>>>> traced > >>>>>>> it again. > >>>>>>> This time I recored the the jndi resources registered at order > >>>>>>> below > >>>>>>> "java:comp/env/jmx/MBeanServer" ... > >>>>>>> "java:comp/env/jmx/GlobalMBeanServer" ... > >>>>>>> "java:comp/UserTransaction" ... > >>>>>>> "java:comp/TransactionManager" ... > >>>>>>> "java:/TransactionManager" ... > >>>>>>> "java:comp/ThreadPool" > >>>>>>> "java:comp/env/caucho/persistent-store" > >>>>>>> "java:comp/env/jdbc/stock" // my config in resin- > >>>>>>> web.xml > >>>>>>> "java:comp/env/activemq" // my config > >>>>>>> in resin-web.xml > >>>>>>> and then my singleton beans were then initialized. > >>>>>>> This is the right sequence. > >>>>>>> > >>>>>>> Though I didnot do further test, I think problem were not > >>>>>>> belonged > >>>>>>> to the three packages > >>>>>>> I retained during the two snapshot version switch. > >>>>>>> > >>>>>>> Suggestions are appreciated, thanks. > >>>>>>> > >>>>>>> -Wesley > > > _______________________________________________ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest > _______________________________________________ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest