Tapestry3.0では2種類のASO(Application state Object)が用意されていました。

Visit:

セッション毎に作成されるオブジェクト
例えばユーザがログインしてログアウトするまでの、状態を保持する時に使用します

Global

アプリケーション単位で作成されるオブジェクト
アプリケーションが起動して終了するまでの状態を保持する。初期設定値等を保持するのに使用される

Tapestry3では、ページやコンポーネントからの、これらのオブジェクトへのアクセスは、getVisit(), getGlobal()等のメソッドが用意されアクセスする事が可能でした。Tapestry4では、この2つの関数はまだ残っていますが、動作が異なりますので注意が必要です。

Tapestry4では、getVisit(), getGlobal()は使用せずに、自分でApplication State Objectの作成をします。
私の場合は、appVisit, appGlobalの名前で作成し、わざと従来のVisit,Globalと区別して使用しています。

hivemodule.xml

<!--  Visit & Global -->
<contribution configuration-id="tapestry.state.ApplicationObjects">
<state-object name="AppVisit" scope="session">
<create-instance class="jp.co.taosoftware.tagraw.tape.AppVisit" />
</state-object>
</contribution>
<contribution configuration-id="tapestry.state.ApplicationObjects">
<state-object name="AppGlobal" scope="application">
<create-instance class="jp.co.taosoftware.tagraw.tape.AppGlobal" />
</state-object>
</contribution>


AppVisitオブジェクト

public class AppVisit implements Serializable{
private User user;
public User getUser(){ return this.user;}
public void setUser(User aUser){ this.user = aUser;}
public boolean isLogin(){
if(user == null) return false;
else return true;
}
}

AppGlobalオブジェクト

public class AppGlobal implements Serializable{
}

ページ

public abstract class AppPage extends BasePage{
@InjectState("AppVisit")
public abstract AppVisit getAppVisit();
public abstract void setAppVisit(AppVisit aVisit);
@InjectState("AppGlobal")
public abstract AppVisit getAppVisit();
public abstract void setAppVisit(AppVisit aVisit);
}

上記の組み合わせでAppPageから、getAppVisit(), getAppGlobal()メソッドを通して、ASOへのアクセスが可能になります。
Annotesionを使用しない場合は、*.pageファイルに以下の記述を追加します。

<inject name="appVisit" type="state" object="appVisit"/>

私の場合はGlobalは何も使用していません。基本的にページやコンポーネントからしか、これらのASOへのアクセスは出来ませんので、VisitはともかくGlobalは使いにくいからです。