Ответ 1
Это, вероятно, проблема зависимости.
Это очень нечеткое сообщение об ошибке, но я нашел здесь нечто похожее: Hibernate NoSuchFieldError INSTANCE, но только с Struts 1?
При попытке отправить мою топологию через StormSubmitter я получаю -
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
Я использую Spring.
Я не инициализирую HttpClient в Spout/Bolt Constructor. Вместо этого его инициализируется в конструкторе класса, который извлекается из Spring Context in prepare()
метода болта
Код структурирован следующим образом -
SomeBolt.java
@Component
public class SomeBolt extends BaseRichBolt {
private OutputCollector _collector;
private SomeClient someClient;
@Override
public void prepare(Map conf, TopologyContext context, OutputCollector collector) {
_collector = collector;
someClient = AppContext.getBean(SomeClient.class);
}
}
SomeClient.java
@Component
public class SomeClient {
private final CloseableHttpClient httpClient;
public SomeClient() {
this.httpClient = (httpClient == null ? HttpClients.createDefault() : httpClient);
}
}
AppContext.java
@Component
public class AppContext implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
AppContext.applicationContext = applicationContext;
}
public static <T> T getBean(Class<T> c) {
return applicationContext.getBean(c);
}
}
Это, вероятно, проблема зависимости.
Это очень нечеткое сообщение об ошибке, но я нашел здесь нечто похожее: Hibernate NoSuchFieldError INSTANCE, но только с Struts 1?
Я столкнулся с подобной проблемой вроде этого: в моем классе путь состоял из двух jar содержит один класс, httpcore-4.3 и apache-httpcomponents-httpcore, я удалил apache-httpcomponents-httpcore из пути класса, разрешившего проблему.
Суровый - это правильный путь к штурмовому классу.
Итак, что я сделал, чтобы выполнить эту работу, удалите httpclient и httpcore, который поставляется со штормом, и заменил их более новыми версиями 4.3.3 и 4.3.2 соответственно. Это изменяет путь к классам, который использует works/nimbus/supervisor. Вы можете запустить путь штурма, и он напечатает путь класса.
[nimbus ~]$ storm classpath
...../storm-0.8.2/lib/httpclient-4.3.3.jar:..../storm-0.8.2/lib/httpcore-4.3.2.jar.....
Я не уверен, что это очень хорошая работа, я не уверен, какая часть шторма использует эту банку.
если вы посмотрите на код python storm, вы увидите, что он поместит все банки в корне шторма и буря/Библиотека
def get_classpath(extrajars):
ret = get_jars_full(STORM_DIR)
ret.extend(get_jars_full(STORM_DIR + "/lib"))
ret.extend(extrajars)
return normclasspath(":".join(ret))
У меня были следующие файлы jar в пути внутри папки плагина:
./Var/Library/Jenkins/плагины/наращивание трубопровода-плагин/WEB-INF/Library/httpcore-4.2.1.jar
. /var/lib/jenkins/plugins/ git-client/WEB-INF/lib/httpcore-4.3.2.jar
. /var/lib/jenkins/plugins/maven -plugin/WEB-INF/lib/httpcore-4.2.4.jar
После этого я удалил следующий файл, он работал у меня
/var/lib/jenkins/plugins/build-pipeline-plugin/WEB-INF/lib/httpcore-4.2.1.jar
В моем случае основной причиной проблемы был неправильный метод репозитория JPA, который возвратил объект, отличный от ожидаемого.