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

Reply via email to