2
2
3
3
import cc .cc1234 .main .cache .TreeItemCache ;
4
4
import cc .cc1234 .main .cache .ZkClientCache ;
5
+ import cc .cc1234 .main .cache .ZkListenerCache ;
5
6
import cc .cc1234 .main .curator .NodeEventHandler ;
6
7
import cc .cc1234 .main .history .History ;
7
8
import cc .cc1234 .main .manager .CuratorlistenerManager ;
19
20
import org .apache .curator .framework .recipes .cache .TreeCacheListener ;
20
21
import org .apache .curator .retry .RetryOneTime ;
21
22
import org .apache .zookeeper .data .Stat ;
23
+ import org .slf4j .Logger ;
24
+ import org .slf4j .LoggerFactory ;
22
25
23
- import java .util .Map ;
24
- import java .util .concurrent .ConcurrentHashMap ;
25
- import java .util .concurrent .Executors ;
26
26
import java .util .concurrent .atomic .AtomicReference ;
27
27
28
28
public class NodeTreeViewController {
29
29
30
+ private static final Logger LOG = LoggerFactory .getLogger (NodeTreeViewController .class );
31
+
30
32
@ FXML
31
33
private TreeView <ZkNode > zkNodeTreeView ;
32
34
@@ -81,10 +83,7 @@ public class NodeTreeViewController {
81
83
82
84
private ZkClientCache serverClientCache = ZkClientCache .getInstance ();
83
85
84
- /**
85
- * [server:manager]
86
- */
87
- private Map <String , CuratorlistenerManager > curatorlistenerManagerCache = new ConcurrentHashMap <>();
86
+ public static ZkListenerCache zkListenerCache = ZkListenerCache .getInstance ();
88
87
89
88
/**
90
89
* current selected zk server
@@ -98,6 +97,9 @@ public class NodeTreeViewController {
98
97
99
98
public void setPrimaryStage (Stage primary ) {
100
99
this .primaryStage = primary ;
100
+ primary .onCloseRequestProperty ().addListener ((observable , oldValue , newValue ) -> {
101
+ serverClientCache .closeAll ();
102
+ });
101
103
}
102
104
103
105
@ FXML
@@ -185,10 +187,11 @@ private CuratorFramework doConnect(ZkServer server) {
185
187
// TODO @vran use connection listener
186
188
client .blockUntilConnected ();
187
189
} catch (InterruptedException e ) {
188
- throw new IllegalStateException (e );
190
+ VToast .toastFailure (primaryStage , "Connect zookeeper failed" );
191
+ LOG .error ("" , e );
189
192
}
190
193
191
- Executors . newSingleThreadExecutor (). execute (() -> {
194
+ Platform . runLater (() -> {
192
195
final String value = history .get (server .getServer (), "0" );
193
196
history .save (server .getServer (), String .valueOf (Integer .parseInt (value ) + 1 ));
194
197
history .store ();
@@ -201,9 +204,10 @@ void syncTreeNode(String server, CuratorFramework client) {
201
204
}
202
205
203
206
private void startSyncTreeNodeListener (String server , CuratorFramework client ) {
204
- CuratorlistenerManager manager = curatorlistenerManagerCache .getOrDefault (server ,
205
- new CuratorlistenerManager (client ));
206
- manager .start (new TreeCacheListener () {
207
+ if (!zkListenerCache .contains (server )) {
208
+ zkListenerCache .put (server , new CuratorlistenerManager (client ));
209
+ }
210
+ zkListenerCache .get (server ).start (new TreeCacheListener () {
207
211
208
212
private NodeEventHandler eventHandler = new NodeEventHandler (server );
209
213
@@ -245,8 +249,8 @@ private void updateDataAction() {
245
249
.inBackground ((client , event ) -> Platform .runLater (() -> VToast .toastSuccess (primaryStage )))
246
250
.forPath (this .pathLabel .getText (), this .dataTextArea .getText ().getBytes ());
247
251
} catch (Exception e ) {
248
- VToast .toastFailure (primaryStage );
249
- throw new IllegalStateException ( e );
252
+ VToast .toastFailure (primaryStage , "update data failed" );
253
+ LOG . error ( "update data error" , e );
250
254
}
251
255
}
252
256
0 commit comments