我想在adf页面点击按钮时从托管bean设置应用程序模块配置属性(jbo.ampool.timetolive)值,我尝试使用以下代码,但未设置属性值。
public Object getInfo(String string, Object environment) {
Hashtable envHashtable = (Hashtable)environment;
envHashtable.put(ApplicationModule.PROPERTY_LABEL.equals("jbo.ampool.timetolive"),"7200000");
return null;
}
请帮助我解决这个问题
答案 0 :(得分:0)
好的,这是棘手的事情,但这是我会尝试的:
在您的配置(bc4j.xcfg文件)中,将jbo.ampool.sessioncookiefactoryclass
设置为指向您将提供的课程(让我们称之为MySessionCookieFactory
)
<BC4JConfig ...>
<AppModuleConfigBag ...>
<AppModuleConfig ...>
<AM-Pooling jbo.ampool.sessioncookiefactoryclass="mypackage.MySessionCookieFactory"/>
该类MySessionCookieFactory
必须扩展oracle.jbo.common.ampool.SessionCookieFactory
并覆盖createSessionCookie
才能传回自定义的EnvInfoProvider。
public SessionCookie createSessionCookie(String applicationId, String sessionId, ApplicationPool pool,
Properties properties) {
final SessionCookie cookie = mFactory.createSessionCookie(applicationId, sessionId, pool, properties);
final EnvInfoProvider provider = new MyEnvInfoProvider();
cookie.setEnvInfoProvider(provider);
return cookie;
}
MyEnvInfoProvider
必须扩展oracle.jbo.common.ampool.EnvInfoProvider
并覆盖getInfo()
以传回您想要的jbo.ampool.timetolive
值的环境。
所以,在MyEnvInfoProvider
...
@Override
public Object getInfo(String infoType,
Object configurationEnvironmentObject) {
// NOTE: Watch logging in this method. It gets called for *every request* and it can really clutter up a log.
// Cast the configuration environment passed in to it's correct type. It's really lame that Oracle's signatures include Object types
// instead of the correct classes or interfaces.
final Hashtable<String, String> configurationEnvironmentHashtable =
(Hashtable<String, String>) configurationEnvironmentObject;
// if (EnvInfoProvider.INFO_TYPE_SESSION_ENVIRONMENT.equals(infoType)) {
configurationEnvironmentHashtable.put(PropertyConstants.ENV_AMPOOL_TIME_TO_LIVE, (String) MyClass.getTTL());
// }
return configurationEnvironmentHashtable;
}
所以,如果你做了所有这些,你将控制jbo.ampool.timetolive
为MyClass.getTTL()
返回的任何内容。因此,您需要做的就是更新MyClass.getTTL()
的变量,它将被用作jbo.ampool.timetolive
。
我已经完成了这种方法环境设置,但特别是jbo.ampool.timetolive
没有,所以我无法保证这对您有用。
另外,为什么需要动态设置?为什么不在您的bc4j.xcfg
文件中添加720000并完成它?