我正在连接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代码正在工作。
答案 0 :(得分:0)
问题已解决
问题是由于activemq jar版本5.8中的MDC的log4j实现不兼容,我们使用MDC进行事务日志记录。我们正在为solrj jar的ExcecutorUtil(第172行)提供交易信息的地图 正在转换为String以获取提交者上下文。
用5.10版本替换了jar。现在它的工作