Changeset 28210

Show
Ignore:
Timestamp:
04.09.2013 15:19:34 (6 years ago)
Author:
sjm84
Message:

Some fixes for when using the derby database as well as some improvements

Location:
main/trunk/greenstone3/src/java/org/greenstone/gsdl3
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/Authentication.java

    r28202 r28210  
    128128    protected static final String GET_USER_INFORMATION_SERVICE = "GetUserInformation"; 
    129129 
    130     protected static DerbyWrapper _derbyWrapper = null; 
    131130    protected static boolean _derbyWrapperDoneForcedShutdown = false; 
    132131 
     
    157156 
    158157            DerbyWrapper.shutdownDatabaseServer(); 
    159             _derbyWrapper = null; 
    160158            _derbyWrapperDoneForcedShutdown = true; 
    161159        } 
     
    271269        } 
    272270 
    273         openDatabase(); 
     271        DerbyWrapper derbyWrapper = openDatabase(); 
    274272 
    275273        try 
    276274        { 
    277             UserQueryResult userQueryResult = _derbyWrapper.findUser(username); 
     275            UserQueryResult userQueryResult = derbyWrapper.findUser(username); 
    278276 
    279277            Vector<UserTermInfo> terms = userQueryResult.getUserTerms(); 
     
    282280            { 
    283281                GSXML.addError(this.doc, result, _errorMessageMap.get(ERROR_REQUESTED_USER_NOT_FOUND)); 
    284                 closeDatabase(); 
    285282                return result; 
    286283            } 
     
    308305        } 
    309306 
    310         closeDatabase(); 
     307        derbyWrapper.closeDatabase(); 
    311308 
    312309        return result; 
     
    664661            } 
    665662 
     663            DerbyWrapper derbyWrapper = openDatabase(); 
    666664            String chpa_groups = retrieveDataForUser(user_name, "groups"); 
    667665            String chpa_comment = "password_changed_by_user"; 
    668             String info = this._derbyWrapper.modifyUserInfo(user_name, hashPassword(newPassword), chpa_groups, null, chpa_comment, null); 
     666            String info = derbyWrapper.modifyUserInfo(user_name, hashPassword(newPassword), chpa_groups, null, chpa_comment, null); 
     667            derbyWrapper.closeDatabase(); 
    669668            if (info != "succeed") 
    670669            {//see DerbyWrapper.modifyUserInfo 
     
    820819    private void checkAdminUserExists() 
    821820    { 
    822         openDatabase(); 
    823  
    824         UserQueryResult userQueryResult = _derbyWrapper.findUser(null, null); 
     821        DerbyWrapper derbyWrapper = openDatabase(); 
     822        UserQueryResult userQueryResult = derbyWrapper.findUser(null, null); 
     823        derbyWrapper.closeDatabase(); 
    825824 
    826825        if (userQueryResult != null) 
     
    842841            } 
    843842        } 
    844  
    845         closeDatabase(); 
    846     } 
    847  
    848     private boolean openDatabase() 
    849     { 
    850         if (_derbyWrapper == null) 
    851         { 
    852             // check the usersDb database, if it isn't existing, check the etc dir, create the etc dir if it isn't existing, then create the  user database and add a "admin" user 
    853             String usersDB_dir = GlobalProperties.getGSDL3Home() + File.separatorChar + "etc" + File.separatorChar + "usersDB"; 
    854  
    855             _derbyWrapper = new DerbyWrapper(usersDB_dir); 
    856  
    857             File usersDB_file = new File(usersDB_dir); 
    858             if (!usersDB_file.exists()) 
    859             { 
    860                 String etc_dir = GlobalProperties.getGSDL3Home() + File.separatorChar + "etc"; 
    861                 File etc_file = new File(etc_dir); 
    862                 if (!etc_file.exists()) 
    863                 { 
    864                     boolean success = etc_file.mkdir(); 
    865                     if (!success) 
    866                     { 
    867                         logger.error("Couldn't create the etc dir under " + GlobalProperties.getGSDL3Home() + "."); 
    868                         return false; 
    869                     } 
    870                 } 
    871                 _derbyWrapper.createDatabase(); 
    872             } 
    873         } 
    874  
    875         return true; 
    876     } 
    877  
    878     private void closeDatabase() 
    879     { 
    880         if (_derbyWrapper != null) 
    881         { 
    882             _derbyWrapper.closeDatabase(); 
    883             _derbyWrapper = null; 
    884         } 
     843    } 
     844 
     845    private DerbyWrapper openDatabase() 
     846    { 
     847        // check the usersDb database, if it isn't existing, check the etc dir, create the etc dir if it isn't existing, then create the  user database and add a "admin" user 
     848        String usersDB_dir = GlobalProperties.getGSDL3Home() + File.separatorChar + "etc" + File.separatorChar + "usersDB"; 
     849 
     850        DerbyWrapper derbyWrapper = new DerbyWrapper(usersDB_dir); 
     851 
     852        File usersDB_file = new File(usersDB_dir); 
     853        if (!usersDB_file.exists()) 
     854        { 
     855            String etc_dir = GlobalProperties.getGSDL3Home() + File.separatorChar + "etc"; 
     856            File etc_file = new File(etc_dir); 
     857            if (!etc_file.exists()) 
     858            { 
     859                boolean success = etc_file.mkdir(); 
     860                if (!success) 
     861                { 
     862                    logger.error("Couldn't create the etc dir under " + GlobalProperties.getGSDL3Home() + "."); 
     863                    return null; 
     864                } 
     865            } 
     866            derbyWrapper.createDatabase(); 
     867        } 
     868 
     869        return derbyWrapper; 
    885870    } 
    886871 
    887872    private int addUserInformationToNode(String username, Element serviceNode) 
    888873    { 
    889         openDatabase(); 
    890  
    891         UserQueryResult userQueryResult = _derbyWrapper.findUser(username, null); 
     874        DerbyWrapper derbyWrapper = openDatabase(); 
     875        UserQueryResult userQueryResult = derbyWrapper.findUser(username, null); 
     876        derbyWrapper.closeDatabase(); 
    892877 
    893878        if (userQueryResult != null) 
     
    895880            Element user_node = getUserNode(userQueryResult); 
    896881            serviceNode.appendChild(user_node); 
    897             closeDatabase(); 
    898882            return NO_ERROR; 
    899883        } 
    900884 
    901         closeDatabase(); 
    902885        return ERROR_COULD_NOT_GET_USER_INFO; 
    903886    } 
     
    910893        } 
    911894 
    912         openDatabase(); 
    913  
    914         boolean success = _derbyWrapper.deleteUser(username); 
     895        DerbyWrapper derbyWrapper = openDatabase(); 
     896        boolean success = derbyWrapper.deleteUser(username); 
     897        derbyWrapper.closeDatabase(); 
    915898 
    916899        if (success) 
    917900        { 
    918             closeDatabase(); 
    919901            return NO_ERROR; 
    920902        } 
    921903 
    922         closeDatabase(); 
    923904        return ERROR_REMOVING_USER; 
    924905    } 
     
    926907    private int addUser(String newUsername, String newPassword, String newGroups, String newStatus, String newComment, String newEmail) 
    927908    { 
    928         openDatabase(); 
    929  
    930909        newGroups = newGroups.replaceAll(" ", ""); 
    931910 
    932911        //Check if the user already exists 
    933         UserQueryResult userQueryResult = _derbyWrapper.findUser(newUsername, null); 
     912        DerbyWrapper derbyWrapper = openDatabase(); 
     913        UserQueryResult userQueryResult = derbyWrapper.findUser(newUsername, null); 
    934914 
    935915        if (userQueryResult != null) 
    936916        { 
    937             closeDatabase(); 
     917            derbyWrapper.closeDatabase(); 
    938918            return ERROR_USER_ALREADY_EXISTS; 
    939919        } 
     
    941921        { 
    942922            System.err.println("ADDING " + newUsername + " " + newPassword); 
    943             boolean success = _derbyWrapper.addUser(newUsername, newPassword, newGroups, newStatus, newComment, newEmail); 
     923            boolean success = derbyWrapper.addUser(newUsername, newPassword, newGroups, newStatus, newComment, newEmail); 
     924            derbyWrapper.closeDatabase(); 
     925 
    944926            if (!success) 
    945927            { 
    946                 closeDatabase(); 
    947928                return ERROR_ADDING_USER; 
    948929            } 
    949930        } 
    950931 
    951         closeDatabase(); 
    952932        return NO_ERROR; 
    953933    } 
     
    957937        boolean check_status = false; 
    958938 
    959         openDatabase(); 
    960  
     939        DerbyWrapper derbyWrapper = openDatabase(); 
    961940        try 
    962941        { 
    963             UserQueryResult result = _derbyWrapper.findUser(username); 
     942            UserQueryResult result = derbyWrapper.findUser(username); 
    964943 
    965944            if (result != null) 
     
    974953            ex.printStackTrace(); 
    975954        } 
    976  
    977         closeDatabase(); 
     955        derbyWrapper.closeDatabase(); 
     956 
    978957        return check_status; 
    979958    } 
     
    987966        try 
    988967        { 
    989             UserQueryResult result = _derbyWrapper.findUser(username); 
     968            DerbyWrapper derbyWrapper = openDatabase(); 
     969            UserQueryResult result = derbyWrapper.findUser(username); 
     970            derbyWrapper.closeDatabase(); 
    990971            Vector userInfo = result.users; 
    991972 
     
    10241005        } 
    10251006 
    1026         closeDatabase(); 
    10271007        return data; 
    10281008    } 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/UserTracker.java

    r28202 r28210  
    9090    protected synchronized Element processGetActivityOnPage(Element request) 
    9191    { 
    92         System.err.println("CALLED"); 
    9392        Element result = GSXML.createBasicResponse(this.doc, GET_ACTIVITY_ON_PAGE); 
    9493        try 
     
    9897            if (paramList == null) 
    9998            { 
    100                 System.err.println("WHA?"); 
    10199                GSXML.addError(this.doc, result, "Request has no parameter list"); 
    102100                return result; 
     
    110108            DerbyWrapper database = new DerbyWrapper(GlobalProperties.getGSDL3Home() + File.separatorChar + "etc" + File.separatorChar + "usersDB"); 
    111109            ArrayList<HashMap<String, String>> userActions = database.getMostRecentUserActions(site, collection, oid); 
    112  
    113             System.err.println(userActions.size()); 
    114110 
    115111            Element userList = this.doc.createElement("userList"); 
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/util/DerbyWrapper.java

    r28201 r28210  
    197197        try 
    198198        { 
    199             String query = "SELECT username, action FROM usertracker WHERE site = '" + site + "' and collection = '" + collection + "' and oid = '" + oid + "' ORDER BY time"; 
     199            String query = "SELECT username, action, time FROM usertracker WHERE site = '" + site + "' and collection = '" + collection + "' and oid = '" + oid + "' ORDER BY time"; 
    200200            Statement state = conn.createStatement(); 
    201201            ResultSet rs = state.executeQuery(query); 
     
    203203 
    204204            HashSet<String> usernamesSeen = new HashSet<String>(); 
    205  
    206205            while (rs.next()) 
    207206            { 
     207                String timeStr = rs.getString("time"); 
     208                long time = Long.parseLong(timeStr); 
     209 
     210                if (System.currentTimeMillis() - time > 6000) 
     211                { 
     212                    continue; 
     213                } 
     214 
    208215                HashMap<String, String> action = new HashMap<String, String>(); 
    209216                if (!usernamesSeen.contains(rs.getString("username"))) 
     
    217224            } 
    218225            state.close(); 
     226 
     227            clearOldUserActions(); 
    219228        } 
    220229        catch (Exception ex) 
     
    223232        } 
    224233        return actions; 
     234    } 
     235 
     236    public void clearOldUserActions() 
     237    { 
     238        try 
     239        { 
     240            Statement state = conn.createStatement(); 
     241            state.execute("DELETE FROM usertracker WHERE (CAST (time AS BIGINT)) < " + (System.currentTimeMillis() - 20000)); 
     242            conn.commit(); 
     243            state.close(); 
     244        } 
     245        catch (Exception ex) 
     246        { 
     247            ex.printStackTrace(); 
     248        } 
    225249    } 
    226250 
     
    572596        Statement state = conn.createStatement(); 
    573597        ResultSet rs = state.executeQuery(sql_find_user); 
     598        conn.commit(); 
    574599        while (rs.next()) 
    575600        { 
     
    583608            users.add(user); 
    584609        } 
    585         conn.commit(); 
    586  
     610        state.close(); 
     611 
     612        state = conn.createStatement(); 
    587613        for (HashMap<String, String> user : users) 
    588614        { 
    589615            ResultSet gs = state.executeQuery("SELECT role FROM " + ROLES + " WHERE username = '" + user.get("username") + "'"); 
     616            conn.commit(); 
    590617 
    591618            String group = "";