Giter Club home page Giter Club logo

config-toolkit's Issues

操作系统win7 64位中文,jdk1.8.0_11,在config-zk-web工程下运行mvn clean install -Dmaven.test.skip报错

[ERROR] d:\git\config-toolkit\config-zk-web\src\main\java\com\dangdang\config\se
rvice\web\mb\PropertyGroupManagedBean.java:179: 警告: @return 没有说明
[ERROR] * @return
[ERROR] ^
[ERROR] d:\git\config-toolkit\config-zk-web\src\main\java\com\dangdang\config\se
rvice\web\mb\PropertyGroupManagedBean.java:181: 警告: event没有 @param
[ERROR] public void onMenuSelected(SelectEvent event) {
[ERROR] ^
[ERROR] d:\git\config-toolkit\config-zk-web\src\main\java\com\dangdang\config\se
rvice\web\mb\PropertyGroupManagedBean.java:192: 警告: @param 没有说明
[ERROR] * @param event
[ERROR] ^
[ERROR] d:\git\config-toolkit\config-zk-web\src\main\java\com\dangdang\config\se
rvice\web\mb\PropertyGroupManagedBean.java:273: 警告: @param 没有说明
[ERROR] * @param event
[ERROR] ^
[ERROR] d:\git\config-toolkit\config-zk-web\src\main\java\com\dangdang\config\se
rvice\web\mb\PropertyGroupManagedBean.java:303: 警告: @param 没有说明
[ERROR] * @param event
[ERROR] ^

java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

已将换行改成CRLF

note:jdk1.7.0_45没有问题,mvn clean install -Dmaven.test.skip能运行成功。

当运行在有session共享的环境下时会有以下异常

当运行在有session共享的环境下时会有以下异常(tomcat7)

session共享方案
https://github.com/lenxeon/notes/tree/master/%E8%BF%90%E7%BB%B4/201512/tomcat7%E9%9B%86%E7%BE%A4session%E5%85%B1%E4%BA%AB

异常
java.lang.NoClassDefFoundError: Lorg/codehaus/janino/ScriptEvaluator;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2499)
at java.lang.Class.getDeclaredFields(Class.java:1811)
at com.esotericsoftware.kryo.serialize.FieldSerializer.rebuildCachedFields(FieldSerializer.java:61)
at com.esotericsoftware.kryo.serialize.FieldSerializer.(FieldSerializer.java:48)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.(ReferenceFieldSerializer.java:26)
at de.javakaffee.web.msm.serializer.kryo.ReferenceFieldSerializerFactory.newDefaultSerializer(ReferenceFieldSerializerFactory.java:34)
at de.javakaffee.web.msm.serializer.kryo.KryoTranscoder$1.newDefaultSerializer(KryoTranscoder.java:198)
at com.esotericsoftware.kryo.Kryo.newSerializer(Kryo.java:273)
at de.javakaffee.web.msm.serializer.kryo.KryoTranscoder$1.newSerializer(KryoTranscoder.java:176)
at com.esotericsoftware.kryo.Kryo.handleUnregisteredClass(Kryo.java:329)
at de.javakaffee.web.msm.serializer.kryo.KryoTranscoder$1.handleUnregisteredClass(KryoTranscoder.java:193)
at com.esotericsoftware.kryo.Kryo.getRegisteredClass(Kryo.java:305)
at com.esotericsoftware.kryo.Kryo.writeClass(Kryo.java:374)
at de.javakaffee.kryoserializers.ClassSerializer.write(ClassSerializer.java:51)
at de.javakaffee.kryoserializers.ClassSerializer.write(ClassSerializer.java:30)
at com.esotericsoftware.kryo.serialize.SimpleSerializer.writeObjectData(SimpleSerializer.java:17)
at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:489)
at com.esotericsoftware.kryo.serialize.CollectionSerializer.writeObjectData(CollectionSerializer.java:86)
at de.javakaffee.kryoserializers.CopyForIterateCollectionSerializer.writeObjectData(CopyForIterateCollectionSerializer.java:46)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.serialize.FieldSerializer.writeObjectData(FieldSerializer.java:175)
at com.esotericsoftware.kryo.serialize.ReferenceFieldSerializer.writeObjectData(ReferenceFieldSerializer.java:52)
at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:489)
at com.esotericsoftware.kryo.serialize.MapSerializer.writeObjectData(MapSerializer.java:104)
at de.javakaffee.kryoserializers.CopyForIterateMapSerializer.writeObjectData(CopyForIterateMapSerializer.java:56)
at com.esotericsoftware.kryo.Serializer.writeObject(Serializer.java:43)
at com.esotericsoftware.kryo.Kryo.writeObject(Kryo.java:520)
at com.esotericsoftware.kryo.ObjectBuffer.writeObject(ObjectBuffer.java:251)
at de.javakaffee.web.msm.serializer.kryo.KryoTranscoder.serializeAttributes(KryoTranscoder.java:303)
at de.javakaffee.web.msm.TranscoderService.serializeAttributes(TranscoderService.java:155)
at de.javakaffee.web.msm.BackupSessionTask.serializeAttributes(BackupSessionTask.java:176)
at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:110)
at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:51)
at de.javakaffee.web.msm.BackupSessionService$SynchronousExecutorService.submit(BackupSessionService.java:346)
at de.javakaffee.web.msm.BackupSessionService.backupSession(BackupSessionService.java:205)
at de.javakaffee.web.msm.MemcachedSessionService.backupSession(MemcachedSessionService.java:1040)
at de.javakaffee.web.msm.RequestTrackingHostValve.backupSession(RequestTrackingHostValve.java:230)
at de.javakaffee.web.msm.RequestTrackingHostValve.invoke(RequestTrackingHostValve.java:159)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.codehaus.janino.ScriptEvaluator
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
... 74 more

