Java 大家好,以编程方式访问am属性

Java 大家好,以编程方式访问am属性,java,oracle,oracle-adf,Java,Oracle,Oracle Adf,我想通过从adf页面单击按钮,从托管bean中设置应用程序模块配置属性(jbo.ampool.timetolive)值,我已尝试使用以下代码,但未设置属性值 public Object getInfo(String string, Object environment) { Hashtable envHashtable = (Hashtable)environment; envHashtable.put(ApplicationModule.PROPERTY_LABEL

我想通过从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;
}

请帮我解决这个问题好吧,这是个棘手的问题,但以下是我要尝试的:

在您的配置(bc4j.xcfg文件)中,将
jbo.ampool.sessioncookiefactoryclass
设置为指向您将提供的类(我们称之为
MySessionCookieFactory

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;
}
@覆盖
公共对象getInfo(字符串信息类型,
对象配置环境(对象){
//注意:在这个方法中观察日志记录。它会被*每个请求*调用,而且它会把日志弄得乱七八糟。
//将传入的配置环境强制转换为正确的类型。Oracle的签名包含对象类型,这真是太差劲了
//而不是正确的类或接口。
最终哈希表配置环境哈希表=
(哈希表)配置环境对象;
//if(EnvInfoProvider.INFO\u TYPE\u SESSION\u ENVIRONMENT.equals(infoType)){
configurationEnvironmentHashtable.put(PropertyConstants.ENV_AMPOOL_TIME_TO_LIVE,(String)MyClass.gettl());
//        }
返回configurationEnvironmentHashtable;
}
因此,如果您做了所有这些,您将控制
jbo.ampool.timetolive
成为
MyClass.gettl()
返回的内容。因此,您需要做的就是更新一个变量
MyClass.gettl()
,它将被用作
jbo.ampool.timetolive

我已经完成了这种方法的环境设置,但没有特别使用
jbo.ampool.timetolive
,所以我不能保证这对您有效


另外,为什么需要动态地设置它?为什么不把720000放入你的
bc4j.xcfg
文件中,然后把它处理掉呢?

请投入一些时间,提出你的问题,并加以改进,使其可读性和可回答性。我建议遵循这一点。我不知道为什么所有的反对票。我同意这不是一个典型的问题,但他在《你知道的ADF》中提出的问题已经很清楚了。
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;
}
@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;
}