Crap.. I forgot about that dependency on the web request. That never
made sense to me for the case of application-scope ASOs.
In any case, here is a wild idea. If you can capture and hold onto the
Hivemind-created instance of the ASO, you could then give out access to
it through a static getter, similar to a regular old singleton.
To do this you would need to wire up the ASO through a
StateObjectFactory.
So in hivemodule.xml:
<contribution configuration-id="tapestry.state.ApplicationObjects">
<state-object name="myApplicationObject" scope="application">
<invoke-factory object="service:stateFactory" />
</state-object>
</contribution>
<service-point id="stateFactory"
interface="org.apache.tapestry.engine.state.StateObjectFactory">
<invoke-factory>
<construct class="ns.MyAppObjectFactory" />
</invoke-factory>
</service-point>
In MyAppObjectFactory you can instantiate the object you want to use as
an ASO:
public class MyAppObjectFactory implements StateObjectFactory
{
public Object createStateObject()
{
return new MyApplicationObject();
}
}
Then in MyApplicationObject you could store the instance that gets
created:
public class MyApplicationObject
{
private static MyApplicationObject instance;
public MyApplicationObject()
{
instance = this;
}
public static MyApplicationObject getInstance()
{
return instance;
}
}
Then in your ServletContextListener you can just call
MyApplicationObject.getInstance().
Not the prettiest solution but I believe this would work.
Ben
-----Original Message-----
From: Tapestry User List [mailto:[EMAIL PROTECTED]
Sent: Thursday, January 04, 2007 9:19 AM
To: Tapestry users
Subject: Re: Re: how to retrieve an Application State Object (ASO) with
an application scope from the ServletContext ?
It doesn't work.
Registry registry =
(Registry)context.getAttribute("org.apache.tapestry.Registry:app");
returns null.
D.
2007/1/4, James Carman <[EMAIL PROTECTED]>:
> I don't think that'll work. The ApplicationStateManager needs a
> reference to the current web request (eventually the session).
>
>
> On 1/4/07, Ben Dotte <[EMAIL PROTECTED]> wrote:
> > Hi,
> >
> > You could do something like this:
> >
> > ((ApplicationStateManager) ((Registry)
> >
context.getAttribute("org.apache.tapestry.Registry:app")).getService(App
> > licationStateManager.class)).get("myStateObject");
> >
> > Where "myStateObject" is the name of your ASO.
> >
> > HTH
> >
> > Ben
> >
> > -----Original Message-----
> > From: Tapestry User List [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, January 04, 2007 8:45 AM
> > To: [email protected]
> > Subject: how to retrieve an Application State Object (ASO) with an
> > application scope from the ServletContext ?
> >
> > Hi,
> >
> > Happy new year !!!!
> >
> > I have created a class that implements ServletContextListener.
> > In the method public void contextDestroyed(ServletContextEvent
event),
> > I need to retrieve an Application State Object (ASO) of tapestry 4
> > with an application scope (not session).
> >
> > My question is how to retrieve an Application State Object (ASO)
from
> > the ServletContext ?
> >
> >
> > public void contextDestroyed(ServletContextEvent event) {
> > ServletContext context = event.getServletContext();
> > // retrieve myApplicationObject here
> > }
> >
> > In hivemodule.xml:
> > ...
> > <contribution configuration-id="tapestry.state.ApplicationObjects">
> > <state-object name="myApplicationObject"
> > scope="application">
> > <create-instance
> > class="ns.MyApplicationObject"/>
> > </state-object>
> > </contribution>
> > ...
> >
> > Thanks so much,
> >
> > D.
> >
> >
---------------------------------------------------------------------
> > 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]
> >
> >
> >
>
> ---------------------------------------------------------------------
> 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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]