Hello, I'm studying Solr to see technique of Lucene experts.
Seeing SolrServlet.java doPost and doGet, I thought I could call SolrCore execute() and update() methods without servlet container environment. I provided the following Solr program: public class HelloSolr { static SolrCore core = SolrCore.getSolrCore(); private static final String[] contents = { "AAAAA", "BBBBB", "CCCCC" }; public static void main( String[] args ) throws Exception { makeIndex(); } static void makeIndex() throws IOException { for( String content : contents ){ String xml = "<add><doc><field name=\"content\">" + content + "</field></doc></add>"; update( xml ); } commit(); } static void update( String xml ) throws IOException { System.out.println( "xml = " + xml ); StringReader reader = new StringReader( xml ); StringWriter writer = new StringWriter(); core.update( reader, writer ); System.out.println( writer.toString() ); writer.close(); reader.close(); } static void commit() throws IOException { update( "<commit/>" ); } } This program worked, but it freezed after commit. The thread dump is as follows: Full thread dump Java HotSpot(TM) Client VM (1.5.0_06-b05 mixed mode, sharing): "Thread-2" daemon prio=6 tid=0x0311bc68 nid=0x36c runnable [0x0338f000..0x0338fa e8] at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(FileInputStream.java:194) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:256) at java.io.BufferedInputStream.read(BufferedInputStream.java:313) - locked <0x22fd7998> (a java.io.BufferedInputStream) at java.io.FilterInputStream.read(FilterInputStream.java:111) at java.io.FilterInputStream.read(FilterInputStream.java:90) at org.apache.tools.ant.taskdefs.StreamPumper.run(StreamPumper.java:90) at java.lang.Thread.run(Thread.java:595) "Thread-1" daemon prio=6 tid=0x03128f58 nid=0xbf8 runnable [0x0334f000..0x0334fb 68] at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(FileInputStream.java:177) at org.apache.tools.ant.taskdefs.StreamPumper.run(StreamPumper.java:90) at java.lang.Thread.run(Thread.java:595) "Thread-0" daemon prio=6 tid=0x02d86480 nid=0xd74 runnable [0x0330f000..0x0330fb e8] at java.io.FileInputStream.readBytes(Native Method) at java.io.FileInputStream.read(FileInputStream.java:194) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:256) at java.io.BufferedInputStream.read(BufferedInputStream.java:313) - locked <0x22b52388> (a java.io.BufferedInputStream) at java.io.FilterInputStream.read(FilterInputStream.java:90) at org.apache.tools.ant.taskdefs.StreamPumper.run(StreamPumper.java:90) at java.lang.Thread.run(Thread.java:595) "Low Memory Detector" daemon prio=6 tid=0x00a6e660 nid=0xdc8 runnable [0x0000000 0..0x00000000] "CompilerThread0" daemon prio=10 tid=0x00a6d0f0 nid=0xa7c waiting on condition [ 0x00000000..0x02c1f74c] "Signal Dispatcher" daemon prio=10 tid=0x00a7ccb0 nid=0xfc8 waiting on condition [0x00000000..0x00000000] "Finalizer" daemon prio=8 tid=0x00a47a70 nid=0xbc8 in Object.wait() [0x02b9f000. .0x02b9f9e8] at java.lang.Object.wait(Native Method) - waiting on <0x22fd4b70> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) - locked <0x22fd4b70> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x00a39e60 nid=0x750 in Object.wait() [0x 02b5f000..0x02b5fae8] at java.lang.Object.wait(Native Method) - waiting on <0x22fd4bf0> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:474) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <0x22fd4bf0> (a java.lang.ref.Reference$Lock) "main" prio=6 tid=0x00036e38 nid=0xd90 runnable [0x0007f000..0x0007fc40] at java.lang.ProcessImpl.waitFor(Native Method) at org.apache.tools.ant.taskdefs.Execute.waitFor(Execute.java:539) at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:471) at org.apache.tools.ant.taskdefs.Java.fork(Java.java:751) at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:171) at org.apache.tools.ant.taskdefs.Java.execute(Java.java:84) at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) at org.apache.tools.ant.Task.perform(Task.java:364) at org.apache.tools.ant.Target.execute(Target.java:341) at org.apache.tools.ant.Target.performTasks(Target.java:369) at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) at org.apache.tools.ant.Project.executeTarget(Project.java:1185) at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExe cutor.java:40) at org.apache.tools.ant.Project.executeTargets(Project.java:1068) at org.apache.tools.ant.Main.runBuild(Main.java:668) at org.apache.tools.ant.Main.startAnt(Main.java:187) at org.apache.tools.ant.launch.Launcher.run(Launcher.java:246) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:67) "VM Thread" prio=10 tid=0x00a38cf8 nid=0xbd4 runnable "VM Periodic Task Thread" prio=10 tid=0x00a6f868 nid=0x8d4 waiting on condition My schema is as follows: <?xml version="1.0" ?> <schema name="example" version="1.1"> <types> <fieldtype name="text" class="solr.TextField"> <analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/> </fieldtype> </types> <fields> <field name="content" type="text" indexed="true" stored="true"/> </fields> <uniqueKey>content</uniqueKey> <defaultSearchField>content</defaultSearchField> </schema> Does Solr framework need servlet container, or did I do something wrong? Thanks in advance, Koji