我们有一个现有的应用程序,它使用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级,但我没有看到任何异常的消息。当我在没有代理的情况下运行时,客户端能够将相同的对象放入缓存中而没有任何问题。
答案 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>