Thanks Ryan - good tips, and core.close() was the missing piece, duh.

Here's how it looks in JRuby:

  container = CoreContainer.new
descriptor = CoreDescriptor.new(container, "core1", "/Users/erik/ apache-solr-1.3.0/example/solr")
  core = container.create(descriptor)
  container.register("core1", core, false)

  solr = EmbeddedSolrServer.new(container, "core1")
  query = SolrQuery.new("*:*")
  response = solr.query(query)
  puts response
  core.close

Perhaps there should be an overloaded CoreContainer#register(core) that uses the name from the core descriptor so "core1" doesn't have to be duplicated?

        Erik


On Oct 2, 2008, at 10:37 AM, Ryan McKinley wrote:

You could also use the CoreContainer to create a Core from the descriptor:

   CoreContainer container = new CoreContainer();
   CoreDescriptor descriptor = new CoreDescriptor(container,
       "core1", "/Users/erik/apache-solr-1.3.0/example/solr");
   SolrCore core = container.create( descriptor );

if you are using a custom solrconfig name, you would need to call setConfigName( path ) on the descriptor.

As for closing...  have you tried core.close()?

ryan


On Oct 2, 2008, at 8:49 AM, Erik Hatcher wrote:

I'm doing some Java experiments to get ready for a solr-ruby overhaul such that JRuby comes into play nicely so that EmbeddedSolrServer can be used transparently too. I've not tried this since the whole CoreContainer/CoreDescriptor stuff was added, and I don't quite understand it all. Here's what I've got:

public static void main(String[] args) throws IOException, ParserConfigurationException, SAXException, SolrServerException {
  CoreContainer container = new CoreContainer();
SolrConfig config = new SolrConfig("/Users/erik/apache-solr-1.3.0/ example/solr", "solrconfig.xml", null); CoreDescriptor descriptor = new CoreDescriptor(container, "core1", "/Users/erik/apache-solr-1.3.0/example/solr"); SolrCore core = new SolrCore("core1", "/Users/erik/apache- solr-1.3.0/example/solr/data", config, null, descriptor);
  container.register("core1", core, false);
  SolrServer solr = new EmbeddedSolrServer(container, "core1");
  SolrQuery query = new SolrQuery("*:*");
  QueryResponse response = solr.query(query);
  System.out.println("response = " + response);
}

This works, but has a fair bit of seemingly unnecessary duplication, and it also leaves the JVM stays running for some reason.

Is this the proper way to use EmbeddedSolrServer, or are there some tips to improving the code and reducing the duplication?

Also, why does the JVM keep running? Are we spinning off a thread that needs to be shut down? Is there some sort of close() call that is needed?

Thanks,
        Erik


Reply via email to