본문 바로가기
개발언어

Openfire Roster cache clear 하려니

by 엔돌슨 2011. 12. 6.
반응형
오픈파이어에서 Active Directory(AD)을 LDAP로 연동을 하였습니다. 그리고 AD정보가 변경되었을 경우 spark 메신져와 사내메신져에 반영되게 처리 하였습니다. 문제는 추가 변경된 사용자가 바로 올라오지 않는 문제가 있었습니다. 결국은 Openfire의 cache을 삭제하거나 openfire을 재시작하면 처리가 가능합니다.
캐쉬를 지우는 api을 재공해주면 편하게 처리할 수 있겠지만 문제가 있네요.




Openfire의 그룹공유를 하는 방법을 설명한 동영상입니다. AD의 Group는 Roster로 설정할 수 있습니다. 사용자를 그룹에 넣어 관리할 수 있습니다. 그룹안에 사용자끼리 온라인/오프라인 정보를 공유하게 처리할 수 있습니다.





http://community.igniterealtime.org/message/151542#151542 

Openfire caches several things including the groups.  You can clear the cache from the Cache Summary page of the admin console.

 

By default, Openfire will cache data for 6 hours.  If you need to see the change before then, you will have to manually clear the cache.  AFAIK, there are no options available to allow you to manage the group cache lifetime.


6시간이 지나면 그룹정보를 가지고 있는 Roster가 갱신되게 됩니다. 그래서 AD의 Group에 추가된 사용자가 로그인 되었는 지 정보가 갱신되게 됩니다. 보다 빠른 갱신을 원한다면 위의 캡쳐에 보이는 Roster을 체크하여 캐시를 삭제하시면 됩니다. 또는 오픈파이어 재시작을 합니다.

http://community.igniterealtime.org/thread/34716

do you want to write a plugin to delete the roster cache?

It would be a much better idea to write a plugin similar to the export/import plugin which uses the Openfire API to modify the roster.

 

If you want to clear the cache only one time you may either visithttps://example.com:9091/system-cache.jsp or restart Openfire.

 



어떻게 하면 Contact List에 나오게 할 수 있을까요?
http://community.igniterealtime.org/thread/31184
It looks like all the groups (from AD) are showing up on the server with the appropriate members, 
but when users login they do not see the group in their roster/contact list unless "Enter contact list group name" is 
filled out (or "Share group with additional users" is selected) even when "Enable contact list group sharing" radio button is selected (default). 
What I thought it would do is show only the groups that the users belong to 
which judgeing by the statement "By default, this group will only appear in the contact lists of the group's members" is what it should do.


INSERT INTO OFGROUPPROP VALUES('Group1','sharedRoster.displayName','')
INSERT INTO OFGROUPPROP VALUES('Group1','sharedRoster.groupList','')
INSERT INTO OFGROUPPROP VALUES('Group1','sharedRoster.showInRoster','nobody')

INSERT INTO OFGROUPPROP VALUES('Group2','sharedRoster.displayName','SharedAsGroup2')
INSERT INTO OFGROUPPROP VALUES('Group2','sharedRoster.groupList','')
INSERT INTO OFGROUPPROP VALUES('Group2','sharedRoster.showInRoster',everybody')

INSERT INTO OFGROUPPROP VALUES('Group3','sharedRoster.displayName','SharedAsGroup3')
INSERT INTO OFGROUPPROP VALUES('Group3','sharedRoster.groupList','')
INSERT INTO OFGROUPPROP VALUES('Group3','sharedRoster.showInRoster','onlyGroup')

Group1 does not appear in users' roster
Group2 appears in every users' roster
Group3 appears in group members only

이렇게 오픈파이어 Database을 직접 제어 할 수도 있습니다. 물런 추천을 하는 방법은 아니지만 설정값을 insert를 하면 그룹공개, 전체공개, 비공개로 변경할 수 있습니다. 그룹 안에서 공개를 위해서 onlyGroup 설정으로 공개 할 수 있습니다.


사용자를 보이게 하는 방법으로 간단히 Enable contact list group sharing 설정으로 그룹안에 사용자를 볼 수 있게 할 수 있습니다.
하지만 갱신을 하기 위해서는 오픈파이어 관리자 콘솔에서 건마다 설정을 해주어야 하는 불편함이 있습니다.

방법1
AD의 그룹을 만들고 LDAP로 연동을 하고 오픈파이어에서 Group에서 Group안에서 연동을 처리한다.

방법2
AD의 그룹에 추가하고 오픈파이어에서 그룹을 만들어 기본설정으로 Share group with additional users 로하여 무조건 그룹에 추가되게 설정한다.(기본설정으로 한다) 그리고 설정에서 딱한번 그룹을 onlyGroup로 설정을 지정해주면 된다.
또 그룹간에 채팅이 안되게 하려면 필터로 막으면 된다.

그룹을 필터로 구분할 수 있는 방법
http://serverfault.com/questions/191365/openfire-hide-all-users-in-the-same-group-from-each-other
http://community.igniterealtime.org/thread/34232
 

방법3 
INSERT INTO OFGROUPPROP VALUES('Group3','sharedRoster.displayName','SharedAsGroup3')
INSERT INTO OFGROUPPROP VALUES('Group3','sharedRoster.groupList','')
INSERT INTO OFGROUPPROP VALUES('Group3','sharedRoster.showInRoster','onlyGroup')
직접 디비에 insert하는 api을 만들고 6시간이 지나면 자동으로 캐시가 지워지므로 연동이 되는 로직으로 처리한다. 


 
 관련된 프로그인 제작을 할 수도 있습니다.

 

플로그인
http://www.massapi.com/

관련 링크
http://community.igniterealtime.org/thread/28473
http://xmpp.org/extensions/xep-0140.html#create