【发布时间】:2019-08-06 18:23:17
【问题描述】:
我正在尝试在带有 Cellar 的 Karaf 内部的 OSGI 实例中实现 Hazelcast 的自定义发现策略。
我使用了 Cellar 的启动级别来尝试延迟启动。我用 hazelcast.xml 玩过不同的配置。我试图将我的捆绑包与实现分割成hazel-cast,但没有运气。
<discovery-strategies>
<discovery-strategy enabled="true"
class="my.custom.discovery.strat.WebDiscoveryFactory">
<properties>
<property name="application.scope">my-group</property>
</properties>
</discovery-strategy>
</discovery-strategies>
<property name="hazelcast.discovery.enabled">true</property>
还有我的自定义实现
public class WebDiscoveryFactory implements DiscoveryStrategyFactory {
/**
* Defines a name for the application scope. All instances registered using
* the same application scope will automatically be discovered.
* <p/>
* <
* pre>default: hazelcast-cluster</pre>
*/
@Override
public Class<? extends DiscoveryStrategy> getDiscoveryStrategyType() {
return WebDiscoveryStrategy.class;
}
@Override
public DiscoveryStrategy newDiscoveryStrategy(DiscoveryNode discoveryNode,
ILogger logger, Map<String, Comparable> properties) {
return new WebDiscoveryStrategy(discoveryNode, logger, properties);
}
@Override
public Collection<PropertyDefinition> getConfigurationProperties() {
Collection<PropertyDefinition> PROPERTY_DEFINITIONS
= //
Collections.unmodifiableCollection(Arrays.asList(APPLICATION_SCOPE, DISCOVERY_URL));
return PROPERTY_DEFINITIONS;
}
private static final ValueValidator URL_VALIDATOR = value -> {
String url = value.toString();
try {
new URL(url);
} catch (Exception e) {
throw new ValidationException(e);
}
};
}
它应该像往常一样开始,但似乎我的自定义实现并没有很快跳到 hazelcast 的共享路径上并且它停止了。注意:如果我从 hazelcast.xml 中删除我的自定义实现,它工作正常
14:01:58.114 INFO [features-3-thread-1] Registering commands for bundle org.apache.karaf.cellar.webconsole/4.1.3
14:01:58.115 INFO [features-3-thread-1] org.apache.geronimo.specs.geronimo-jta_1.1_spec/1.1.1
14:01:58.118 INFO [features-3-thread-1] Deployment finished. Registering FeatureDeploymentListener
14:01:58.197 INFO [pool-9-thread-1] [LOCAL] [cellar] [3.9.1] Prefer IPv4 stack is true.
14:01:58.201 INFO [pool-9-thread-1] [LOCAL] [cellar] [3.9.1] Picked [172.17.0.1]:5701, using socket ServerSocket[addr=/0:0:0:0:0:0:0:0,localport=5701], bind any local is true
14:01:58.215 INFO [pool-9-thread-1] [172.17.0.1]:5701 [cellar] [3.9.1] Hazelcast 3.9.1 (20171130 - feca534) starting at [172.17.0.1]:5701
14:01:58.215 INFO [pool-9-thread-1] [172.17.0.1]:5701 [cellar] [3.9.1] Copyright (c) 2008-2017, Hazelcast, Inc. All Rights Reserved.
14:01:58.216 INFO [pool-9-thread-1] [172.17.0.1]:5701 [cellar] [3.9.1] Configured Hazelcast Serialization version: 1
14:01:58.221 INFO [features-3-thread-1] Done.
14:01:58.445 INFO [pool-9-thread-1] [172.17.0.1]:5701 [cellar] [3.9.1] Backpressure is disabled
14:01:58.700 WARN [pool-9-thread-1] Error starting activator
com.hazelcast.config.InvalidConfigurationException: Invalid configuration
at com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.loadDiscoveryStrategies(DefaultDiscoveryService.java:151) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.<init>(DefaultDiscoveryService.java:60) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.spi.discovery.impl.DefaultDiscoveryServiceProvider.newDiscoveryService(DefaultDiscoveryServiceProvider.java:29) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.instance.Node.createDiscoveryService(Node.java:265) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.instance.Node.<init>(Node.java:216) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.instance.HazelcastInstanceImpl.createNode(HazelcastInstanceImpl.java:160) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.instance.HazelcastInstanceImpl.<init>(HazelcastInstanceImpl.java:128) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.instance.HazelcastInstanceFactory.constructHazelcastInstance(HazelcastInstanceFactory.java:195) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.instance.HazelcastInstanceFactory.newHazelcastInstance(HazelcastInstanceFactory.java:174) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.instance.HazelcastInstanceFactory.newHazelcastInstance(HazelcastInstanceFactory.java:124) ~[28:com.hazelcast:3.9.1]
at com.hazelcast.core.Hazelcast.newHazelcastInstance(Hazelcast.java:58) ~[28:com.hazelcast:3.9.1]
at org.apache.karaf.cellar.hazelcast.factory.HazelcastServiceFactory.buildInstance(HazelcastServiceFactory.java:77) ~[88:org.apache.karaf.cellar.hazelcast:4.1.3]
at org.apache.karaf.cellar.hazelcast.factory.HazelcastServiceFactory.getInstance(HazelcastServiceFactory.java:62) ~[88:org.apache.karaf.cellar.hazelcast:4.1.3]
at org.apache.karaf.cellar.hazelcast.internal.osgi.Activator.doStart(Activator.java:168) ~[88:org.apache.karaf.cellar.hazelcast:4.1.3]
at org.apache.karaf.util.tracker.BaseActivator.run(BaseActivator.java:242) [88:org.apache.karaf.cellar.hazelcast:4.1.3]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: com.hazelcast.config.properties.ValidationException: There is no discovery strategy factory to create 'DiscoveryStrategyConfig{properties={application.scope=my-group}, className='my.custom.discovery.strat.WebDiscoveryFactory', discoveryStrategyFactory=null}' Is it a typo in a strategy classname? Perhaps you forgot to include implementation on a classpath?
at com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.buildDiscoveryStrategy(DefaultDiscoveryService.java:188) ~[?:?]
at com.hazelcast.spi.discovery.impl.DefaultDiscoveryService.loadDiscoveryStrategies(DefaultDiscoveryService.java:145) ~[?:?]
... 19 more
【问题讨论】:
标签: java hazelcast apache-karaf bnd