Coherence Extend Proxy将未初始化的对象放入缓存中

时间:2015-02-18 15:44:34

标签: oracle-coherence

我们有一个现有的应用程序,它使用Oracle Coherence群集向/从群集缓存中放入/获取POFable对象。我正在尝试修改它以使用扩展代理来执行相同的操作。到目前为止,我已经能够启动一个连接到我们集群的独立代理进程,并且我已经修改了现有应用程序的缓存配置以连接到扩展代理。在启动时,一切看起来都很开心和联系。但是当我尝试将某些东西放入缓存中时,对象最终将所有字段都未初始化。

在将键/值对放入缓存时,我没有更改任何客户端应用程序代码,因为据我所知,使用extend应该对客户端透明。这是将对象放入缓存的代码:

// Initiliaze POF object from DB; MyObject implements EvolvablePortableObject
MyObject o = new MyObject();
o.setField1(...);
o.setField2(...);
o.setField3(...);

CacheFactory.getCache("cache-name").put(key, o, expireTime);

最终结果是对象最终在缓存中,其所有字段都未初始化(即全零和空值)。我已经使用调试器确认在客户端内部,对象已完全初始化,并且所有字段都按照我的预期填充。同样,我在代理应用程序中调用MyObject.writeExternal()时使用调试器来显示对象未初始化。所以在客户端和代理之间出现了一些问题,但我不确定是什么。两者都指向相同的POF配置文件并具有相同的类路径,因此它们应该看到相同的POF方案和Java对象。我已经在客户端和代理上将日志记录升级到9级,但我没有看到任何异常的消息。当我在没有代理的情况下运行时,客户端能够将相同的对象放入缓存中而没有任何问题。

1 个答案:

答案 0 :(得分:0)

如果其他人有这个问题,根本原因最终会成为一些缺失的标签。我已经在extendor-config下为扩展服务定义了它:

        <serializer>
           <class-name>com.tangosol.io.pof.ConfigurablePofContext</class-name>
           <init-params>
              <init-param>
                 <param-type>java.lang.String</param-type>
                 <param-value>pof-config.xml</param-value>
              </init-param>
           </init-params>
        </serializer>

(如果您定义一个,则调用服务需要同样的事情。)

但是还必须在客户端配置中添加类似的配置以使事情匹配:

<defaults>
  <serializer>
     <class-name>com.tangosol.io.pof.ConfigurablePofContext</class-name>
     <init-params>
        <init-param>
           <param-type>java.lang.String</param-type>
           <param-value>pof-config.xml</param-value>
        </init-param>
     </init-params>
  </serializer>