Skip to content
Snippets Groups Projects
Commit 3312be31 authored by srosse's avatar srosse
Browse files

OO-247: make the IM client robust against executor overflow, the changes...

OO-247: make the IM client robust against executor overflow, the changes prevent red screen just after login
parent e46d5ef3
No related branches found
No related tags found
No related merge requests found
...@@ -29,6 +29,7 @@ package org.olat.instantMessaging; ...@@ -29,6 +29,7 @@ package org.olat.instantMessaging;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.concurrent.RejectedExecutionException;
import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster; import org.jivesoftware.smack.Roster;
...@@ -38,7 +39,6 @@ import org.jivesoftware.smack.XMPPConnection; ...@@ -38,7 +39,6 @@ import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.filter.PacketFilter; import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter; import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.packet.RosterPacket; import org.jivesoftware.smack.packet.RosterPacket;
import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.BaseSecurityManager;
...@@ -124,14 +124,15 @@ public class InstantMessagingClient extends LogDelegator { ...@@ -124,14 +124,15 @@ public class InstantMessagingClient extends LogDelegator {
connection = new XMPPConnection(InstantMessagingModule.getConnectionConfiguration()); connection = new XMPPConnection(InstantMessagingModule.getConnectionConfiguration());
// connecting to server is done by thread pool // connecting to server is done by thread pool
try {
logDebug("Connecting to server by thread pool with user: "+username);
TaskExecutorManager.getInstance().runTask(new ConnectToServerTask(this));
logDebug("Connecting to server by thread pool with user: "+username); connectionTimestamp = System.currentTimeMillis();
} catch (IllegalStateException e) {
TaskExecutorManager.getInstance().runTask(new ConnectToServerTask(this)); logWarn("Cannot connect to the IM server", e);
connectionTimestamp = System.currentTimeMillis(); } catch (RejectedExecutionException e) {
logWarn("Cannot connect to the IM server", e);
}
} }
/** /**
...@@ -407,8 +408,8 @@ public class InstantMessagingClient extends LogDelegator { ...@@ -407,8 +408,8 @@ public class InstantMessagingClient extends LogDelegator {
public String buddyCountOnline() { public String buddyCountOnline() {
int onlineBuddyEntries = connection.getRoster().getEntryCount(); int onlineBuddyEntries = connection.getRoster().getEntryCount();
int allBuddies = onlineBuddyEntries; int allBuddies = onlineBuddyEntries;
for (Iterator l = connection.getRoster().getEntries().iterator(); l.hasNext();) { for (Iterator<RosterEntry> l = connection.getRoster().getEntries().iterator(); l.hasNext();) {
RosterEntry entry = (RosterEntry) l.next(); RosterEntry entry = l.next();
Presence presence = connection.getRoster().getPresence(entry.getUser()); Presence presence = connection.getRoster().getPresence(entry.getUser());
if (presence.getType() == Presence.Type.unavailable) onlineBuddyEntries--; if (presence.getType() == Presence.Type.unavailable) onlineBuddyEntries--;
} }
...@@ -433,8 +434,8 @@ public class InstantMessagingClient extends LogDelegator { ...@@ -433,8 +434,8 @@ public class InstantMessagingClient extends LogDelegator {
RosterGroup rosterGroup = connection.getRoster().getGroup(groupname); RosterGroup rosterGroup = connection.getRoster().getGroup(groupname);
int buddyEntries = rosterGroup.getEntryCount(); int buddyEntries = rosterGroup.getEntryCount();
int allBuddies = buddyEntries; int allBuddies = buddyEntries;
for (Iterator I = rosterGroup.getEntries().iterator(); I.hasNext();) { for (Iterator<RosterEntry> I = rosterGroup.getEntries().iterator(); I.hasNext();) {
RosterEntry entry = (RosterEntry) I.next(); RosterEntry entry = I.next();
Presence presence = connection.getRoster().getPresence(entry.getUser()); Presence presence = connection.getRoster().getPresence(entry.getUser());
if (presence.getType() == Presence.Type.unavailable) buddyEntries--; if (presence.getType() == Presence.Type.unavailable) buddyEntries--;
} }
......
...@@ -30,6 +30,7 @@ import java.util.Collections; ...@@ -30,6 +30,7 @@ import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.concurrent.RejectedExecutionException;
import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.XMPPConnection;
...@@ -268,7 +269,9 @@ public class InstantMessagingGroupChatController extends BasicController impleme ...@@ -268,7 +269,9 @@ public class InstantMessagingGroupChatController extends BasicController impleme
TaskExecutorManager.getInstance().runTask(roomJoinTask); TaskExecutorManager.getInstance().runTask(roomJoinTask);
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
logWarn("Error while trying to create group chat room for user"+getIdentity().getName()+" and course resource: +ores", e); logWarn("Error while trying to create group chat room for user"+getIdentity().getName()+" and course resource: +ores", e);
} } catch (RejectedExecutionException e) {
logWarn("Error while trying to create group chat room for user"+getIdentity().getName()+" and course resource: +ores", e);
}
} else { } else {
return false; return false;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment