details: /erp/devel/pi/rev/7d345428351b
changeset: 6453:7d345428351b
user: Asier Lostalé <asier.lostale <at> openbravo.com>
date: Thu Feb 18 10:59:35 2010 +0100
summary: fixed bug 12330: Exception in logs when maximum concurrent users
reached
details: /erp/devel/pi/rev/0e103bbcd82f
changeset: 6454:0e103bbcd82f
user: Asier Lostalé <asier.lostale <at> openbravo.com>
date: Thu Feb 18 11:12:09 2010 +0100
summary: fixed issue 11039: Active Session Detection
diffstat:
src-db/database/model/tables/AD_SESSION.xml | 4 +
src-db/database/sourcedata/AD_COLUMN.xml | 31 +++++++
src-db/database/sourcedata/AD_ELEMENT.xml | 13 +++
src-db/database/sourcedata/AD_FIELD.xml | 34 +++++++-
src/org/openbravo/base/secureApp/LoginHandler.java | 10 +-
src/org/openbravo/erpCommon/obps/ActivationKey.java | 75 ++++++++++++++++--
src/org/openbravo/erpCommon/utility/VerticalMenu.java | 28 ++++++-
7 files changed, 172 insertions(+), 23 deletions(-)
diffs (truncated from 392 to 300 lines):
diff -r c4f60fa9011b -r 0e103bbcd82f src-db/database/model/tables/AD_SESSION.xml
--- a/src-db/database/model/tables/AD_SESSION.xml Thu Feb 18 14:55:14
2010 +0530
+++ b/src-db/database/model/tables/AD_SESSION.xml Thu Feb 18 11:12:09
2010 +0100
@@ -57,6 +57,10 @@
<default/>
<onCreateDefault/>
</column>
+ <column name="LAST_SESSION_PING" primaryKey="false" required="false"
type="TIMESTAMP" size="7" autoIncrement="false">
+ <default/>
+ <onCreateDefault/>
+ </column>
<foreign-key foreignTable="AD_CLIENT" name="AD_SESSION_AD_CLIENT">
<reference local="AD_CLIENT_ID" foreign="AD_CLIENT_ID"/>
</foreign-key>
diff -r c4f60fa9011b -r 0e103bbcd82f src-db/database/sourcedata/AD_COLUMN.xml
--- a/src-db/database/sourcedata/AD_COLUMN.xml Thu Feb 18 14:55:14 2010 +0530
+++ b/src-db/database/sourcedata/AD_COLUMN.xml Thu Feb 18 11:12:09 2010 +0100
@@ -274856,6 +274856,37 @@
<!--7FCA79F6A6804336A083FEE0C8964D6E-->
<ISTRANSIENT><![CDATA[N]]></ISTRANSIENT>
<!--7FCA79F6A6804336A083FEE0C8964D6E--></AD_COLUMN>
+<!--7FDC7A18D86783EAE040007F01012E08--><AD_COLUMN>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<AD_COLUMN_ID><![CDATA[7FDC7A18D86783EAE040007F01012E08]]></AD_COLUMN_ID>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--7FDC7A18D86783EAE040007F01012E08--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--7FDC7A18D86783EAE040007F01012E08--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--7FDC7A18D86783EAE040007F01012E08--> <NAME><![CDATA[Last Ping]]></NAME>
+<!--7FDC7A18D86783EAE040007F01012E08--> <DESCRIPTION><![CDATA[Time for the
last time the session sent ping]]></DESCRIPTION>
+<!--7FDC7A18D86783EAE040007F01012E08--> <HELP><![CDATA[Stores the last time
the session made ping through the UI. In this way it is possible to determine
whether the browser was closed without doing log out.]]></HELP>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<COLUMNNAME><![CDATA[Last_Session_Ping]]></COLUMNNAME>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<AD_TABLE_ID><![CDATA[566]]></AD_TABLE_ID>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<AD_REFERENCE_ID><![CDATA[16]]></AD_REFERENCE_ID>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<FIELDLENGTH><![CDATA[19]]></FIELDLENGTH>
+<!--7FDC7A18D86783EAE040007F01012E08--> <ISKEY><![CDATA[N]]></ISKEY>
+<!--7FDC7A18D86783EAE040007F01012E08--> <ISPARENT><![CDATA[N]]></ISPARENT>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISMANDATORY><![CDATA[N]]></ISMANDATORY>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISUPDATEABLE><![CDATA[N]]></ISUPDATEABLE>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISIDENTIFIER><![CDATA[N]]></ISIDENTIFIER>
+<!--7FDC7A18D86783EAE040007F01012E08--> <SEQNO><![CDATA[31]]></SEQNO>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISTRANSLATED><![CDATA[N]]></ISTRANSLATED>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISSELECTIONCOLUMN><![CDATA[N]]></ISSELECTIONCOLUMN>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<AD_ELEMENT_ID><![CDATA[7FDC7A18D86883EAE040007F01012E08]]></AD_ELEMENT_ID>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISSESSIONATTR><![CDATA[N]]></ISSESSIONATTR>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISSECONDARYKEY><![CDATA[N]]></ISSECONDARYKEY>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISDESENCRYPTABLE><![CDATA[N]]></ISDESENCRYPTABLE>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<DEVELOPMENTSTATUS><![CDATA[RE]]></DEVELOPMENTSTATUS>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--7FDC7A18D86783EAE040007F01012E08--> <POSITION><![CDATA[15]]></POSITION>
+<!--7FDC7A18D86783EAE040007F01012E08-->
<ISTRANSIENT><![CDATA[N]]></ISTRANSIENT>
+<!--7FDC7A18D86783EAE040007F01012E08--></AD_COLUMN>
+
<!--80F1BCD61F0F11DE8BE5DF56446CB1D8--><AD_COLUMN>
<!--80F1BCD61F0F11DE8BE5DF56446CB1D8-->
<AD_COLUMN_ID><![CDATA[80F1BCD61F0F11DE8BE5DF56446CB1D8]]></AD_COLUMN_ID>
<!--80F1BCD61F0F11DE8BE5DF56446CB1D8-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r c4f60fa9011b -r 0e103bbcd82f src-db/database/sourcedata/AD_ELEMENT.xml
--- a/src-db/database/sourcedata/AD_ELEMENT.xml Thu Feb 18 14:55:14 2010 +0530
+++ b/src-db/database/sourcedata/AD_ELEMENT.xml Thu Feb 18 11:12:09 2010 +0100
@@ -25505,6 +25505,19 @@
<!--7EC3B5CF03729057E040007F010110BF-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
<!--7EC3B5CF03729057E040007F010110BF--></AD_ELEMENT>
+<!--7FDC7A18D86883EAE040007F01012E08--><AD_ELEMENT>
+<!--7FDC7A18D86883EAE040007F01012E08-->
<AD_ELEMENT_ID><![CDATA[7FDC7A18D86883EAE040007F01012E08]]></AD_ELEMENT_ID>
+<!--7FDC7A18D86883EAE040007F01012E08-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--7FDC7A18D86883EAE040007F01012E08--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--7FDC7A18D86883EAE040007F01012E08--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--7FDC7A18D86883EAE040007F01012E08-->
<COLUMNNAME><![CDATA[Last_Session_Ping]]></COLUMNNAME>
+<!--7FDC7A18D86883EAE040007F01012E08--> <NAME><![CDATA[Last Ping]]></NAME>
+<!--7FDC7A18D86883EAE040007F01012E08--> <PRINTNAME><![CDATA[Last
Ping]]></PRINTNAME>
+<!--7FDC7A18D86883EAE040007F01012E08--> <DESCRIPTION><![CDATA[Time for the
last time the session sent ping]]></DESCRIPTION>
+<!--7FDC7A18D86883EAE040007F01012E08--> <HELP><![CDATA[Stores the last time
the session made ping through the UI. In this way it is possible to determine
whether the browser was closed without doing log out.]]></HELP>
+<!--7FDC7A18D86883EAE040007F01012E08-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--7FDC7A18D86883EAE040007F01012E08--></AD_ELEMENT>
+
<!--80044AA0505611DEBC12001CC0B8EF99--><AD_ELEMENT>
<!--80044AA0505611DEBC12001CC0B8EF99-->
<AD_ELEMENT_ID><![CDATA[80044AA0505611DEBC12001CC0B8EF99]]></AD_ELEMENT_ID>
<!--80044AA0505611DEBC12001CC0B8EF99-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r c4f60fa9011b -r 0e103bbcd82f src-db/database/sourcedata/AD_FIELD.xml
--- a/src-db/database/sourcedata/AD_FIELD.xml Thu Feb 18 14:55:14 2010 +0530
+++ b/src-db/database/sourcedata/AD_FIELD.xml Thu Feb 18 11:12:09 2010 +0100
@@ -82221,7 +82221,7 @@
<!--6616--> <ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
<!--6616--> <DISPLAYLENGTH><![CDATA[20]]></DISPLAYLENGTH>
<!--6616--> <ISREADONLY><![CDATA[Y]]></ISREADONLY>
-<!--6616--> <SEQNO><![CDATA[10]]></SEQNO>
+<!--6616--> <SEQNO><![CDATA[20]]></SEQNO>
<!--6616--> <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
<!--6616--> <ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
<!--6616--> <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
@@ -82244,7 +82244,7 @@
<!--6617--> <ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
<!--6617--> <DISPLAYLENGTH><![CDATA[20]]></DISPLAYLENGTH>
<!--6617--> <ISREADONLY><![CDATA[Y]]></ISREADONLY>
-<!--6617--> <SEQNO><![CDATA[20]]></SEQNO>
+<!--6617--> <SEQNO><![CDATA[30]]></SEQNO>
<!--6617--> <ISSAMELINE><![CDATA[Y]]></ISSAMELINE>
<!--6617--> <ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
<!--6617--> <ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
@@ -85968,7 +85968,7 @@
<!--6837--> <ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
<!--6837--> <DISPLAYLENGTH><![CDATA[10]]></DISPLAYLENGTH>
<!--6837--> <ISREADONLY><![CDATA[Y]]></ISREADONLY>
-<!--6837--> <SEQNO><![CDATA[40]]></SEQNO>
+<!--6837--> <SEQNO><![CDATA[50]]></SEQNO>
<!--6837--> <SORTNO><![CDATA[1]]></SORTNO>
<!--6837--> <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
<!--6837--> <ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
@@ -192851,7 +192851,7 @@
<!--766E946AA3718787E040007F010131F4-->
<ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
<!--766E946AA3718787E040007F010131F4-->
<DISPLAYLENGTH><![CDATA[255]]></DISPLAYLENGTH>
<!--766E946AA3718787E040007F010131F4--> <ISREADONLY><![CDATA[Y]]></ISREADONLY>
-<!--766E946AA3718787E040007F010131F4--> <SEQNO><![CDATA[30]]></SEQNO>
+<!--766E946AA3718787E040007F010131F4--> <SEQNO><![CDATA[40]]></SEQNO>
<!--766E946AA3718787E040007F010131F4--> <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
<!--766E946AA3718787E040007F010131F4-->
<ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
<!--766E946AA3718787E040007F010131F4-->
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
@@ -192874,7 +192874,7 @@
<!--766E946AA3738787E040007F010131F4-->
<ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
<!--766E946AA3738787E040007F010131F4-->
<DISPLAYLENGTH><![CDATA[1]]></DISPLAYLENGTH>
<!--766E946AA3738787E040007F010131F4--> <ISREADONLY><![CDATA[N]]></ISREADONLY>
-<!--766E946AA3738787E040007F010131F4--> <SEQNO><![CDATA[50]]></SEQNO>
+<!--766E946AA3738787E040007F010131F4--> <SEQNO><![CDATA[70]]></SEQNO>
<!--766E946AA3738787E040007F010131F4--> <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
<!--766E946AA3738787E040007F010131F4-->
<ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
<!--766E946AA3738787E040007F010131F4-->
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
@@ -192897,7 +192897,7 @@
<!--7693B3D758076F59E040007F01012A25-->
<ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
<!--7693B3D758076F59E040007F01012A25-->
<DISPLAYLENGTH><![CDATA[32]]></DISPLAYLENGTH>
<!--7693B3D758076F59E040007F01012A25--> <ISREADONLY><![CDATA[Y]]></ISREADONLY>
-<!--7693B3D758076F59E040007F01012A25--> <SEQNO><![CDATA[0]]></SEQNO>
+<!--7693B3D758076F59E040007F01012A25--> <SEQNO><![CDATA[10]]></SEQNO>
<!--7693B3D758076F59E040007F01012A25--> <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
<!--7693B3D758076F59E040007F01012A25-->
<ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
<!--7693B3D758076F59E040007F01012A25-->
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
@@ -194379,6 +194379,28 @@
<!--7EC3B5CF03739057E040007F010110BF-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
<!--7EC3B5CF03739057E040007F010110BF--></AD_FIELD>
+<!--7FDC7A18D86B83EAE040007F01012E08--><AD_FIELD>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<AD_FIELD_ID><![CDATA[7FDC7A18D86B83EAE040007F01012E08]]></AD_FIELD_ID>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--7FDC7A18D86B83EAE040007F01012E08--> <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--7FDC7A18D86B83EAE040007F01012E08--> <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--7FDC7A18D86B83EAE040007F01012E08--> <NAME><![CDATA[Last Ping]]></NAME>
+<!--7FDC7A18D86B83EAE040007F01012E08--> <DESCRIPTION><![CDATA[Time for the
last time the session sent ping]]></DESCRIPTION>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<ISCENTRALLYMAINTAINED><![CDATA[Y]]></ISCENTRALLYMAINTAINED>
+<!--7FDC7A18D86B83EAE040007F01012E08--> <AD_TAB_ID><![CDATA[475]]></AD_TAB_ID>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<AD_COLUMN_ID><![CDATA[7FDC7A18D86783EAE040007F01012E08]]></AD_COLUMN_ID>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<ISDISPLAYED><![CDATA[Y]]></ISDISPLAYED>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<DISPLAYLENGTH><![CDATA[19]]></DISPLAYLENGTH>
+<!--7FDC7A18D86B83EAE040007F01012E08--> <ISREADONLY><![CDATA[Y]]></ISREADONLY>
+<!--7FDC7A18D86B83EAE040007F01012E08--> <SEQNO><![CDATA[60]]></SEQNO>
+<!--7FDC7A18D86B83EAE040007F01012E08--> <ISSAMELINE><![CDATA[N]]></ISSAMELINE>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<ISFIELDONLY><![CDATA[N]]></ISFIELDONLY>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<ISENCRYPTED><![CDATA[N]]></ISENCRYPTED>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<SHOWINRELATION><![CDATA[Y]]></SHOWINRELATION>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<ISFIRSTFOCUSEDFIELD><![CDATA[N]]></ISFIRSTFOCUSEDFIELD>
+<!--7FDC7A18D86B83EAE040007F01012E08-->
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--7FDC7A18D86B83EAE040007F01012E08--></AD_FIELD>
+
<!--80C65FD7819B43638FB4A0413A91A65D--><AD_FIELD>
<!--80C65FD7819B43638FB4A0413A91A65D-->
<AD_FIELD_ID><![CDATA[80C65FD7819B43638FB4A0413A91A65D]]></AD_FIELD_ID>
<!--80C65FD7819B43638FB4A0413A91A65D-->
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r c4f60fa9011b -r 0e103bbcd82f
src/org/openbravo/base/secureApp/LoginHandler.java
--- a/src/org/openbravo/base/secureApp/LoginHandler.java Thu Feb 18
14:55:14 2010 +0530
+++ b/src/org/openbravo/base/secureApp/LoginHandler.java Thu Feb 18
11:12:09 2010 +0100
@@ -1,6 +1,6 @@
/*
************************************************************************************
- * Copyright (C) 2001-2009 Openbravo S.L.
+ * Copyright (C) 2001-2010 Openbravo S.L.
* Licensed under the Apache Software License version 2.0
* You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
distributed
@@ -105,19 +105,19 @@
String title = Utility.messageBD(myPool,
"NUMBER_OF_CONCURRENT_USERS_REACHED_TITLE", vars
.getLanguage());
goToRetry(res, vars, msg, title, msgType, action);
- break;
+ return;
case NUMBER_OF_SOFT_USERS_REACHED:
msg = Utility.messageBD(myPool, "NUMBER_OF_SOFT_USERS_REACHED",
vars.getLanguage());
title = Utility.messageBD(myPool,
"NUMBER_OF_SOFT_USERS_REACHED_TITLE", vars.getLanguage());
action = "../security/Menu.html";
msgType = "Warning";
goToRetry(res, vars, msg, title, msgType, action);
- break;
+ return;
case OPS_INSTANCE_NOT_ACTIVE:
msg = Utility.messageBD(myPool, "OPS_INSTANCE_NOT_ACTIVE",
vars.getLanguage());
title = Utility.messageBD(myPool, "OPS_INSTANCE_NOT_ACTIVE_TITLE",
vars.getLanguage());
goToRetry(res, vars, msg, title, msgType, action);
- break;
+ return;
case MODULE_EXPIRED:
msg = Utility.messageBD(myPool, "OPS_MODULE_EXPIRED",
vars.getLanguage());
title = Utility.messageBD(myPool, "OPS_MODULE_EXPIRED_TITLE",
vars.getLanguage());
@@ -127,7 +127,7 @@
}
msg += expiredMoudules.toString();
goToRetry(res, vars, msg, title, msgType, action);
- break;
+ return;
}
SystemInformation sysInfo =
OBDal.getInstance().get(SystemInformation.class, "0");
diff -r c4f60fa9011b -r 0e103bbcd82f
src/org/openbravo/erpCommon/obps/ActivationKey.java
--- a/src/org/openbravo/erpCommon/obps/ActivationKey.java Thu Feb 18
14:55:14 2010 +0530
+++ b/src/org/openbravo/erpCommon/obps/ActivationKey.java Thu Feb 18
11:12:09 2010 +0100
@@ -30,6 +30,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Calendar;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
@@ -70,6 +71,8 @@
private boolean notActiveYet = false;
+ private static final Logger log4j = Logger.getLogger(ActivationKey.class);
+
public enum LicenseRestriction {
NO_RESTRICTION, OPS_INSTANCE_NOT_ACTIVE, NUMBER_OF_SOFT_USERS_REACHED,
NUMBER_OF_CONCURRENT_USERS_REACHED, MODULE_EXPIRED
}
@@ -79,6 +82,7 @@
}
private static final int MILLSECS_PER_DAY = 24 * 60 * 60 * 1000;
+ private static final int PING_TIMEOUT_SECS = 120;
public ActivationKey() {
org.openbravo.model.ad.system.System sys = OBDal.getInstance().get(
@@ -337,23 +341,32 @@
Long maxUsers = new Long(getProperty("limitusers"));
+ // maxUsers==0 is unlimited concurrent users
if (maxUsers != 0) {
boolean adminMode = OBContext.getOBContext().isInAdministratorMode();
OBContext.getOBContext().setInAdministratorMode(true);
-
- OBCriteria<Session> obCriteria =
OBDal.getInstance().createCriteria(Session.class);
- obCriteria.add(Expression.eq(Session.PROPERTY_SESSIONACTIVE, true));
- if (currentSession != null && !currentSession.equals("")) {
- obCriteria.add(Expression.ne(Session.PROPERTY_ID, currentSession));
+ int activeSessions = 0;
+ try {
+ activeSessions = getActiveSessions(currentSession);
+ log4j.info("Active sessions: " + activeSessions);
+ if (activeSessions >= maxUsers || (softUsers != null &&
activeSessions >= softUsers)) {
+ // Before raising concurrent users error, clean the session with
ping timeout and try it
+ // again
+ if (deactivateTimeOutSessions()) {
+ activeSessions = getActiveSessions(currentSession);
+ log4j.info("Active sessions after timeout cleanup: " +
activeSessions);
+ }
+ }
+ } catch (Exception e) {
+ log4j.error("Error checking sessions", e);
+ } finally {
+ OBContext.getOBContext().setInAdministratorMode(adminMode);
}
- int currentSessions = obCriteria.list().size();
- OBContext.getOBContext().setInAdministratorMode(adminMode);
-
- if (currentSessions >= maxUsers) {
+ if (activeSessions >= maxUsers) {
return LicenseRestriction.NUMBER_OF_CONCURRENT_USERS_REACHED;
}
- if (softUsers != null && currentSessions >= softUsers) {
+ if (softUsers != null && activeSessions >= softUsers) {
result = LicenseRestriction.NUMBER_OF_SOFT_USERS_REACHED;
}
}
@@ -366,6 +379,48 @@
return result;
}
+ /**
+ * Looks for all active sessions that haven't send a ping during last
PING_TIMEOUT_SECS seconds
+ * and deactivates them.
+ */
+ private boolean deactivateTimeOutSessions() {
+ // Last valid ping time is current time substract timeout seconds
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.SECOND, (-1) * PING_TIMEOUT_SECS);
+ Date lastValidPingTime = new Date(cal.getTimeInMillis());
+
+ OBCriteria<Session> obCriteria =
OBDal.getInstance().createCriteria(Session.class);
+ obCriteria.add(Expression.eq(Session.PROPERTY_SESSIONACTIVE, true));
+ obCriteria.add(Expression.isNotNull(Session.PROPERTY_LASTPING));
+ obCriteria.add(Expression.lt(Session.PROPERTY_LASTPING,
lastValidPingTime));
+ boolean sessionDeactivated = false;
+ for (Session expiredSession : obCriteria.list()) {
+ expiredSession.setSessionActive(false);
+ sessionDeactivated = true;
------------------------------------------------------------------------------
Download Intel® Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits