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



Reply via email to