session expire,不能监听到改动的节点了

重现步骤:

  1. 起一个ZookeeperConfigGroup
  2. 随便找个地方断点,过一段时间让session超时,看到如下日志:

2018-06-08 15:57:42,398 main-SendThread(x.x.x.x:2181) INFO org.apache.zookeeper.ClientCnxn:975 :: Opening socket connection to server 10.16.2.118/10.16.2.118:2181. Will not attempt to authenticate using SASL (unknown error)
2018-06-08 15:57:42,402 main-SendThread(x.x.x.x:2181) INFO org.apache.zookeeper.ClientCnxn:852 :: Socket connection established to 10.16.2.118/10.16.2.118:2181, initiating session
2018-06-08 15:57:42,405 main-SendThread(x.x.x.x:2181) INFO org.apache.zookeeper.ClientCnxn:1094 :: Unable to reconnect to ZooKeeper service, session 0x36347e4f35801c1 has expired, closing socket connection
2018-06-08 15:57:42,405 main-EventThread WARN org.apache.curator.ConnectionState:289 :: Session expired event received
2018-06-08 15:57:42,406 main-EventThread INFO org.apache.zookeeper.ZooKeeper:438 :: Initiating client connection, connectString=10.16.2.118:2181 sessionTimeout=60000 watcher=org.apache.curator.ConnectionState@57bdceaa
2018-06-08 15:57:42,407 main-EventThread INFO org.apache.curator.framework.state.ConnectionStateManager:228 :: State change: LOST
2018-06-08 15:57:42,408 main-SendThread(10.16.2.118:2181) INFO org.apache.zookeeper.ClientCnxn:975 :: Opening socket connection to server 10.16.2.118/10.16.2.118:2181. Will not attempt to authenticate using SASL (unknown error)
2018-06-08 15:57:42,987 main-EventThread INFO org.apache.zookeeper.ClientCnxn:512 :: EventThread shut down

  1. 在界面上随便改动一个值,预期程序可以进入以下断点,NodeChildrenChanged或者NodeDataChanged分支:

ConfigNodeEventListener.java

@Override
public void eventReceived(CuratorFramework client, CuratorEvent event) throws Exception {
	if (LOGGER.isDebugEnabled()) {
		LOGGER.debug(event.toString());
	}

	final WatchedEvent watchedEvent = event.getWatchedEvent();
	if (watchedEvent != null) {
		LOGGER.debug("Watched event: {}" + watchedEvent);

		if (watchedEvent.getState() == KeeperState.SyncConnected) {
			boolean someChange = false;
			switch (watchedEvent.getType()) {
			case NodeChildrenChanged:
				configNode.loadNode();
				someChange = true;
				break;
			case NodeDataChanged:
				configNode.reloadKey(watchedEvent.getPath());
				someChange = true;
				break;

结果没有进入。

可能原因:
session失效后,关联在session上的watcher全部被移除。再次重连后,zk node上没有注册watcher,所以改动的node的值,不会触发到eventReceived方法。所以,在重连后,需要调用方法重新在node上注册watcher.

代码上做以下改动case NodeDataChanged后面加一个条件:
case None:
configNode.loadNode();
someChange = false;
break;

loadNode方法会重新注册监听。

关于版本问题

您好 一直在用您们的config toolkit 非常好用,也非常感谢。但是 类似于 guava curator 版本有点略低 是否可以升级下版本 非常感谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.