Re: problems getting a session state object on start up (resend ..? )
Hi there --I have a hivemind service that loads test data into my app. I use the EagerLoad feature of hivemind to trigger this dataload. However, I get this exception:java.lang.IllegalStateException: The Infrastructure service has not yet been initialized. org.apache.tapestry.services.impl.InfrastructureImpl.getProperty(InfrastructureImpl.java:292)org.apache.tapestry.services.impl.InfrastructureImpl.getApplicationStateManager(InfrastructureImpl.java:116) $Infrastructure_10de95366c1.getApplicationStateManager($Infrastructure_10de95366c1.java) $Infrastructure_10de95366c0.getApplicationStateManager($Infrastructure_10de95366c0.java)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) The relevant hivemodule.xml snippet is: service-point id=sessionFactory interface=com.transparentpolitics.core.TransPolSessionManager invoke-factory construct class= com.transparentpolitics.core.TransPolSessionManagerImpl initialize-method=init set-object property=stateManager value=infrastructure:applicationStateManager/ set-service property=broadcastProviderManager service-id=broadcastProviderManager/ /construct /invoke-factory /service-point ( I have attached complete hivemodule.xml file)In the hivemodule.xml file, does anyone know how to inject the stateObject itself directly without going through the applicationStateManager? I know how to do it on a tapestry component/page but not in hivemind. -Pat Moore ?xml version=1.0? module id=transparentpolitics version=0.0.1 package=com.transparentpolitics contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=page service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=svc after=*/ /contribution contribution configuration-id=tapestry.state.ApplicationObjects state-object name=userInformation scope=session invoke-factory object=service:sessionFactory/ /state-object /contribution !-- schema id=databaseConnectionDef element name=prop key-attribute=key attribute name=key/ attribute name=value required=true/ rules push-attribute attribute=value/ invoke-parent method=addElement/ /rules /element /schema configuration-point id=databaseConnection schema-id=databaseConnectionDef/ contribution configuration-id=databaseConnection prop key=hibernate.dialect value=org.hibernate.dialect.MySQLDialect/ prop key=hibernate.show_sql value=true/ prop key=hibernate.connection.driver_class value=com.mysql.jdbc.Driver/ prop key=hibernate.connection.url value=jdbc:mysql://localhost/rbook/ prop key=hibernate.connection.username value=rbook/ prop key=hibernate.connection.password value=cafebabe/ /contribution -- service-point id=jsonRendererRegistry interface=com.transparentpolitics.core.JSONRendererRegistry invoke-factory construct class=com.transparentpolitics.core.JSONRendererRegistryImpl initialize-method=init /construct /invoke-factory /service-point service-point id=hibernateSessionManager interface=com.transparentpolitics.core.persistence.HibernateSessionManager invoke-factory construct class=com.transparentpolitics.core.persistence.HibernateSessionManager initialize-method=init /construct /invoke-factory /service-point service-point id=callbackRegistry interface=com.transparentpolitics.core.CallbackRegistry invoke-factory construct class=com.transparentpolitics.core.CallbackRegistryImpl initialize-method=init /construct /invoke-factory /service-point service-point id=messageEndPointFactory interface=com.transparentpolitics.core.messagehandling.MessageEndPointFactory invoke-factory construct class=com.transparentpolitics.core.messagehandling.MessageEndPointFactory initialize-method=init set-service property=jsonRendererRegistry service-id=jsonRendererRegistry/ set-service property=callbackRegistry service-id=callbackRegistry/ /construct /invoke-factory /service-point service-point id=tagManager interface=com.transparentpolitics.core.TagManager invoke-factory construct class=com.transparentpolitics.core.persistence.TagManagerImpl initialize-method=init set-service property=transPolSessionManager service-id=sessionFactory/ set-service property=hibernateSessionManager service-id=hibernateSessionManager/ /construct /invoke-factory /service-point service-point id=messageSourcePointFactory interface=com.transparentpolitics.core.messagehandling.MessageSourcePointFactory invoke-factory construct class=com.transparentpolitics.core.messagehandling.MessageSourcePointFactory initialize-method=init set-service property=broadcastEnvelopeFactory
RE: problems getting a session state object on start up (resend ..? )
Hi Pat, We ran into a similar situation and found a workable (but not pretty) solution. First, you need to contribute to the ApplicationInitializers contribution point as described in this thread: http://article.gmane.org/gmane.comp.java.tapestry.user/33013 But in this case you'll want to make sure your service is created after the ApplicationStateManager has been setup, so it should look something like this in hivemodule.xml: contribution configuration-id=tapestry.init.ApplicationInitializers command after=* id=myInitializer object=service:MyInitializer/ /contribution Then set the service you want to eager-load on MyInitializer and call something on it inside the initialize() method to ensure it gets created: public void initialize(HttpServlet servlet) { myEagerLoadedService.initializeMe(); } Maybe someone else knows a better way, but this is the best I'm come up with to deal with the issue of eager loading services that need the infrastructure. Ben From: Patrick Moore [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 26, 2006 10:45 AM To: users@tapestry.apache.org Subject: Re: problems getting a session state object on start up (resend ..? ) Hi there -- I have a hivemind service that loads test data into my app. I use the EagerLoad feature of hivemind to trigger this dataload. However, I get this exception: java.lang.IllegalStateException: The Infrastructure service has not yet been initialized. org.apache.tapestry.services .impl.InfrastructureImpl.getProperty(InfrastructureImpl.java:292) org.apache.tapestry.services.impl.InfrastructureImpl.getApplicationStateManager(InfrastructureImpl.java:116) $Infrastructure_10de95366c1.getApplicationStateManager($Infrastructure_10de95366c1.java) $Infrastructure_10de95366c0.getApplicationStateManager($Infrastructure_10de95366c0.java) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) The relevant hivemodule.xml snippet is: service-point id=sessionFactory interface=com.transparentpolitics.core.TransPolSessionManager invoke-factory construct class= com.transparentpolitics.core.TransPolSessionManagerImpl initialize-method=init set-object property=stateManager value=infrastructure:applicationStateManager/ set-service property=broadcastProviderManager service-id=broadcastProviderManager/ /construct /invoke-factory /service-point ( I have attached complete hivemodule.xml file) In the hivemodule.xml file, does anyone know how to inject the stateObject itself directly without going through the applicationStateManager? I know how to do it on a tapestry component/page but not in hivemind. -Pat Moore - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: problems getting a session state object on start up (resend ..? )
I ran across an email thread that just suggested to create the WebRequest/WebSession objects. So I am going to try that. If anyone has a better idea let me know. On 9/26/06, Patrick Moore [EMAIL PROTECTED] wrote: Hi Ben --- thanks for this info. I just tried what I think is your suggestion. I added the ApplicationInitializer interface to my demo.Samples service and added this method: public void initialize(HttpServlet arg0) { try { init(); } catch (IOException e) { e.printStackTrace(); } } and it doesn't seem to work quite completely. I get past the point of the infrastructure object ApplicationStateManager not being available. However, now I get a different exception. How does tapestry initialize a session? Is it possible for a background thread to initialize a tapestry session? -- java.lang.NullPointerException: Property 'webRequest' of OuterProxy for tapestry.globals.RequestGlobals( org.apache.tapestry.services.RequestGlobals) is null. at $WebRequest_10deb12def2._targetServiceProperty($WebRequest_10deb12def2.java) at $WebRequest_10deb12def2.getSession($WebRequest_10deb12def2.java) at $WebRequest_10deb12dec3.getSession($WebRequest_10deb12dec3.java) at $WebRequest_10deb12dec2.getSession($WebRequest_10deb12dec2.java) at org.apache.tapestry.engine.state.SessionScopeManager.getSession( SessionScopeManager.java:48) at org.apache.tapestry.engine.state.SessionScopeManager.get( SessionScopeManager.java:64) at $StateObjectPersistenceManager_10deb12deed.get($StateObjectPersistenceManager_10deb12deed.java) at $StateObjectPersistenceManager_10deb12deec.get($StateObjectPersistenceManager_10deb12deec.java) at org.apache.tapestry.engine.state.StateObjectManagerImpl.get( StateObjectManagerImpl.java:50) at org.apache.tapestry.engine.state.ApplicationStateManagerImpl.get ( ApplicationStateManagerImpl.java:60) at $ApplicationStateManager_10deb12de9a.get($ApplicationStateManager_10deb12de9a.java) at $ApplicationStateManager_10deb12de9b.get($ApplicationStateManager_10deb12de9b.java) at com.transparentpolitics.core.TransPolSessionManagerImpl.getTransPolSession (TransPolSessionManagerImpl.java:46)
RE: problems getting a session state object on start up (resend ..? )
I hope that works for you, unfortunately I'm out of ideas on this one. I'm not sure what you're trying to do makes sense, if I understand this correctly. It sounds like you are trying to directly access a session-scoped ASO as your eager-loaded service gets created, correct? The problem is you aren't going to have a web session without an associated request from the user, which isn't going to be there at the point the Hivemind registry is created. In my case, I needed to eager-load a service that needed the asoManager, but I didn't actually pull any ASOs out of it until later while processing user requests. If you're trying to setup some initial state in each ASO as it is created, couldn't you add an initialize() method to the ASO class and create it using invoke-factory? Sorry I don't have a better answer for you, Ben -Original Message- From: Patrick Moore [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 26, 2006 1:10 PM To: Tapestry users Subject: Re: problems getting a session state object on start up (resend ..? ) I ran across an email thread that just suggested to create the WebRequest/WebSession objects. So I am going to try that. If anyone has a better idea let me know. On 9/26/06, Patrick Moore [EMAIL PROTECTED] wrote: Hi Ben --- thanks for this info. I just tried what I think is your suggestion. I added the ApplicationInitializer interface to my demo.Samples service and added this method: public void initialize(HttpServlet arg0) { try { init(); } catch (IOException e) { e.printStackTrace(); } } and it doesn't seem to work quite completely. I get past the point of the infrastructure object ApplicationStateManager not being available. However, now I get a different exception. How does tapestry initialize a session? Is it possible for a background thread to initialize a tapestry session? -- java.lang.NullPointerException: Property 'webRequest' of OuterProxy for tapestry.globals.RequestGlobals( org.apache.tapestry.services.RequestGlobals) is null. at $WebRequest_10deb12def2._targetServiceProperty($WebRequest_10deb12def2.j ava) at $WebRequest_10deb12def2.getSession($WebRequest_10deb12def2.java) at $WebRequest_10deb12dec3.getSession($WebRequest_10deb12dec3.java) at $WebRequest_10deb12dec2.getSession($WebRequest_10deb12dec2.java) at org.apache.tapestry.engine.state.SessionScopeManager.getSession( SessionScopeManager.java:48) at org.apache.tapestry.engine.state.SessionScopeManager.get( SessionScopeManager.java:64) at $StateObjectPersistenceManager_10deb12deed.get($StateObjectPersistenceMa nager_10deb12deed.java) at $StateObjectPersistenceManager_10deb12deec.get($StateObjectPersistenceMa nager_10deb12deec.java) at org.apache.tapestry.engine.state.StateObjectManagerImpl.get( StateObjectManagerImpl.java:50) at org.apache.tapestry.engine.state.ApplicationStateManagerImpl.get ( ApplicationStateManagerImpl.java:60) at $ApplicationStateManager_10deb12de9a.get($ApplicationStateManager_10deb1 2de9a.java) at $ApplicationStateManager_10deb12de9b.get($ApplicationStateManager_10deb1 2de9b.java) at com.transparentpolitics.core.TransPolSessionManagerImpl.getTransPolSessi on (TransPolSessionManagerImpl.java:46) - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: problems getting a session state object on start up (resend ..? )
Hi Ben -- What I am trying to do is preload some sample data, *as if* a user has entered it. So I want to have a Session object that I am going to programatically configure. Also I will be doing some background processing on behalf of a user so I will need to have a session object for that case as well. In neither case do I have a HttpRequest -Pat On 9/26/06, Ben Dotte [EMAIL PROTECTED] wrote: I hope that works for you, unfortunately I'm out of ideas on this one. I'm not sure what you're trying to do makes sense, if I understand this correctly. It sounds like you are trying to directly access a session-scoped ASO as your eager-loaded service gets created, correct? The problem is you aren't going to have a web session without an associated request from the user, which isn't going to be there at the point the Hivemind registry is created. In my case, I needed to eager-load a service that needed the asoManager, but I didn't actually pull any ASOs out of it until later while processing user requests. If you're trying to setup some initial state in each ASO as it is created, couldn't you add an initialize() method to the ASO class and create it using invoke-factory? Sorry I don't have a better answer for you, Ben -Original Message- From: Patrick Moore [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 26, 2006 1:10 PM To: Tapestry users Subject: Re: problems getting a session state object on start up (resend ..? ) I ran across an email thread that just suggested to create the WebRequest/WebSession objects. So I am going to try that. If anyone has a better idea let me know. On 9/26/06, Patrick Moore [EMAIL PROTECTED] wrote: Hi Ben --- thanks for this info. I just tried what I think is your suggestion. I added the ApplicationInitializer interface to my demo.Samples service and added this method: public void initialize(HttpServlet arg0) { try { init(); } catch (IOException e) { e.printStackTrace(); } } and it doesn't seem to work quite completely. I get past the point of the infrastructure object ApplicationStateManager not being available. However, now I get a different exception. How does tapestry initialize a session? Is it possible for a background thread to initialize a tapestry session? -- java.lang.NullPointerException: Property 'webRequest' of OuterProxy for tapestry.globals.RequestGlobals( org.apache.tapestry.services.RequestGlobals) is null. at $WebRequest_10deb12def2._targetServiceProperty($WebRequest_10deb12def2.j ava) at $WebRequest_10deb12def2.getSession($WebRequest_10deb12def2.java) at $WebRequest_10deb12dec3.getSession($WebRequest_10deb12dec3.java) at $WebRequest_10deb12dec2.getSession($WebRequest_10deb12dec2.java) at org.apache.tapestry.engine.state.SessionScopeManager.getSession( SessionScopeManager.java:48) at org.apache.tapestry.engine.state.SessionScopeManager.get( SessionScopeManager.java:64) at $StateObjectPersistenceManager_10deb12deed.get($StateObjectPersistenceMa nager_10deb12deed.java) at $StateObjectPersistenceManager_10deb12deec.get($StateObjectPersistenceMa nager_10deb12deec.java) at org.apache.tapestry.engine.state.StateObjectManagerImpl.get( StateObjectManagerImpl.java:50) at org.apache.tapestry.engine.state.ApplicationStateManagerImpl.get ( ApplicationStateManagerImpl.java:60) at $ApplicationStateManager_10deb12de9a.get($ApplicationStateManager_10deb1 2de9a.java) at $ApplicationStateManager_10deb12de9b.get($ApplicationStateManager_10deb1 2de9b.java) at com.transparentpolitics.core.TransPolSessionManagerImpl.getTransPolSessi on (TransPolSessionManagerImpl.java:46) - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: problems getting a session state object on start up (resend ..? )
I remember spending an afternoon with a coworker once trying to do the same thing, feed a fake request/session to Tapestry for some similar reason. After a few hours we decided it was a silly idea and gave up on it... but good luck! Ben -Original Message- From: Patrick Moore [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 26, 2006 1:29 PM To: Tapestry users Subject: Re: problems getting a session state object on start up (resend ..? ) Hi Ben -- What I am trying to do is preload some sample data, *as if* a user has entered it. So I want to have a Session object that I am going to programatically configure. Also I will be doing some background processing on behalf of a user so I will need to have a session object for that case as well. In neither case do I have a HttpRequest -Pat On 9/26/06, Ben Dotte [EMAIL PROTECTED] wrote: I hope that works for you, unfortunately I'm out of ideas on this one. I'm not sure what you're trying to do makes sense, if I understand this correctly. It sounds like you are trying to directly access a session-scoped ASO as your eager-loaded service gets created, correct? The problem is you aren't going to have a web session without an associated request from the user, which isn't going to be there at the point the Hivemind registry is created. In my case, I needed to eager-load a service that needed the asoManager, but I didn't actually pull any ASOs out of it until later while processing user requests. If you're trying to setup some initial state in each ASO as it is created, couldn't you add an initialize() method to the ASO class and create it using invoke-factory? Sorry I don't have a better answer for you, Ben -Original Message- From: Patrick Moore [mailto:[EMAIL PROTECTED] Sent: Tuesday, September 26, 2006 1:10 PM To: Tapestry users Subject: Re: problems getting a session state object on start up (resend ..? ) I ran across an email thread that just suggested to create the WebRequest/WebSession objects. So I am going to try that. If anyone has a better idea let me know. On 9/26/06, Patrick Moore [EMAIL PROTECTED] wrote: Hi Ben --- thanks for this info. I just tried what I think is your suggestion. I added the ApplicationInitializer interface to my demo.Samples service and added this method: public void initialize(HttpServlet arg0) { try { init(); } catch (IOException e) { e.printStackTrace(); } } and it doesn't seem to work quite completely. I get past the point of the infrastructure object ApplicationStateManager not being available. However, now I get a different exception. How does tapestry initialize a session? Is it possible for a background thread to initialize a tapestry session? -- java.lang.NullPointerException: Property 'webRequest' of OuterProxy for tapestry.globals.RequestGlobals( org.apache.tapestry.services.RequestGlobals) is null. at $WebRequest_10deb12def2._targetServiceProperty($WebRequest_10deb12def2.j ava) at $WebRequest_10deb12def2.getSession($WebRequest_10deb12def2.java) at $WebRequest_10deb12dec3.getSession($WebRequest_10deb12dec3.java) at $WebRequest_10deb12dec2.getSession($WebRequest_10deb12dec2.java) at org.apache.tapestry.engine.state.SessionScopeManager.getSession( SessionScopeManager.java:48) at org.apache.tapestry.engine.state.SessionScopeManager.get( SessionScopeManager.java:64) at $StateObjectPersistenceManager_10deb12deed.get($StateObjectPersistenceMa nager_10deb12deed.java) at $StateObjectPersistenceManager_10deb12deec.get($StateObjectPersistenceMa nager_10deb12deec.java) at org.apache.tapestry.engine.state.StateObjectManagerImpl.get( StateObjectManagerImpl.java:50) at org.apache.tapestry.engine.state.ApplicationStateManagerImpl.get ( ApplicationStateManagerImpl.java:60) at $ApplicationStateManager_10deb12de9a.get($ApplicationStateManager_10deb1 2de9a.java) at $ApplicationStateManager_10deb12de9b.get($ApplicationStateManager_10deb1 2de9b.java) at com.transparentpolitics.core.TransPolSessionManagerImpl.getTransPolSessi on (TransPolSessionManagerImpl.java:46) - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: problems getting a session state object on start up (resend ..? )
I have given myself 1 more hour before I use my fallback solution. But it is just one of those things that you say there *has* to be a way to make it work! :-) -Pat On 9/26/06, Ben Dotte [EMAIL PROTECTED] wrote: I remember spending an afternoon with a coworker once trying to do the same thing, feed a fake request/session to Tapestry for some similar reason. After a few hours we decided it was a silly idea and gave up on it... but good luck! Ben
Re: problems getting a session state object on start up (resend ..? )
o.k. so it doesn't have to work... It doesn't look like there is any way to get to the Hivemind Registry until it has completely initialized ... which is too late. So I am going to have my stateObjectFactory check to see if it can get to the registry which is a little bit hacky and if it can't then create a session object that it tracks itself rather than using the applicationStateManager. There should be a better way! On 9/26/06, Patrick Moore [EMAIL PROTECTED] wrote: I have given myself 1 more hour before I use my fallback solution. But it is just one of those things that you say there *has* to be a way to make it work! :-) -Pat On 9/26/06, Ben Dotte [EMAIL PROTECTED] wrote: I remember spending an afternoon with a coworker once trying to do the same thing, feed a fake request/session to Tapestry for some similar reason. After a few hours we decided it was a silly idea and gave up on it... but good luck! Ben