如果想在web应用启动时做一些初始化的工作,就象在Servlet的init方法中的一样,同时又想把初始化的数据存储于Global中供访问.就需要配置一个ApplicationInitializer.步骤如下:
1.新建一个类实现org.apache.tapestry.services.ApplicationInitializer接口.
public final class ApplicationInitializer implements
org.apache.tapestry.services.ApplicationInitializer {
public static final Log LOG = LogFactory
.getLog(ApplicationInitializer.class);
private Infrastructure infrastructure;
public Infrastructure getInfrastructure() {
return infrastructure;
}
public void setInfrastructure(Infrastructure infrastructure) {
this.infrastructure = infrastructure;
}
public void initialize(HttpServlet servlet) {
Global global = (Global) infrastructure.getApplicationStateManager()
.get("global");
//其他初始化代码,可将数据写入global中
}
2.修改hivemind.xml
<service-point id="ApplicationInitializer"
interface="org.apache.tapestry.services.ApplicationInitializer"
visibility="private">
<invoke-factory>
<construct class="com.fitechlabs.xweb.core.ApplicationInitializer">
<set-service property="infrastructure" service-id="tapestry.Infrastructure"/>
</construct>
</invoke-factory>
</service-point>
<contribution configuration-id="tapestry.init.ApplicationInitializers">
<command id="xweb-init" object="service:ApplicationInitializer" after="*"/>
</contribution>
其中,after="*"是必须的,可以确保tapestry完成所有的初始化任务,以便可以访问Global对象.
1.新建一个类实现org.apache.tapestry.services.ApplicationInitializer接口.
public final class ApplicationInitializer implements
org.apache.tapestry.services.ApplicationInitializer {
public static final Log LOG = LogFactory
.getLog(ApplicationInitializer.class);
private Infrastructure infrastructure;
public Infrastructure getInfrastructure() {
return infrastructure;
}
public void setInfrastructure(Infrastructure infrastructure) {
this.infrastructure = infrastructure;
}
public void initialize(HttpServlet servlet) {
Global global = (Global) infrastructure.getApplicationStateManager()
.get("global");
//其他初始化代码,可将数据写入global中
}
2.修改hivemind.xml
<service-point id="ApplicationInitializer"
interface="org.apache.tapestry.services.ApplicationInitializer"
visibility="private">
<invoke-factory>
<construct class="com.fitechlabs.xweb.core.ApplicationInitializer">
<set-service property="infrastructure" service-id="tapestry.Infrastructure"/>
</construct>
</invoke-factory>
</service-point>
<contribution configuration-id="tapestry.init.ApplicationInitializers">
<command id="xweb-init" object="service:ApplicationInitializer" after="*"/>
</contribution>
其中,after="*"是必须的,可以确保tapestry完成所有的初始化任务,以便可以访问Global对象.