The situation is :

I create class that extends ApplicationServlet and I specify it as the
tapestry main servlet in web.xml. In this class I call a class that
initialise some "application objects" such as list of element common to
everybody from the database.
My class also set a bean member and implement the get/set method.

I also specified this class as an ASO as you told me to do Geoff and I put
the inject tag in my Home.page.
At the loading of the application, my "application object" is loaded
normally and contains all the list.
When I call the Home.page, the inject seems to work and the pageBeginRender
is called normally. I call getMyASO() I declared abstract, but when I try to
get the "application object" it is null!!

I think Tapestry recreate an instance of MyASO instead of directly get the
first loaded :

web.xml
 ...
 <servlet>
   <servlet-name>dm</servlet-name>
   <display-name>DM Initialization servlet</display-name>
   <servlet-class>dgt.dm.controller.DossierManagerApplication
</servlet-class>
   <load-on-startup>0</load-on-startup>
 </servlet>
 ...

hivemodule.xml
<?xml version="1.0" encoding="UTF-8"?>
<module id="dgt.dm.controller" version="06.02.01" package="dgt.dm.controller
">
 <contribution configuration-id="tapestry.state.ApplicationObjects">
   <state-object name="dossierManagerApplication" scope="application">
     <create-instance class="dgt.dm.controller.DossierManagerApplication"/>
   </state-object>
 </contribution>
</module>

DossierManagerApplication.java
public class DossierManagerApplication extends ApplicationServlet {

 private ApplicationSettings appSettings = null;
 public ApplicationSettings getAppSettings() { return appSettings; }
 public void setAppSettings(ApplicationSettings appSettings) {
this.appSettings = appSettings; }

 private InitServlet is = null;

 public void init(ServletConfig arg0) throws ServletException {
   super.init(arg0);
   String webRootPath = getServletContext().getRealPath("/");
   is = new InitServlet();
   is.init(webRootPath);
   appSettings = is.getAppSettings();
// NOT NULL WHEN I DEBUG
 }
 ...

HomePage.page
...
<page-specification class="dgt.dm.pages.HomePage">
 <inject property="dossierManagerApplication" type="state"
object="dossierManagerApplication"/>
</page-specification>

HomePage.java
 public abstract DossierManagerApplication getDossierManagerApplication();
 public abstract void
setDossierManagerApplication(DossierManagerApplication
dossierManagerApplication);

 public void pageBeginRender(PageEvent event) {
     DossierManagerApplication dossierManagerApplication =
getDossierManagerApplication();
     ApplicationSettings appSettings =
dossierManagerApplication.getAppSettings();
     // IS NULL
     setRequesters(appSettings.getRequesters());
     setLanguages(appSettings.getLanguages());
 }

Thanks for help...

BW

2006/7/20, Blackwings <[EMAIL PROTECTED]>:

Thanks a lot, but I have a question again: To what, the id in the module
tag, refer? Is it the name of my context? is it app? is it the package where
something (what?) is store? Same question for the version.

Thanks anyway

BW

2006/7/20, Geoff Callender <[EMAIL PROTECTED]>:

> BW,
>
> No need to touch hivemind.xml.  Add a file called hivemodule.xml to
> WEB-INF, with content similar to this:
>
> <?xml version="1.0"?>
>
> <module id="jumpstart" version=" 1.0.0" package="jumpstart.web">
>
>         <!--  ServiceLocator and Visit -->
>
>         <contribution configuration-id="
> tapestry.state.ApplicationObjects">
>                 <state-object name="serviceLocator" scope="application">
>
>                         <create-instance class="
> jumpstart.web.base.ServiceLocator"/>
>                 </state-object>
>         </contribution>
>
>         <contribution configuration-id="
> tapestry.state.ApplicationObjects">
>                 <state-object name="visit" scope="session">
>                         <create-instance class="jumpstart.web.base.Visit"/>
>
>                 </state-object>
>         </contribution>
>
> </module>
>
> In that example, ServiceLocator performs a similar function to the
> typical Global.  Visit is just like the old Visit.  Note that the
> scope of ServiceLocator is "application" and the scope of Visit is
> "session".
>
> Here's an example of them being referenced in a page:
>
>         @InjectState("serviceLocator")
>         public abstract ServiceLocator getServiceLocator();
>
>         @InjectState("visit")
>         // Can't call it getVisit() because it conflicts with a
> deprecated
> IPage method
>         public abstract Visit getMyVisit();
>
> Hope this helps.
>
> Geoff
> http://tapestry.apache.org/tapestry4.1/QuickStart/contributed.html
>
>
> On 20/07/2006, at 7:58 PM, Blackwings wrote:
>
> > Hi,
> >
> > I found in the document what is the line to add into hivemind.xml
> > file to
> > create an ASO since getGlobal is deprecated. But I didn't find a
> > standard"
> > hivemind.xml file and I have no idea what is mandatory to put in. I
> > just
> > want to declare my ASO object to be able to inject it in my page.
> >
> > So, where can I find a standard hivemind.xml or what do I have to
> > put in to
> > still have my application working normally?
> >
> > Thanks
> >
> > BW
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to