@@ -81,9 +81,12 @@ public class JmxSupport {
81
81
private static final String JCMD_JFR_DUMP = "jfrDump" ; // NOI18N
82
82
private static final String JCMD_JFR_DUMP_FILENAME = "filename" ; // NOI18N
83
83
private static final String JCMD_JFR_DUMP_RECORDING = "recording" ; // NOI18N
84
+ private static final String JCMD_JFR_DUMP_NAME = "name" ; // NOI18N
84
85
private static final String JCMD_JFR_CHECK = "jfrCheck" ; // NOI18N
85
86
private static final String JCMD_JFR_CHECK_RECORDING_ID = "recording=" ; // NOI18N
86
87
private static final String JCMD_JFR_CHECK_RECORDING_ID1 = "Recording " ; // NOI18N
88
+ private static final String JCMD_JFR_CHECK_HELP_OPTIONS_ID = "Options: " ; // NOI18N
89
+ private static final String JCMD_JFR_CHECK_HELP_RECORDING_ID = "recording : " ; // NOI18N
87
90
private static final String JCMD_JFR_START = "jfrStart" ; // NOI18N
88
91
private static final String JCMD_JFR_START_NAME = "name" ; // NOI18N
89
92
private static final String JCMD_JFR_START_SETTINGS = "settings" ; // NOI18N
@@ -98,6 +101,7 @@ public class JmxSupport {
98
101
private static final String JCMD_JFR_STOP_NAME = "name" ; // NOI18N
99
102
private static final String JCMD_JFR_UNLOCK_ID = "Use VM.unlock_commercial_features to enable" ; // NOI18N
100
103
private static final String JCMD_UNLOCK_CF = "vmUnlockCommercialFeatures" ; // NOI18N
104
+ private static final String JCMD_HELP = "help" ; // NOI18N
101
105
private static final String JCMD_CF_ID = " unlocked." ; // NOI18N
102
106
private static final Map EMPTY_PARS = Collections .singletonMap ("" , null );
103
107
@@ -456,6 +460,9 @@ synchronized boolean isJfrAvailable() {
456
460
jfrAvailable = Boolean .TRUE ;
457
461
}
458
462
}
463
+ if (Boolean .TRUE .equals (jfrAvailable )) {
464
+ oldJFR = checkForOldJFR ();
465
+ }
459
466
}
460
467
return jfrAvailable ;
461
468
}
@@ -480,7 +487,6 @@ List<Long> jfrCheck() {
480
487
if (recEnd > recStart ) {
481
488
String recordingNum = line .substring (recStart , recEnd );
482
489
recNumbers .add (Long .valueOf (recordingNum ));
483
- oldJFR = Boolean .TRUE ;
484
490
}
485
491
} else if (line .startsWith (JCMD_JFR_CHECK_RECORDING_ID1 )) {
486
492
int recStart = JCMD_JFR_CHECK_RECORDING_ID1 .length ();
@@ -489,7 +495,6 @@ List<Long> jfrCheck() {
489
495
if (recEnd > recStart ) {
490
496
String recordingNum = line .substring (recStart , recEnd );
491
497
recNumbers .add (Long .valueOf (recordingNum ));
492
- oldJFR = Boolean .FALSE ;
493
498
}
494
499
}
495
500
}
@@ -502,9 +507,7 @@ String takeJfrDump(long recording, String fileName) {
502
507
}
503
508
Map <String , Object > pars = new HashMap ();
504
509
pars .put (JCMD_JFR_DUMP_FILENAME , fileName );
505
- if (Boolean .TRUE .equals (oldJFR )) {
506
- pars .put (JCMD_JFR_DUMP_RECORDING , recording );
507
- }
510
+ pars .put (oldJFR ? JCMD_JFR_DUMP_RECORDING : JCMD_JFR_DUMP_NAME , recording );
508
511
return executeJCmd (JCMD_JFR_DUMP , pars );
509
512
}
510
513
@@ -523,8 +526,9 @@ boolean startJfrRecording(String name, String[] settings, Long delay,
523
526
if (maxSize != null ) pars .put (JCMD_JFR_START_MAXSIZE , maxSize );
524
527
if (dumpOnExit != null ) pars .put (JCMD_JFR_START_DUMPONEXIT , dumpOnExit );
525
528
if (path != null ) pars .put (JCMD_JFR_START_FILENAME , path );
526
- if (disk != null && Boolean . FALSE . equals ( oldJFR ) ) pars .put (JCMD_JFR_START_DISK , disk );
529
+ if (disk != null && ! oldJFR ) pars .put (JCMD_JFR_START_DISK , disk );
527
530
531
+ if (pars .isEmpty ()) pars = EMPTY_PARS ;
528
532
executeJCmd (JCMD_JFR_START , pars );
529
533
return true ;
530
534
}
@@ -533,7 +537,7 @@ boolean stopJfrRecording() {
533
537
if (!isJfrAvailable ()) {
534
538
throw new UnsupportedOperationException ();
535
539
}
536
- String recKey = Boolean . TRUE . equals ( oldJFR ) ? JCMD_JFR_DUMP_RECORDING : JCMD_JFR_STOP_NAME ;
540
+ String recKey = oldJFR ? JCMD_JFR_DUMP_RECORDING : JCMD_JFR_STOP_NAME ;
537
541
for (Long recording : jfrCheck ()) {
538
542
Map <String ,Object > pars = Collections .singletonMap (recKey , recording );
539
543
executeJCmd (JCMD_JFR_STOP , pars );
@@ -558,11 +562,28 @@ private String getJfrCheck() {
558
562
return executeJCmd (JCMD_JFR_CHECK , EMPTY_PARS );
559
563
}
560
564
565
+ private boolean checkForOldJFR () {
566
+ String ret = getJCmdHelp (JCMD_JFR_CHECK );
567
+
568
+ if (ret != null ) {
569
+ int options = ret .indexOf (JCMD_JFR_CHECK_HELP_OPTIONS_ID );
570
+ int recording = ret .indexOf (JCMD_JFR_CHECK_HELP_RECORDING_ID );
571
+
572
+ return options != -1 && options < recording ;
573
+ }
574
+ return false ;
575
+ }
576
+
561
577
private boolean unlockCommercialFeature () {
562
578
String ret = executeJCmd (JCMD_UNLOCK_CF );
563
579
return ret .contains (JCMD_CF_ID );
564
580
}
565
581
582
+ private String getJCmdHelp (String command ) {
583
+ Map pars = Collections .singletonMap (command , null );
584
+ return executeJCmd (JCMD_HELP , pars );
585
+ }
586
+
566
587
private String executeJCmd (String command ) {
567
588
return executeJCmd (command , Collections .EMPTY_MAP );
568
589
}
0 commit comments