Solr云客户端5.3.1使用spring hibernate事务时出现超时异常

时间:2016-01-27 11:07:37

标签: solr apache-zookeeper solrj spring-transactions solrcloud

我正在连接solr以索引一些数据库条目,这些条目是我通过spring hibernate事务获得的。但面对以下异常。

Error while calling watcher 
java.lang.ClassCastException: java.util.HashMap cannot be cast to java.lang.String
    at org.apache.solr.common.util.ExecutorUtil$MDCAwareThreadPoolExecutor.execute(ExecutorUtil.java:173)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:110)
    at org.apache.solr.common.cloud.SolrZkClient$3.process(SolrZkClient.java:261)
    at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:522)
    at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:498) 


org.apache.solr.common.SolrException: java.util.concurrent.TimeoutException: Could not connect to ZooKeeper x.x.x.x:8000 within 10000 ms
    at org.apache.solr.common.cloud.SolrZkClient.(SolrZkClient.java:181)
    at org.apache.solr.common.cloud.SolrZkClient.(SolrZkClient.java:115)
    at org.apache.solr.common.cloud.SolrZkClient.(SolrZkClient.java:105)
    at org.apache.solr.common.cloud.ZkStateReader.(ZkStateReader.java:207)
    at org.apache.solr.client.solrj.impl.CloudSolrClient.connect(CloudSolrClient.java:465)
    at org.apache.solr.client.solrj.impl.CloudSolrClient.requestWithRetryOnStaleState(CloudSolrClient.java:822)
    at org.apache.solr.client.solrj.impl.CloudSolrClient.request(CloudSolrClient.java:805)
    at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:135)
    at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:107)
    at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:72)
    at org.apache.solr.client.solrj.SolrClient.add(SolrClient.java:86)


CloudSolrClient cloudSolrClient = null;
TransactionStatus transactionStatus = null;
List levelDefinitions = new LinkedList();
try
{
    DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
    transactionStatus = getTransactionManager().getTransaction(transactionDefinition);

    //database query

    cloudSolrClient = new CloudSolrClient("x.x.x.x:8000");

    cloudSolrClient.setDefaultCollection("CMD_OUSTR_NEW_dev");
    SolrInputDocument solrInputDocument = new SolrInputDocument();

     //field setting of SolrInputDocument 

    LinkedList solrInputDocuments = new LinkedList();
    solrInputDocuments.add(solrInputDocument);

    cloudSolrClient.add(solrInputDocuments);

    cloudSolrClient.commit();

    getTransactionManager().commit(transactionStatus);

注意:如果没有在线程中打开spring hibernate事务,则相同的solr代码正在工作。

1 个答案:

答案 0 :(得分:0)

问题已解决

问题是由于activemq jar版本5.8中的MDC的log4j实现不兼容,我们使用MDC进行事务日志记录。我们正在为solrj jar的ExcecutorUtil(第172行)提供交易信息的地图 正在转换为String以获取提交者上下文。

用5.10版本替换了jar。现在它的工作