Phillip,
Thank you very much for the tip. I went ahead and more or less did what you
suggested and it worked giving something very close to what I originally
intended (or wanted to do).
Even though this worked, I am still very much interested in what John
suggested in his ealier post. His comments, if followed, certainly would
provide something more portable and when I have the time I might look into
doing something something like that.
Thanks again, you were all very helpful. If anyone is interested this is
what I ended up with:
===web.xml===
<web-app>
...
<listener>
<listener-class>org.objectstyle.cayenne.conf.WebApplicationContextProvider</listener-class>
</listener>
...
</web-app>
===hivemodule.xml===
<module id="com.pestorich.tapestry" version="1.0.0">
<service-point id="DataContextService">
<create-instance class="DataContextServiceImpl" />
<interceptor service-id="hivemind.LoggingInterceptor" />
</service-point>
<service-point id="SessionFactory">
<invoke-factory>
<construct class="SessionFactory" />
</invoke-factory>
<interceptor service-id="hivemind.LoggingInterceptor" />
</service-point>
<contribution configuration-id="tapestry.state.ApplicationObjects">
<state-object name="Session" scope="session">
<invoke-factory object="service:SessionFactory" />
</state-object>
</contribution>
</module>
===DataContextService.java===
package com.pestorich.tapestry;
import org.objectstyle.cayenne.access.DataContext;
public interface DataContextService {
public DataContext getDataContext();
}
===DataContextServiceImpl.java===
package com.pestorich.tapestry;
import org.objectstyle.cayenne.access.DataContext;
public class DataContextServiceImpl implements DataContextService {
public DataContext getDataContext() {
return DataContext.getThreadDataContext();
}
}
===Session.java===
package com.pestorich.tapestry;
import java.io.Serializable;
import org.objectstyle.cayenne.access.DataContext;
public class Session implements Serializable {
private static final long serialVersionUID = 1L;
private DataContext _dataContext;
public Session(DataContext dataContext) {
_dataContext = dataContext;
}
public DataContext getDataContext() {
return _dataContext;
}
}
===SessionFactory.java===
package com.pestorich.tapestry;
import org.apache.tapestry.engine.state.StateObjectFactory;
import com.pestorich.tapestry.service.DataContextService;
public class SessionFactory implements StateObjectFactory {
private DataContextService _dataContextService;
public void setDataContextService(DataContextService dataContextService)
{
_dataContextService = dataContextService;
}
public Object createStateObject() {
return new Session(_dataContextService.getDataContext());
}
}
From: spamsucks <[EMAIL PROTECTED]>
Reply-To: "Tapestry users" <[email protected]>
To: Tapestry users <[email protected]>
Subject: Re: Injecting service into ASO
Date: Fri, 17 Feb 2006 07:59:58 -0500
I am not the authority, but I just solved this error myself.
You cannot pass objects directly to tapestry in hivemind. In brief, have
your DataContextService implement
org.apache.tapestry.engine.state.StateObjectFactory and return an instance
to itself. There is a page that I got some help on at
http://wiki.apache.org/jakarta-tapestry/Tapestry+Spring+SSO+ASO that while
not exactly what you need could help out.
HTH
Phillip
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]