Skip to content

Commit d300bb5

Browse files
authored
Merge pull request #12 from Nuix/9.2_refactor
9.2 refactor
2 parents d13b38e + 8da6509 commit d300bb5

17 files changed

Lines changed: 286 additions & 283 deletions

Java/src/main/java/com/nuix/javaenginesimple/EngineWrapper.java

Lines changed: 67 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@
33
import java.io.File;
44
import java.util.HashMap;
55
import java.util.Map;
6+
import java.util.Optional;
67
import java.util.function.Consumer;
8+
import java.util.stream.Stream;
79

8-
import org.apache.log4j.Logger;
10+
import org.apache.logging.log4j.LogManager;
11+
import org.apache.logging.log4j.Logger;
12+
import org.apache.logging.log4j.core.LoggerContext;
13+
import org.apache.logging.log4j.core.appender.ConsoleAppender;
14+
import org.apache.logging.log4j.core.layout.PatternLayout;
915

1016
import nuix.Utilities;
1117
import nuix.engine.AvailableLicence;
@@ -27,29 +33,47 @@
2733
*
2834
*/
2935
public class EngineWrapper implements AutoCloseable {
30-
// Obtain a logger instance for this class
31-
private final static Logger logger = Logger.getLogger("EngineWrapper");
32-
3336
private static GlobalContainer container = null;
37+
private static boolean loggingInitHasBeenPerformed = false;
3438

3539
private File nuixBaseDirectory = null;
3640
private Engine engine = null;
37-
3841
private Thread shutdownHook = null;
39-
40-
// We will use this while iterating licenses to determine which one to acquire.
41-
// By default this filter accepts any license.
42-
private LicenseFilter licenseFilter = new LicenseFilter();
43-
42+
private LicenseFilter licenseFilter = null;
4443
private CertificateTrustCallback certificateTrustCallback = null;
4544

45+
public Logger logger = null;
46+
4647
/***
4748
* Creates a new instance running against the specified engine release.
4849
* @param nuixBaseDirectory Base directory of the target engine release.
50+
* @param logDirectory Where logs for this sessions should be written to
4951
*/
50-
public EngineWrapper(File nuixBaseDirectory){
52+
public EngineWrapper(File nuixBaseDirectory, String logDirectory){
5153
this.nuixBaseDirectory = nuixBaseDirectory;
5254

55+
// Lets only initialize the logging stuff the first time
56+
if(!loggingInitHasBeenPerformed) {
57+
System.getProperties().put("nuix.logdir", logDirectory);
58+
59+
// Use Log4j2 config YAML from engine base directory
60+
File log4jConfigFile = new File(nuixBaseDirectory,"config/log4j2.yml");
61+
System.setProperty("log4j.configurationFile",log4jConfigFile.getAbsolutePath());
62+
logger = LogManager.getLogger("EngineWrapper");
63+
64+
// Register our own console appender that writes more than just fatal errors
65+
PatternLayout layout = PatternLayout.newBuilder().withPattern("%d{yyyy-MM-dd HH:mm:ss.SSS Z} [%t] %r %-5p %c - %m%n").build();
66+
ConsoleAppender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
67+
appender.start();
68+
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
69+
ctx.getRootLogger().addAppender(appender);
70+
ctx.updateLoggers();
71+
72+
loggingInitHasBeenPerformed = true;
73+
}
74+
75+
licenseFilter = new LicenseFilter();
76+
5377
// We want to set the System property "nuix.libdir" so that when the engine spins up worker processes,
5478
// that it can specify the "lib" directory properly to the workers. Without this the engine will instead
5579
// attempt to specify an absolute path to each of the JARs, which can cause the command used to start the
@@ -71,9 +95,10 @@ public EngineWrapper(File nuixBaseDirectory){
7195
/***
7296
* Creates a new instance running against the specified engine release.
7397
* @param nuixBaseDirectory Base directory of the target engine release.
98+
* @param logDirectory Where logs for this sessions should be written to
7499
*/
75-
public EngineWrapper(String nuixBaseDirectory){
76-
this(new File(nuixBaseDirectory));
100+
public EngineWrapper(String nuixBaseDirectory, String logDirectory){
101+
this(new File(nuixBaseDirectory), logDirectory);
77102
}
78103

79104
/***
@@ -113,10 +138,6 @@ public void withDongleLicense(Consumer<Utilities> consumer) throws Exception{
113138
Utilities utilities = engine.getUtilities();
114139
ThirdPartyDependencyChecker.logAllDependencyInfo(utilities);
115140

116-
// Setup our shutdown hook in case user terminates before consumer returns
117-
logger.info("Adding shutdown hook for EngineWrapper::close");
118-
Runtime.getRuntime().addShutdownHook(shutdownHook);
119-
120141
logger.info("License was obtained, providing Utilities object to consumer...");
121142
consumer.accept(utilities);
122143
}
@@ -201,7 +222,7 @@ public void withServerLicense(final String server, final String userName, final
201222

202223
logger.info("Specifying credentials to use with license server...");
203224
engine.whenAskedForCredentials(new CredentialsCallback() {
204-
Logger logger = Logger.getLogger("CredentialCallback");
225+
Logger logger = LogManager.getLogger("CredentialCallback");
205226
public void execute(CredentialsCallbackInfo info) {
206227
logger.info(String.format("Providing credentials for %s to license server %s...", userName,info.getAddress().getHostName()));
207228
info.setUsername(userName);
@@ -222,11 +243,7 @@ public void execute(CredentialsCallbackInfo info) {
222243
if(licenseObtained){
223244
Utilities utilities = engine.getUtilities();
224245
ThirdPartyDependencyChecker.logAllDependencyInfo(utilities);
225-
226-
// Setup our shutdown hook in case user terminates before consumer returns
227-
logger.info("Adding shutdown hook for EngineWrapper::close");
228-
Runtime.getRuntime().addShutdownHook(shutdownHook);
229-
246+
230247
logger.info("License was obtained, providing Utilities object to consumer...");
231248
consumer.accept(utilities);
232249
} else {
@@ -296,7 +313,7 @@ public void withCloudLicense(final String userName, final String password, Consu
296313

297314
logger.info("Specifying credentials to use with cloud license server...");
298315
engine.whenAskedForCredentials(new CredentialsCallback() {
299-
Logger logger = Logger.getLogger("CredentialCallback");
316+
Logger logger = LogManager.getLogger("CredentialCallback");
300317
public void execute(CredentialsCallbackInfo info) {
301318
logger.info(String.format("Providing credentials for %s to cloud license server %s...", userName,info.getAddress().getHostName()));
302319
info.setUsername(userName);
@@ -317,10 +334,6 @@ public void execute(CredentialsCallbackInfo info) {
317334
if(licenseObtained){
318335
Utilities utilities = engine.getUtilities();
319336
ThirdPartyDependencyChecker.logAllDependencyInfo(utilities);
320-
321-
// Setup our shutdown hook in case user terminates before consumer returns
322-
logger.info("Adding shutdown hook for EngineWrapper::close");
323-
Runtime.getRuntime().addShutdownHook(shutdownHook);
324337

325338
logger.info("License was obtained, providing Utilities object to consumer...");
326339
consumer.accept(utilities);
@@ -362,45 +375,25 @@ private boolean obtainLicense(Map<String,Object> licenseOptions){
362375
logger.info(String.format("\t%s: %s",entry.getKey(),entry.getValue()));
363376
}
364377

365-
Iterable<AvailableLicence> licences = licensor.findAvailableLicences(licenseOptions);
366-
367-
logger.info("Iterating available licences...");
368-
for(AvailableLicence license : licences) {
369-
logger.info(LicenseFeaturesLogger.summarizeLicense(license));
370-
}
371-
372-
boolean licenceObtained = false;
373-
374378
logger.info("Finding first license which meets filter requirements...");
375-
for(AvailableLicence license : licences) {
376-
logger.info("\t Count: " + license.getCount());
377-
logger.info("\t Workers: " + license.getWorkers());
378-
logger.info("\t Short Name: " + license.getShortName());
379-
logger.info("\t Type: " + license.getSource().getType());
380-
logger.info("\t ID: " + license.getSource().getLocation());
381-
logger.info("\t Description: " + license.getDescription());
382-
LicenseFeaturesLogger.logFeaturesOfLicense(license);
383-
384-
if(licenseFilter.isValid(license)) {
385-
if(license.canChooseWorkers()) {
386-
logger.info(">>>> Acquiring this licence with "+licenseFilter.getMinWorkers()+" workers");
387-
int targetWorkerCount = licenseFilter.getMinWorkers();
388-
if(targetWorkerCount < 1) { targetWorkerCount = 2; }
389-
Map<String,Object> acquireSettings = new HashMap<String,Object>();
390-
acquireSettings.put("workerCount", targetWorkerCount);
391-
license.acquire(acquireSettings);
392-
licenceObtained = true;
393-
} else {
394-
logger.info(">>>> Acquiring this licence");
395-
license.acquire();
396-
licenceObtained = true;
397-
}
398-
399-
break;
379+
Stream<AvailableLicence> licences = licensor.findAvailableLicencesStream(licenseOptions);
380+
boolean licenceObtained = false;
381+
Optional<AvailableLicence> possiblyFoundLicense = licences.filter(availableLicence -> licenseFilter.isValid(availableLicence)).findFirst();
382+
if(possiblyFoundLicense.isEmpty() == false) {
383+
AvailableLicence foundLicense = possiblyFoundLicense.get();
384+
logger.info(">>>> Acquiring following license: "+LicenseFeaturesLogger.summarizeLicense(foundLicense));
385+
if(foundLicense.canChooseWorkers()) {
386+
int targetWorkerCount = licenseFilter.getMinWorkers();
387+
if(targetWorkerCount < 1) { targetWorkerCount = 2; }
388+
Map<String,Object> acquireSettings = new HashMap<String,Object>();
389+
acquireSettings.put("workerCount", targetWorkerCount);
390+
foundLicense.acquire(acquireSettings);
400391
} else {
401-
logger.info("<<<< Ignoring this license, does not meet requirements of license filter");
402-
continue;
392+
foundLicense.acquire();
403393
}
394+
licenceObtained = true;
395+
} else {
396+
logger.warn("!!!! No license found that matches "+licenseFilter.toString());
404397
}
405398

406399
return licenceObtained;
@@ -426,8 +419,11 @@ private void configureAndBuildEngine(){
426419

427420
//Obtain an engine instance
428421
engine = container.newEngine(engineConfiguration);
429-
430422
logger.info("Obtained Engine instance v"+engine.getVersion());
423+
424+
// Setup our shutdown hook in case user terminates before consumer returns
425+
logger.info("Adding shutdown hook for EngineWrapper::close");
426+
Runtime.getRuntime().addShutdownHook(shutdownHook);
431427
}
432428

433429
/***
@@ -524,8 +520,11 @@ public void close() throws Exception {
524520
engine.close();
525521
}
526522

527-
// Remove our shutdown hook since engine has now been closed
528-
logger.info("Removing shutdown hook to EngineWrapper::close");
529-
Runtime.getRuntime().removeShutdownHook(shutdownHook);
523+
if(shutdownHook != null) {
524+
// Remove our shutdown hook since engine has now been closed
525+
logger.info("Removing shutdown hook to EngineWrapper::close");
526+
Runtime.getRuntime().removeShutdownHook(shutdownHook);
527+
shutdownHook = null;
528+
}
530529
}
531530
}

Java/src/main/java/com/nuix/javaenginesimple/LicenseFeaturesLogger.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import java.util.ArrayList;
55
import java.util.StringJoiner;
66

7-
import org.apache.log4j.Logger;
7+
import org.apache.logging.log4j.LogManager;
8+
import org.apache.logging.log4j.Logger;
89

910
import nuix.LicenceProperties;
1011
import nuix.engine.AvailableLicence;
@@ -16,7 +17,7 @@
1617
*/
1718
public class LicenseFeaturesLogger {
1819
// Obtain a logger instance for this class
19-
private final static Logger logger = Logger.getLogger("LicenseFeatures");
20+
private final static Logger logger = LogManager.getLogger("LicenseFeatures");
2021

2122
// List of license features
2223
// List generated from 7.6 license profiles documentation found here:

Java/src/main/java/com/nuix/javaenginesimple/LicenseFilter.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import java.util.ArrayList;
44
import java.util.List;
55

6-
import org.apache.log4j.Logger;
6+
import org.apache.logging.log4j.LogManager;
7+
import org.apache.logging.log4j.Logger;
78

89
import nuix.engine.AvailableLicence;
910

@@ -15,7 +16,7 @@
1516
*/
1617
public class LicenseFilter {
1718
// Obtain a logger instance for this class
18-
private final static Logger logger = Logger.getLogger("LicenseFilter");
19+
private final static Logger logger = LogManager.getLogger("LicenseFilter");
1920

2021
private int minWorkers = 0;
2122
private int maxWorkers = 0;
@@ -176,4 +177,10 @@ public void clearRequiredFeatures() {
176177
}
177178
requiredFeatures.clear();
178179
}
180+
181+
@Override
182+
public String toString() {
183+
return "LicenseFilter [minWorkers=" + minWorkers + ", maxWorkers=" + maxWorkers + ", name=" + name
184+
+ ", requiredFeatures=" + requiredFeatures + "]";
185+
}
179186
}

Java/src/main/java/com/nuix/javaenginesimple/NuixDiagnostics.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,24 @@
1010
import javax.management.MBeanServerFactory;
1111
import javax.management.ObjectName;
1212

13-
import org.apache.log4j.Logger;
13+
import org.apache.logging.log4j.Logger;
14+
import org.apache.logging.log4j.LogManager;
1415
import org.joda.time.DateTime;
1516

1617
public class NuixDiagnostics {
1718
// Obtain a logger instance for this class
18-
private final static Logger logger = Logger.getLogger(NuixDiagnostics.class);
19+
private final static Logger logger = LogManager.getLogger(NuixDiagnostics.class);
1920

20-
public static void saveDiagnostics(File directory){
21+
public static void saveDiagnosticsToFile(File zipFile){
2122
List<MBeanServer> beanServers = new ArrayList<MBeanServer>();
2223
beanServers.add(ManagementFactory.getPlatformMBeanServer());
2324
beanServers.addAll(MBeanServerFactory.findMBeanServer(null));
2425
for (MBeanServer mBeanServer : beanServers) {
2526
Set<ObjectName> objectNames = mBeanServer.queryNames(null, null);
2627
for (ObjectName beanName : objectNames) {
2728
if(beanName.toString().contains("DiagnosticsControl")){
28-
directory.mkdirs();
29-
DateTime timeStamp = DateTime.now();
30-
String timeStampString = timeStamp.toString("yyyyMMddHHmmss");
31-
File zipFile = new File(directory,"NuixEngineDiagnostics-"+timeStampString+".zip");
29+
zipFile.mkdirs();
30+
3231
try {
3332
mBeanServer.invoke(beanName,"generateDiagnostics",new Object[] {zipFile.getPath()},new String[] {"java.lang.String"});
3433
return;
@@ -40,5 +39,16 @@ public static void saveDiagnostics(File directory){
4039
}
4140
}
4241

43-
public static void saveDiagnostics(String directory) { saveDiagnostics(new File(directory)); }
42+
public static void saveDiagnosticsToFile(String zipFile) { saveDiagnosticsToFile(new File(zipFile)); }
43+
44+
public static void saveDiagnosticsToDirectory(File directory) {
45+
DateTime timeStamp = DateTime.now();
46+
String timeStampString = timeStamp.toString("yyyyMMddHHmmss");
47+
File zipFile = new File(directory,"NuixEngineDiagnostics-"+timeStampString+".zip");
48+
saveDiagnosticsToFile(zipFile);
49+
}
50+
51+
public static void saveDiagnosticsToDirectory(String directory) {
52+
saveDiagnosticsToDirectory(new File(directory));
53+
}
4454
}

Java/src/main/java/com/nuix/javaenginesimple/NuixVersion.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,7 @@
33
import java.util.regex.Pattern;
44

55
/***
6-
* Assists in representing a Nuix version in object form to assist with comparing two versions. This allows for things such as
7-
* only executing chunks of code if the version meets a requirement.<br>
8-
* Ruby example:
9-
* <pre>
10-
* {@code
11-
* current_version = NuixVersion.new(NUIX_VERSION)
12-
* if current_version.isLessThan("7.8.0.10")
13-
* puts "Sorry your version of Nuix is below the minimum required version of 7.8.0.10"
14-
* exit 1
15-
* end
16-
* }
17-
* </pre>
6+
* Provides a wrapper around Nuix version string that allows for comparison of versions.
187
* @author Jason Wells
198
*
209
*/

Java/src/main/java/com/nuix/javaenginesimple/ThirdPartyDependencyChecker.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import java.util.List;
44

5-
import org.apache.log4j.Logger;
5+
import org.apache.logging.log4j.LogManager;
6+
import org.apache.logging.log4j.Logger;
67

78
import nuix.ThirdPartyDependency;
89
import nuix.ThirdPartyDependencyStatus;
@@ -15,7 +16,7 @@
1516
*/
1617
public class ThirdPartyDependencyChecker {
1718
// Obtain a logger instance for this class
18-
private final static Logger logger = Logger.getLogger("ThirdPartyDependencyChecker");
19+
private final static Logger logger = LogManager.getLogger("ThirdPartyDependencyChecker");
1920

2021
/***
2122
* Logs information about all Nuix third party dependencies

0 commit comments

Comments
 (0)