Noble Paul ??????? ?????? wrote:
why do we need a serialize/deserialize for EmbeddedSolrServer? Why
can't we just return the Namedlist directly?

+1

I have use cases that I *know* are not going to be returned via HTTP (operations invoked from an EJB message driven bean), so requiring any serialize/deserialize logic just makes things slower.

Craig McClanahan
On Tue, Jul 22, 2008 at 8:47 AM,  <[EMAIL PROTECTED]> wrote:
Author: ryan
Date: Mon Jul 21 20:17:13 2008
New Revision: 678624

URL: http://svn.apache.org/viewvc?rev=678624&view=rev
Log:
SOLR-641 -- use the binary parser for embeded solr server

Modified:
   
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java

Modified: 
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
URL: 
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java?rev=678624&r1=678623&r2=678624&view=diff
==============================================================================
--- 
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
 (original)
+++ 
lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
 Mon Jul 21 20:17:13 2008
@@ -17,6 +17,8 @@

 package org.apache.solr.client.solrj.embedded;

+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
@@ -25,15 +27,16 @@
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.impl.BinaryResponseParser;
 import org.apache.solr.client.solrj.impl.XMLResponseParser;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
-import org.apache.solr.common.params.DefaultSolrParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.MultiCore;
 import org.apache.solr.core.SolrCore;
+import org.apache.solr.request.BinaryResponseWriter;
 import org.apache.solr.request.QueryResponseWriter;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrQueryResponse;
@@ -51,13 +54,12 @@
 */
 public class EmbeddedSolrServer extends SolrServer
 {
-  protected ModifiableSolrParams _invariantParams;
-  protected ResponseParser _processor;

  protected final MultiCore multicore; // either multicore
  protected final SolrCore core; // or single core
-  protected final SolrRequestParsers parser;
  protected final String coreName;  // use MultiCore registry
+
+  private final SolrRequestParsers _parser;

  public EmbeddedSolrServer( SolrCore core )
  {
@@ -67,7 +69,8 @@
    this.core = core;
    this.multicore = null;
    this.coreName = null;
-    this.parser = init();
+
+    _parser = new SolrRequestParsers( null );
  }

  public EmbeddedSolrServer(  MultiCore multicore, String coreName )
@@ -82,20 +85,10 @@
    if( c == null ) {
      throw new RuntimeException( "Unknown core: "+coreName );
    }
-    this.parser = init();
-  }
-
-  private SolrRequestParsers init()
-  {
-    _processor = new XMLResponseParser();

-    _invariantParams = new ModifiableSolrParams();
-    _invariantParams.set( CommonParams.WT, _processor.getWriterType() );
-    _invariantParams.set( CommonParams.VERSION, "2.2" );
-
-    return new SolrRequestParsers( null );
+    _parser = new SolrRequestParsers( null );
  }
-
+
  @Override
  public NamedList<Object> request(SolrRequest request) throws 
SolrServerException, IOException
  {
@@ -118,9 +111,6 @@
    if( params == null ) {
      params = new ModifiableSolrParams();
    }
-    if( _invariantParams != null ) {
-      params = new DefaultSolrParams( _invariantParams, params );
-    }

    // Extract the handler from the path or params
    SolrRequestHandler handler = core.getRequestHandler( path );
@@ -145,7 +135,7 @@
    }

    try {
-      SolrQueryRequest req = parser.buildRequestFrom( core, params, 
request.getContentStreams() );
+      SolrQueryRequest req = _parser.buildRequestFrom( core, params, 
request.getContentStreams() );
      req.getContext().put( "path", path );
      SolrQueryResponse rsp = new SolrQueryResponse();
      core.execute( handler, req, rsp );
@@ -154,13 +144,9 @@
      }

      // Now write it out
-      QueryResponseWriter responseWriter = core.getQueryResponseWriter(req);
-      StringWriter out = new StringWriter();
-      responseWriter.write(out, req, rsp);
-      // TODO: writers might be able to output binary someday
-
+      NamedList<Object> normalized = getParsedResponse(req, rsp);
      req.close();
-      return _processor.processResponse( new StringReader( out.toString() ) );
+      return normalized;
    }
    catch( IOException iox ) {
      throw iox;
@@ -169,4 +155,27 @@
      throw new SolrServerException( ex );
    }
  }
+
+  /**
+   * TODO -- in the future, this could perhaps transform the NamedList without 
serializing it
+   * then parsing it from the serialized form.
+   *
+   * @param req
+   * @param rsp
+   * @return a response object equivalent to what you get from the 
XML/JSON/javabin parser. Documents
+   * become SolrDocuments, DocList becomes SolrDocumentList etc.
+   */
+  public NamedList<Object> getParsedResponse( SolrQueryRequest req, 
SolrQueryResponse rsp )
+  {
+    try {
+      BinaryResponseWriter writer = new BinaryResponseWriter();
+      ByteArrayOutputStream bos = new ByteArrayOutputStream();
+      writer.write( bos, req, rsp );
+      BinaryResponseParser parser = new BinaryResponseParser();
+      return parser.processResponse( new ByteArrayInputStream( bos.toByteArray() ), 
"UTF-8" );
+    }
+    catch( Exception ex ) {
+      throw new RuntimeException( ex );
+    }
+  }
 }







Reply via email to