Ignore:
Timestamp:
30/09/10 15:26:41 (9 years ago)
Author:
mnagni
Message:

After retrieving too many records the search have to update some fields on the DB, these updates were making the Axis response too slow. Now the update is managed by a new thread.
Version 1.2.4

Location:
TI01-discovery-API/trunk/MEDINDiscoveryService
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • TI01-discovery-API/trunk/MEDINDiscoveryService/pom.xml

    r7551 r7558  
    44        <groupId>ndg.services.discovery</groupId> 
    55        <artifactId>MedinDiscoveryService</artifactId> 
    6         <version>1.2.3</version> 
     6        <version>1.2.4</version> 
    77        <packaging>aar</packaging> 
    88 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/common/TermParser.java

    r7334 r7558  
    150150                int grouperIndex = 0; 
    151151                int spaceIndex = 0; 
    152                 String item = null; 
    153152                         
    154153                while (true) { 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/services/discovery/DiscoveryServiceMEDINSkeleton.java

    r7261 r7558  
    1313import ndg.common.NdgLogger; 
    1414import ndg.common.NdgMessage; 
     15import ndg.common.exception.AssembleQueryException; 
    1516import ndg.common.exception.NdgException; 
    16 import ndg.common.exception.NdgSQLException; 
    1717import ndg.common.exception.ResourceNotAvailable; 
    1818import ndg.services.discovery.exception.DiscoveryWSException; 
     
    5353import org.apache.axis2.context.MessageContext; 
    5454import org.apache.log4j.Level; 
    55 import org.apache.xmlbeans.CDataBookmark; 
    56 import org.apache.xmlbeans.XmlCursor; 
    57 import org.apache.xmlbeans.XmlCursor.XmlBookmark; 
     55import org.apache.log4j.Logger; 
    5856 
    5957/** 
     
    6967                        DiscoveryServiceMEDINSkeleton.class.getName()); 
    7068 
     69        private Logger logger = Logger.getLogger(DiscoveryServiceMEDINSkeleton.class.getName()); 
     70         
    7171        /** 
    7272         * Performs the getListNames operation - returns list of valid strings to 
     
    140140                                        processResult(result, responseContent.addNewDocuments(), type, orderBy); 
    141141                                        status = true; 
     142                                } catch (AssembleQueryException e) { 
     143                                        statusMsg = logHelper.getBundleMessageAndDoLog(e, Level.ERROR); 
     144                                        if (logger.isErrorEnabled()) 
     145                                                logger.error("searchCriteria: \n" + doSearch.getDoSearch().getSearchCriteria()); 
    142146                                } catch (NdgException e) { 
    143147                                        statusMsg = logHelper.getBundleMessageAndDoLog(e, Level.ERROR); 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/services/discovery/model/CommonMethods.java

    r7261 r7558  
    1111import ndg.common.NdgMessage; 
    1212import ndg.common.exception.AssembleQueryException; 
    13 import ndg.common.exception.NdgException; 
    1413import ndg.common.exception.NdgSQLException; 
    1514import ndg.common.exception.ResourceNotAvailable; 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/services/discovery/model/PresentAgent.java

    r7261 r7558  
    278278                        start = rs.getTimestamp("start_time"); 
    279279                        if (start != null) { 
    280                                 calendar = calendar.getInstance(); 
     280                                calendar = Calendar.getInstance(); 
    281281                                calendar.setTimeInMillis(start.getTime()); 
    282282                        } else { 
     
    289289                        end = rs.getTimestamp("end_time"); 
    290290                        if (end != null) { 
    291                                 calendar = calendar.getInstance(); 
     291                                calendar = Calendar.getInstance(); 
    292292                                calendar.setTimeInMillis(end.getTime()); 
    293293                        } else { 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/java/ndg/services/discovery/model/SearchAgent.java

    r7261 r7558  
    1515import ndg.common.TermParser; 
    1616import ndg.common.exception.AssembleQueryException; 
    17 import ndg.common.exception.NdgException; 
    1817import ndg.common.exception.NdgSQLException; 
    1918import ndg.common.exception.ResourceNotAvailable; 
     
    3332 
    3433import org.apache.log4j.Level; 
     34import org.apache.log4j.Logger; 
    3535 
    3636/** 
     
    133133                PresentAgent present = new PresentAgent(); 
    134134                res = present.doPresent(conn, toFilter, searchType.getRetrieveCriteria()); 
    135                 updateCountVal(toFilter); 
     135                 
     136                //Create an independent thread to let Axis return the results faster 
     137                new Thread(new UpdateCountVal(toFilter)).start(); 
     138                 
    136139                return res; 
    137140        } 
     
    272275 
    273276                DiscoveryDictionary.SpatialOperator spatialOperator = DiscoveryDictionary.getSpatialOperator(null); 
    274                 DiscoveryDictionary.SpatialReferenceSystem spatialReferenceSystem = DiscoveryDictionary 
    275                                 .getSpatialReferenceSystem(null); 
     277                DiscoveryDictionary.SpatialReferenceSystem spatialReferenceSystem = DiscoveryDictionary.getSpatialReferenceSystem(null); 
    276278 
    277279                if (spatialType.getSpatialOperator() != null) 
     
    390392        } 
    391393 
    392         private void updateCountVal(List<String> documentIDs) throws NdgSQLException, ResourceNotAvailable { 
    393                 Connection conn = DiscoveryBasic.getInstance().getDiscoveryConnection(); 
    394                 boolean commit = false; 
    395                 try { 
    396                         conn.setAutoCommit(false); 
    397                         for (String docId : documentIDs) { 
    398                                 executeUpdateCountVal(conn, docId); 
    399                         } 
    400                         commit = true; 
    401                 } catch (SQLException e) { 
    402                         // NdgMessage msg = new NdgMessage("sql.resultset.parsing.error", 
    403                         // new Object[] { sqlQuery }); 
    404                         throw new NdgSQLException(e); 
    405                 } finally { 
    406                         commitOrRollback(conn, commit); 
    407                 } 
    408         } 
    409  
    410         private void executeUpdateCountVal(Connection conn, String docId) throws NdgSQLException { 
    411                 try { 
     394 
     395         
     396        private class UpdateCountVal implements Runnable{ 
     397                private Logger logger = Logger.getLogger(UpdateCountVal.class.getName()); 
     398                 
     399                private final List<String> documentIDs; 
     400 
     401                public void run() { 
     402                        try { 
     403                                updateCountVal(); 
     404                        } catch (NdgSQLException e) { 
     405                                if (logger.isInfoEnabled()) 
     406                                        logger.info(e.getMessage(), e); 
     407                        } catch (ResourceNotAvailable e) { 
     408                                if (logger.isInfoEnabled()) 
     409                                        logger.info(e.getMessage(), e); 
     410                        } 
     411                }        
     412                 
     413                public UpdateCountVal(List<String> documentIDs) { 
     414                        super(); 
     415                        this.documentIDs = documentIDs; 
     416                } 
     417 
     418                private void updateCountVal() throws NdgSQLException, ResourceNotAvailable { 
     419                        Connection conn = DiscoveryBasic.getInstance().getDiscoveryConnection(); 
     420                        boolean commit = false; 
     421                        try { 
     422                                conn.setAutoCommit(false); 
     423                                for (String docId : documentIDs) { 
     424                                        executeUpdateCountVal(conn, docId); 
     425                                } 
     426                                commit = true; 
     427                        } catch (SQLException e) { 
     428                                // NdgMessage msg = new NdgMessage("sql.resultset.parsing.error", 
     429                                // new Object[] { sqlQuery }); 
     430                                throw new NdgSQLException(e); 
     431                        } finally { 
     432                                commitOrRollback(conn, commit); 
     433                        } 
     434                } 
     435 
     436                private void executeUpdateCountVal(Connection conn, String docId) throws NdgSQLException { 
     437                        int monitorIndex = 0; 
     438                        while(true) { 
     439                                try { 
     440                                        doCountVal(conn, docId); 
     441                                        break; 
     442                                } catch (SQLException e) { 
     443                                        monitorIndex++; 
     444                                        if (monitorIndex > 15) 
     445                                                break; 
     446                                                //throw new NdgSQLException(e); 
     447                                }                        
     448                        } 
     449                } 
     450                 
     451                private void doCountVal(Connection conn, String docId) throws SQLException { 
    412452                        Statement statement = conn.createStatement(); 
    413453                        ResultSet rs = statement.executeQuery(getValue); 
     
    415455                                return; 
    416456                        Integer counter = rs.getInt("counter"); 
    417  
    418457                        PreparedStatement updateCounter = conn.prepareStatement(updateCounterSQL); 
    419458                        updateCounter.setInt(1, counter + 1); 
    420459                        updateCounter.setString(2, docId); 
    421                         updateCounter.execute(); 
    422                 } catch (SQLException e) { 
    423                         throw new NdgSQLException(e); 
    424                 } 
    425  
     460                        updateCounter.executeUpdate();           
     461                } 
    426462        } 
    427463} 
  • TI01-discovery-API/trunk/MEDINDiscoveryService/src/main/resources/ndg/common/messages.properties

    r7126 r7558  
    1515invalid.list.name = "Invalid list name: please use getListNames to get the valid list names"; 
    1616empty.searchcriteria = "SearchCriteria cannot be empty"; 
    17 term.target.syntax.error = "The Term {0} has wrong syntax"; 
     17term.target.syntax.error = "The Term ---> {0} <---- has wrong syntax"; 
Note: See TracChangeset for help on using the changeset viewer.