
Confluence的缓存使用的是Orachle的Coherence技术,配置在confluence-coherence-cache-config.xml配置文件中定义的(在目录..\confluence\WEB-INF\classes下)。详细的配置定义可以参看
Coherence的配置元素参考,这里简要说明需要调整的配置。
缓存配置的问题
配置文件的根节点
定义要配置的项,下表中的项是LDAP部分的
<cache-mapping>
<cache-name>com.atlassian.user.impl.ldap.LDAPUserManagerReadOnly.users_ro</CACHE-NAME>
<scheme-name>user</SCHEME-NAME>
</CACHE-MAPPING>
<cache-mapping>
<cache-name>com.atlassian.user.impl.ldap.LDAPUserManagerReadOnly.repositories</CACHE-NAME>
<scheme-name>user</SCHEME-NAME>
</CACHE-MAPPING>
<cache-mapping>
<cache-name>com.atlassian.user.impl.ldap.LDAPGroupManagerReadOnly.groups</CACHE-NAME>
<scheme-name>user</SCHEME-NAME>
</CACHE-MAPPING>
<cache-mapping>
<cache-name>com.atlassian.user.impl.ldap.LDAPGroupManagerReadOnly.groups_hasMembership</CACHE-NAME>
<scheme-name>user</SCHEME-NAME>
</CACHE-MAPPING>
<cache-mapping>
<cache-name>com.atlassian.user.impl.ldap.LDAPGroupManagerReadOnly.groups_getGroupsForUser</CACHE-NAME>
<scheme-name>user</SCHEME-NAME>
</CACHE-MAPPING>
<cache-mapping>
<cache-name>com.atlassian.user.impl.ldap.LDAPGroupManagerReadOnly.repositories</CACHE-NAME>
<scheme-name>user</SCHEME-NAME>
</CACHE-MAPPING>
schema-name定义了配置表的名称为user,上面的LDAP的配置都使用user配置表,前面提到加入组无效的问题,就是因为"com.atlassian.user.impl.ldap.LDAPGroupManagerReadOnly.groups_getGroupsForUser"缓存的原因。
接下来我们看配置的缓存值,
<local-scheme>
<scheme-name>default</SCHEME-NAME>
<class-name>com.atlassian.confluence.cache.tangosol.HitTrackingLocalCache</CLASS-NAME>
<high-units>1000</HIGH-UNITS>
<expiry-delay>3600</EXPIRY-DELAY>
</LOCAL-SCHEME>
<local-scheme>
<scheme-name>user</SCHEME-NAME>
<scheme-ref>default</SCHEME-REF>
<high-units>5000</HIGH-UNITS>
<expiry-delay>300s</EXPIRY-DELAY> //定义缓存过期的时间,可以根据需要进行调整
</LOCAL-SCHEME>
user的schema使用default。从这个表看,user的expiry-delay项为300秒,也就是过5分钟后,该用户就可以具有权限访问WIKI页面了,但实际上并非如此,用户依然未授权。后检查发现,这个配置项根本不起作用!而是使用了default的设置,3600秒也就是60分钟才会过期。问题出在cache-mapping的定义上,在Cache Statistics的页面可以看到缓存定义项的名字比配置文件中的定义名多了一级:ldapRepository。这是atlassian-user.xml配置的ldap库的名字,原来Confluence内部的缓存配置项名加上了库的名字,但在默认的配置项定义中却没有,因此上面的配置根本不起作用。Confluence的文档也未提到这一点,让我折腾了很长时间!!
解决办法
解决办法很简单,就是在cache-mapping的cache-name值的com.atlassian.user.impl.ldap.LDAPGroupManagerReadOnly后面加上库的名字即可,新的配置如下:
<cache-mapping>
<cache-name>com.atlassian.user.impl.ldap.LDAPUserManagerReadOnly.ldapRepository.users</CACHE-NAME>
<scheme-name>user</SCHEME-NAME>
</CACHE-MAPPING
修改后重启Tomcat即可。


没有评论:
发表评论