Changeset 2118


Ignore:
Timestamp:
Nov 18, 2009, 8:46:32 AM (16 years ago)
Author:
dwinter
Message:

Neue Version, die Zwischenergebnisse in temporäre Files schreibt, anstelle diese im Speicher zu halten.

Location:
trunk/src/de/mpiwg/itgroup/fulltext/ocropus
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/de/mpiwg/itgroup/fulltext/ocropus/OCRFulltextSearchXML.java

    r1884 r2118  
    55import java.io.FileInputStream;
    66import java.io.FileNotFoundException;
     7import java.io.FileReader;
    78import java.io.IOException;
    89import java.util.ArrayList;
     
    5758        private HashMap<String,OCRSearchThread> searchThreads = null;
    5859
    59         static private HashMap<String, SearchAndShowThread> generalThreads;
     60        static private HashMap<String, Object> generalThreads;
    6061
    6162        //static private HashMap<String,WrapperThread> wrapperThreads;
     
    172173                if (generalThreads==null)
    173174                {
    174                         generalThreads = new HashMap<String,SearchAndShowThread>();
    175                 }
     175                        generalThreads = new HashMap<String,Object>();
     176                }
     177               
     178                if (notEnoughMemory()){
     179                        generalThreads.put(ticket,null);
     180                        return ticket;
     181                }
     182               
    176183                ArrayList<String> ll = new ArrayList<String>();
    177184                System.out.println("languages:"+languages);
     
    213220                if (generalThreads==null)
    214221                {
    215                         generalThreads = new HashMap<String,SearchAndShowThread>();
     222                        generalThreads = new HashMap<String,Object>();
     223                }
     224               
     225                if (notEnoughMemory()){
     226                        generalThreads.put(ticket,null);
     227                        return ticket;
    216228                }
    217229               
     
    230242               
    231243               
    232                 System.err.println("THREAD:"+generalThreads);   
     244                System.err.println("THREADS:"+generalThreads.size());   
    233245                return ticket;
    234246               
    235247        }
    236248       
     249        //test ob noch genug heapSpace fuer neuen thread, annahme mindestens 20 000 000 Bytes.
     250       
     251        private boolean notEnoughMemory() {
     252                long fm = Runtime.getRuntime().freeMemory();
     253                if (fm < 20000000){
     254                        System.err.println("not enough memory:"+String.valueOf(fm));
     255                        return true;
     256                }
     257                       
     258               
     259                return false;
     260               
     261        }
     262
    237263        public String getSearchResult(String ticket){
    238264                System.out.println("myTicket:"+ticket);
    239265                System.out.println(this.generalThreads);
    240                 SearchAndShowThread st = generalThreads.get(ticket);
     266               
     267                Object stObj = generalThreads.get(ticket);
     268                SearchAndShowThread st=null;
     269               
     270                if (SearchAndShowThread.class.isInstance(stObj))
     271                        st = (SearchAndShowThread)generalThreads.get(ticket);
     272               
     273                else
     274                        return "<error value=\"not enough memory\" valueNum=\"1\"/>";
     275                       
    241276                if (st.returnValue==null){
    242277                        //System..println("ret: WAIT");
     
    245280                }
    246281                else {
    247                         String txt= st.returnValue;
     282                        //String txt= st.returnValue;
     283                        File retFile = st.returnValue;
     284                        byte[] buffer = new byte[(int) retFile.length()];
     285                        FileInputStream f;
     286                        try {
     287                                f = new FileInputStream(retFile);
     288                                f.read(buffer);
     289                                f.close();
     290                        } catch (FileNotFoundException e) {
     291                                // TODO Auto-generated catch block
     292                                System.err.println("getSearchResult: Cannot find temporary file with results:"+retFile.getPath());
     293                        }  catch (IOException e) {
     294                                System.err.println("getSearchResult: IO error:"+retFile.getPath());
     295                                e.printStackTrace();
     296                        }
     297                        retFile.delete();
     298                       
     299
    248300                        generalThreads.remove(ticket);
    249301                        //System.err.println("ret:"+txt);
    250                         return txt;
     302                        return new String(buffer);
     303                        //return txt;
    251304                       
    252305                }
  • trunk/src/de/mpiwg/itgroup/fulltext/ocropus/SearchAndShowThread.java

    r1887 r2118  
    11package de.mpiwg.itgroup.fulltext.ocropus;
    22
     3import java.io.File;
     4import java.io.FileWriter;
    35import java.io.IOException;
    46import java.util.ArrayList;
     
    1517        private HashMap<String, Hits> results;
    1618
    17         public String returnValue = null;
     19        public File returnValue = null;
    1820        public String currentLanguage = null;
    1921        public int counter = 0;
     
    8789        }
    8890
    89         private String wrapResultsInXMLShort(HashMap<String, Hits> results) throws CorruptIndexException, IOException
     91        private File wrapResultsInXMLShort(HashMap<String, Hits> results) throws CorruptIndexException, IOException
    9092        {
     93                long mem0 = Runtime.getRuntime().freeMemory();
     94                long mem1;
     95               
     96                File tempFile = File.createTempFile("temp", ".tmp" );
     97               
     98                FileWriter fw = new FileWriter(tempFile);
     99               
     100                //String ret="<searchresult encoding=\"utf-8\">";
     101                fw.write("<searchresult encoding=\"utf-8\">");
     102                for (String lang: results.keySet())
     103                        //gehe durch alle Sprachen
     104                {
     105                        currentLanguage=lang;
     106                       
     107                        HashMap<String, ArrayList<String>> linesInPath = new HashMap<String,ArrayList<String>>();
     108                        HashMap<String, ArrayList<String>> boxesInPath = new HashMap<String,ArrayList<String>>();
     109                        HashMap<String, ArrayList<String>> dimInPath = new HashMap<String,ArrayList<String>>();
     110                        HashMap<String, String> dcMetaDataInPath = new HashMap<String,String>();
     111                        fw.write("<results lang=\""+lang+"\"><resultsShort>");
     112                        analyseResults(results, lang, linesInPath, boxesInPath, dimInPath,dcMetaDataInPath);
     113                        //String mdString = dcMetaDataInPath.toString();
     114                        //System.out.println("mdString:"+mdString.getBytes("utf-8"));
     115                        fw.write("<dcMetaDatas>"+dcMetaDataInPath.toString()+"</dcMetaDatas>");
     116                       
     117                        //System.out.println("wrapResultsInXMLShort: Analised the results:"+lang);
     118                        //setze das jetzt in XML
     119                                       
     120                                fw.write("<lines>"+pack(linesInPath)+"</lines>");
     121                                fw.write("<boxes>"+pack(boxesInPath)+"</boxes>");
     122                                fw.write("<dims>"+pack(dimInPath)+"</dims>");                           
     123                       
     124                        System.out.println("wrapResultsInXMLShort: Wrapped the results:"+lang
     125                        );
     126                        fw.write("</resultsShort></results>");
     127                }
     128                System.out.println("wrapResultsInXMLShort: Wrapped the results");
     129                mem1 = Runtime.getRuntime().freeMemory();
     130                Runtime.getRuntime().gc();
     131                System.out.println("free memory changed:"+String.valueOf(mem1-mem0));
     132                System.out.println("free memory current:"+String.valueOf(mem1));
     133                fw.write("</searchresult>");
     134                fw.close();
     135                return tempFile;
     136        }
     137
     138        private String wrapResultsInXMLShortMem(HashMap<String, Hits> results) throws CorruptIndexException, IOException
     139        {
     140                long mem0 = Runtime.getRuntime().totalMemory() -
     141              Runtime.getRuntime().freeMemory();
     142
     143       
    91144                String ret="<searchresult encoding=\"utf-8\">";
    92145                for (String lang: results.keySet())
     
    117170                }
    118171                System.out.println("wrapResultsInXMLShort: Wrapped the results");
     172                long mem1 = Runtime.getRuntime().totalMemory() -
     173              Runtime.getRuntime().freeMemory();
     174
     175                System.out.println("memory:"+String.valueOf(mem1-mem0));
    119176                return ret+"</searchresult>";
    120177        }
     
    133190                        // TODO Auto-generated catch block
    134191                        e1.printStackTrace();
    135                         returnValue ="";
     192                        returnValue =null;
    136193                } catch (IOException e1) {
    137194                        // TODO Auto-generated catch block
    138195                        e1.printStackTrace();
    139                         returnValue ="";
     196                        returnValue =null;
    140197                }
    141198                try {
     
    143200                } catch (CorruptIndexException e) {
    144201                        e.printStackTrace();
    145                         returnValue ="";
     202                        returnValue =null;
    146203                } catch (IOException e) {
    147204                        // TODO Auto-generated catch block
    148205                        e.printStackTrace();
    149                         returnValue ="";
     206                        returnValue =null;
    150207                       
    151208                }
Note: See TracChangeset for help on using the changeset viewer.