:Hazelcast無法創建ObjectName中使用文件時| HTTP(S)協議使用hazelcast 3.6於此異常運行後
java.lang.IllegalArgumentException異常:無法在 com.hazelcast創建一個ObjectName .jmx.HazelcastMBean.setObjectName在 com.hazelcast.jmx.ConnectionManagerMBean(HazelcastMBean.java:116) 。(ConnectionManagerMBean.java:39) 在 com.hazelcast.jmx.InstanceMBean.createMBeans(InstanceMBean.java:74) at com.hazelcast.jmx.InstanceMBean。(InstanceMBean.java:67)at com.hazelcast.jmx.ManagementService。(ManagementService.java:67) 在 com.hazelcast.instance.HazelcastInstanceImpl。(HazelcastInstanceImpl.java:136) 在 com.hazelcast.instance.HazelcastInstanceFactory.constructHazelcastInstance(HazelcastInstanceFactory.java :160) 在 com.hazelcast.instance.HazelcastInstanceFactory.getOrCreateHazelcastInstance(HazelcastInstanceFactory.java:98) 在 com.hazelcast.cache.impl.HazelcastServerCachingProvider.getOrCreateInstance(HazelcastServerCachingProvider.java:98) 在 com.hazelcast。 cache.impl.HazelcastServerCachingProvider.createHazelcastCacheManager(HazelcastServerCachingProvider.java:64) at com.hazelcast.cache.impl.HazelcastServerCachingProvider.createHazelcastCacheManager在 com.hazelcast.cache.HazelcastCachingProvider在 com.hazelcast.cache.impl.AbstractHazelcastCachingProvider.getCacheManager(AbstractHazelcastCachingProvider.java:94)(HazelcastServerCachingProvider.java:42) .getCacheManager(HazelcastCachingProvider.java:131)
我把看代碼,這是造成錯誤的這一部分,對文件:HazelcastServerCachingProvider.java(開始於行:78):
String location = properties.getProperty(HazelcastCachingProvider.HAZELCAST_CONFIG_LOCATION);
// If config location is specified, get instance through it.
if (location != null) {
URI uri = new URI(location);
String scheme = uri.getScheme();
if (scheme == null) {
// It is a place holder
uri = new URI(System.getProperty(uri.getRawSchemeSpecificPart()));
}
ClassLoader theClassLoader = classLoader == null ? getDefaultClassLoader() : classLoader;
final URL configURL;
if ("classpath".equals(scheme)) {
configURL = theClassLoader.getResource(uri.getRawSchemeSpecificPart());
} else if ("file".equals(scheme) || "http".equals(scheme) || "https".equals(scheme)) {
configURL = uri.toURL();
} else {
throw new URISyntaxException(location, "Unsupported protocol in configuration location URL");
}
try {
Config config = new XmlConfigBuilder(configURL).build();
config.setClassLoader(theClassLoader);
**HERE BAD INSTANCENAME IS GENERATED**
config.setInstanceName(configURL.toString());
return HazelcastInstanceFactory.getOrCreateHazelcastInstance(config);
} catch (Exception e) {
throw ExceptionUtil.rethrow(e);
}
}
在傳遞的hazelcast_config_location中使用文件或http(s)協議時,我們將無法創建mbean,因爲hazelCastInstanceName不應包含字符':',這不幸是configURI名稱的一部分。
這是一個錯誤還是我忽略了一些東西?
感謝您的答覆
嗨,這個問題在這裏跟蹤:[#7548](https://github.com/hazelcast/hazelcast/issues/7548) – questioner
嗨,似乎它是由未引用的名稱屬性引起的'ConnectionManagerMBean'中的名稱。我們會盡快解決它。感謝您報告問題。 –