Я создаю перечисление Singleton для подключения эластичного поиска, но каждый раз при создании экземпляра перечисления я получаю сообщение об ошибке:
Caused by: java.lang.NoSuchMethodException: ngp.search.core.impl.elasticsearch.connection.ElasticSearchEnum.<init>()
Error during instantiation of the implementation object
java.lang.InstantiationException: ngp.search.core.impl.elasticsearch.connection.ElasticSearchEnum
at java.lang.Class.newInstance(Class.java:427)
Caused by: java.lang.NoSuchMethodException: ngp.search.core.impl.elasticsearch.connection.ElasticSearchEnum.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
... 36 more
Вот мой класс Enum:
@Component(
configurationPid = "ngp.search.core.configuration.NgpSearch"
)
public enum ElasticSearchEnum {
INSTANCE;
ElasticSearchEnum() {}
@Activate
@Modified
protected void activate(Map<String, Object> properties) {
_moduleConfiguration = ConfigurableUtil.createConfigurable(
ModuleConfiguration.class, properties);
}
public Client getClient() throws UnknownHostException {
String cluster = _moduleConfiguration.liferayElasticSearchClusterName();
String host = _moduleConfiguration.transportAddressHost();
int port = _moduleConfiguration.transportAddressPort();
Settings settings = Settings.settingsBuilder()
.put("cluster.name", cluster)
.put("client.transport.sniff", true).build();
TransportClient client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));
return client;
}
private volatile ModuleConfiguration _moduleConfiguration;
}
Я называю метод:
Client client = ElasticSearchEnum.INSTANCE.getClient();
Я думаю, что это из-за отражения Java.
Как я могу обойти отражение или правильный способ создания синглтона