diff options
13 files changed, 230 insertions, 451 deletions
diff --git a/examples/examples-pcvs/src/test/resources/META-INF/persistence.xml b/examples/examples-pcvs/src/test/resources/META-INF/persistence.xml index 4dcba14b7..632ae0fca 100644 --- a/examples/examples-pcvs/src/test/resources/META-INF/persistence.xml +++ b/examples/examples-pcvs/src/test/resources/META-INF/persistence.xml @@ -2,19 +2,20 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2016-2018 Ericsson. All rights reserved. + Modifications Copyright (C) 2019-2021 Nordix Foundation. ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + SPDX-License-Identifier: Apache-2.0 ============LICENSE_END========================================================= --> @@ -58,7 +59,7 @@ <properties> <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:apex_test" /> - <property name="javax.persistence.target-database" value="Derby" /> + <property name="eclipselink.target-database" value="Derby" /> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> diff --git a/packages/apex-pdp-package-full/src/main/resources/META-INF/persistence.xml b/packages/apex-pdp-package-full/src/main/resources/META-INF/persistence.xml index 670acb5f0..61f5409bd 100644 --- a/packages/apex-pdp-package-full/src/main/resources/META-INF/persistence.xml +++ b/packages/apex-pdp-package-full/src/main/resources/META-INF/persistence.xml @@ -2,6 +2,7 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2016-2018 Ericsson. All rights reserved. + Modifications Copyright (C) 2019-2021 Nordix Foundation. ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -65,11 +66,11 @@ <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> - <property name="javax.persistence.target-database" value="PostgreSQL" /> - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/apex" /> - <property name="javax.persistence.jdbc.user" value="postgres" /> - <property name="javax.persistence.jdbc.password" value="postgres" /> + <property name="eclipselink.target-database" value="MySQL" /> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:5432/apex" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> <property name="eclipselink.ddl-generation" value="create-or-extend-tables" /> <property name="eclipselink.logging.level" value="INFO" /> @@ -122,11 +123,11 @@ <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> - <property name="javax.persistence.target-database" value="PostgreSQL" /> - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/apex_test" /> - <property name="javax.persistence.jdbc.user" value="postgres" /> - <property name="javax.persistence.jdbc.password" value="postgres" /> + <property name="eclipselink.target-database" value="MySQL" /> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:5432/apex_test" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> <property name="eclipselink.logging.level" value="INFO" /> @@ -177,13 +178,13 @@ <class>org.onap.policy.apex.domains.vpn.concepts.VPNProblem</class> <properties> - <property name="javax.persistence.target-database" value="PostgreSQL" /> - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/apex" /> - <property name="javax.persistence.jdbc.user" value="postgres" /> - <property name="javax.persistence.jdbc.password" value="postgres" /> + <property name="eclipselink.target-database" value="MySQL" /> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:5432/apex" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> - <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL94Dialect" /> + <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" /> @@ -240,12 +241,12 @@ <class>org.onap.policy.apex.domains.vpn.concepts.VPNProblem</class> <properties> - <property name="javax.persistence.target-database" value="PostgreSQL" /> - <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> - <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/apex_test" /> - <property name="javax.persistence.jdbc.user" value="postgres" /> - <property name="javax.persistence.jdbc.password" value="postgres" /> - <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL94Dialect" /> + <property name="eclipselink.target-database" value="MySQL" /> + <property name="javax.persistence.jdbc.driver" value="org.mariadb.jdbc.Driver" /> + <property name="javax.persistence.jdbc.url" value="jdbc:mariadb://localhost:5432/apex_test" /> + <property name="javax.persistence.jdbc.user" value="policy" /> + <property name="javax.persistence.jdbc.password" value="P01icY" /> + <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" /> <property name="hibernate.hbm2ddl.auto" value="create" /> <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" /> diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java index 31131b465..0d7560f89 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArguments.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modification Copyright (C) 2020 Nordix Foundation. + * Modification Copyright (C) 2020-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,21 +22,19 @@ package org.onap.policy.apex.service.engine.main; import java.io.File; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.net.URL; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.onap.policy.apex.model.basicmodel.concepts.ApexException; import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException; -import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.common.utils.cmd.CommandLineArgumentsHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; +import org.onap.policy.common.utils.resources.MessageConstants; import org.onap.policy.common.utils.validation.ParameterValidationUtils; /** @@ -45,30 +43,34 @@ import org.onap.policy.common.utils.validation.ParameterValidationUtils; * * @author Liam Fallon (liam.fallon@ericsson.com) */ -public class ApexCommandLineArguments { +public class ApexCommandLineArguments extends CommandLineArgumentsHandler { // A system property holding the root directory for relative paths in the // configuration file public static final String APEX_RELATIVE_FILE_ROOT = "APEX_RELATIVE_FILE_ROOT"; - - // Recurring string constants - private static final String FILE_PREAMBLE = " file \""; private static final String RELATIVE_FILE_ROOT = "relative file root \""; - private static final int HELP_LINE_LENGTH = 120; - - // Apache Commons CLI options - private final Options options; @Getter @Setter private String toscaPolicyFilePath = null; + + @Getter private String relativeFileRoot = null; + private CommandLine cmd = null; + /** * Construct the options for the CLI editor. */ public ApexCommandLineArguments() { + super(ApexMain.class.getName(), MessageConstants.POLICY_APEX_PDP, apexCustomOptions()); + } + + /** + * Builds Apex custom options. + */ + private static Options apexCustomOptions() { //@formatter:off - options = new Options(); + Options options = new Options(); options.addOption(Option.builder("h") .longOpt("help") .desc("outputs the usage of this command") @@ -76,25 +78,26 @@ public class ApexCommandLineArguments { .type(Boolean.class) .build()); options.addOption(Option.builder("v") - .longOpt("version") - .desc("outputs the version of Apex") - .required(false) - .type(Boolean.class) - .build()); + .longOpt("version") + .desc("outputs the version of Apex") + .required(false) + .type(Boolean.class) + .build()); options.addOption(Option.builder("rfr") - .longOpt("relative-file-root") - .desc("the root file path for relative file paths specified in the Apex configuration file, " - + "defaults to the current directory from where Apex is executed") - .hasArg() - .argName(APEX_RELATIVE_FILE_ROOT) - .required(false) - .type(String.class) - .build()); + .longOpt("relative-file-root") + .desc("the root file path for relative file paths specified in the Apex configuration file, " + + "defaults to the current directory from where Apex is executed") + .hasArg() + .argName(APEX_RELATIVE_FILE_ROOT) + .required(false) + .type(String.class) + .build()); options.addOption(Option.builder("p").longOpt("tosca-policy-file") .desc("the full path to the ToscaPolicy file to use.").hasArg().argName("TOSCA_POLICY_FILE") .required(false) .type(String.class).build()); //@formatter:on + return options; } /** @@ -109,106 +112,72 @@ public class ApexCommandLineArguments { // Parse the arguments try { parse(args); - } catch (final ApexException e) { + } catch (final CommandLineException e) { throw new ApexRuntimeException("parse error on Apex parameters", e); } } - /** - * Parse the command line options. - * - * @param args The command line arguments - * @return a string with a message for help and version, or null if there is no - * message - * @throws ApexException on command argument errors - */ - public String parse(final String[] args) throws ApexException { + @Override + public String parse(final String[] args) throws CommandLineException { // Clear all our arguments setToscaPolicyFilePath(null); - CommandLine commandLine = null; + setRelativeFileRoot(null); + try { - commandLine = new DefaultParser().parse(options, args); + cmd = new DefaultParser().parse(apexCustomOptions(), args); } catch (final ParseException e) { - throw new ApexException("invalid command line arguments specified : " + e.getMessage()); + throw new CommandLineException("invalid command line arguments specified", e); } // Arguments left over after Commons CLI does its stuff - final String[] remainingArgs = commandLine.getArgs(); + final String[] remainingArgs = cmd.getArgs(); - if (remainingArgs.length > 0 && commandLine.hasOption('p') || remainingArgs.length > 1) { - throw new ApexException("too many command line arguments specified : " + Arrays.toString(args)); + if (remainingArgs.length > 0 && cmd.hasOption('p') || remainingArgs.length > 1) { + throw new CommandLineException("too many command line arguments specified: " + Arrays.toString(args)); } if (remainingArgs.length == 1) { toscaPolicyFilePath = remainingArgs[0]; } - if (commandLine.hasOption('h')) { - return help(ApexMain.class.getName()); + if (cmd.hasOption('h')) { + return help(); } - if (commandLine.hasOption('v')) { + if (cmd.hasOption('v')) { return version(); } - if (commandLine.hasOption("rfr")) { - setRelativeFileRoot(commandLine.getOptionValue("rfr")); - } else { - setRelativeFileRoot(null); + if (cmd.hasOption("rfr")) { + setRelativeFileRoot(cmd.getOptionValue("rfr")); } - if (commandLine.hasOption('p')) { - toscaPolicyFilePath = commandLine.getOptionValue('p'); + if (cmd.hasOption('p')) { + setToscaPolicyFilePath(cmd.getOptionValue('p')); } return null; } + @Override + public CommandLine getCommandLine() { + return this.cmd; + } + /** * Validate the command line options. * * @throws ApexException on command argument validation errors */ - public void validate() throws ApexException { - validateReadableFile("Tosca Policy", toscaPolicyFilePath); + public void validateInputFiles() throws ApexException { + try { + validateReadableFile("Tosca Policy", toscaPolicyFilePath); + } catch (CommandLineException e) { + throw new ApexException(e.getMessage()); + } validateRelativeFileRoot(); } /** - * Print version information for Apex. - * - * @return the version string - */ - public String version() { - return ResourceUtils.getResourceAsString("version.txt"); - } - - /** - * Print help information for Apex. - * - * @param mainClassName the main class name - * @return the help string - */ - public String help(final String mainClassName) { - final StringWriter stringWriter = new StringWriter(); - final PrintWriter stringPrintWriter = new PrintWriter(stringWriter); - - new HelpFormatter().printHelp(stringPrintWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options", - options, 0, 0, ""); - - return stringWriter.toString(); - } - - /** - * Gets the root file path for relative file paths in the configuration file. - * - * @return the root file path - */ - public String getRelativeFileRoot() { - return relativeFileRoot; - } - - - /** * Sets the root file path for relative file paths in the configuration file. * * @param relativeFileRoot the configuration file path @@ -231,37 +200,6 @@ public class ApexCommandLineArguments { } /** - * Validate readable file. - * - * @param fileTag the file tag - * @param fileName the file name - * @throws ApexException the apex exception - */ - private void validateReadableFile(final String fileTag, final String fileName) throws ApexException { - if (fileName == null || fileName.length() == 0) { - throw new ApexException(fileTag + " file was not specified as an argument"); - } - - // The file name can refer to a resource on the local file system or on the - // class path - final URL fileUrl = ResourceUtils.getUrl4Resource(fileName); - if (fileUrl == null) { - throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" does not exist"); - } - - final File theFile = new File(fileUrl.getPath()); - if (!theFile.exists()) { - throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" does not exist"); - } - if (!theFile.isFile()) { - throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" is not a normal file"); - } - if (!theFile.canRead()) { - throw new ApexException(fileTag + FILE_PREAMBLE + fileName + "\" is ureadable"); - } - } - - /** * Validate the relative file root. */ private void validateRelativeFileRoot() throws ApexException { diff --git a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java index 3e9072dd4..9757c57e8 100644 --- a/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java +++ b/services/services-engine/src/main/java/org/onap/policy/apex/service/engine/main/ApexMain.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modification Copyright (C) 2019-2021 Nordix Foundation. + * Modifications Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2020-2021 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -38,6 +38,7 @@ import org.onap.policy.apex.service.parameters.ApexParameters; import org.onap.policy.apex.service.parameters.engineservice.EngineServiceParameters; import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerParameters; import org.onap.policy.common.parameters.ParameterService; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.slf4j.ext.XLogger; import org.slf4j.ext.XLoggerFactory; @@ -110,8 +111,8 @@ public class ApexMain { } // Validate that the arguments are sane - arguments.validate(); - } catch (final ApexException e) { + arguments.validateInputFiles(); + } catch (final ApexException | CommandLineException e) { LOGGER.error("Arguments validation failed.", e); throw new ApexException("Arguments validation failed.", e); } diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java index 09663c0bf..b5b68c9fc 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexCommandLineArgumentsTest.java @@ -1,7 +1,7 @@ /*- * ============LICENSE_START======================================================= * Copyright (C) 2016-2018 Ericsson. All rights reserved. - * Modifications Copyright (C) 2020 Nordix Foundation + * Modifications Copyright (C) 2020-2021 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -22,12 +22,14 @@ package org.onap.policy.apex.service.engine.main; +import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertTrue; import org.junit.After; import org.junit.Test; import org.onap.policy.apex.model.basicmodel.concepts.ApexException; +import org.onap.policy.common.utils.cmd.CommandLineException; /** * Test Apex Command Line Arguments. @@ -41,14 +43,9 @@ public class ApexCommandLineArgumentsTest { } @Test - public void testCommandLineArguments() throws ApexException { + public void testCommandLineArguments() throws ApexException, CommandLineException { final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); - final String[] args00 = {""}; - apexArguments.parse(args00); - assertThatThrownBy(() -> apexArguments.validate()) - .hasMessage("Tosca Policy file was not specified as an argument"); - final String[] args01 = {"-h"}; final String result = apexArguments.parse(args01); assertTrue(result.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]")); @@ -65,70 +62,80 @@ public class ApexCommandLineArgumentsTest { final String result04 = apexArguments.parse(args04); assertTrue(result04.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]")); - final String[] args05 = {"-a"}; - assertThatThrownBy(() -> apexArguments.parse(args05)) - .hasMessage("invalid command line arguments specified : Unrecognized option: -a"); - final String[] args06 = {"-p", "goodbye", "-h", "-v"}; final String result06 = apexArguments.parse(args06); assertTrue(result06.startsWith("usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]")); + } + + @Test + public void testCommandLineArgumentsExceptions() throws ApexException, CommandLineException { + final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); + + final String[] args00 = {""}; + apexArguments.parse(args00); + assertThatThrownBy(() -> apexArguments.validateInputFiles()) + .hasMessage("Tosca Policy file was not specified as an argument"); + + final String[] args05 = {"-a"}; + assertThatThrownBy(() -> apexArguments.parse(args05)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Unrecognized option: -a"); final String[] args07 = {"-p", "goodbye", "-h", "aaa"}; assertThatThrownBy(() -> apexArguments.parse(args07)) - .hasMessage("too many command line arguments specified : [-p, goodbye, -h, aaa]"); + .hasMessage("too many command line arguments specified: [-p, goodbye, -h, aaa]"); + } + + @Test + public void testCommandLineFileParameters() throws ApexException, CommandLineException { + final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); + + final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json"}; + apexArguments.parse(args02); + assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException(); } @Test - public void testCommandLineFileParameters() throws ApexException { + public void testCommandLineFileParametersExceptions() throws ApexException, CommandLineException { final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); final String[] args00 = {"-c", "zooby"}; - assertThatThrownBy(() -> apexArguments.parse(args00)) - .hasMessage("invalid command line arguments specified : Unrecognized option: -c"); + assertThatThrownBy(() -> apexArguments.parse(args00)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Unrecognized option: -c"); final String[] args01 = {"-p"}; - assertThatThrownBy(() -> apexArguments.parse(args01)) - .hasMessage("invalid command line arguments specified : Missing argument for option: p"); - - final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json"}; - apexArguments.parse(args02); - apexArguments.validate(); + assertThatThrownBy(() -> apexArguments.parse(args01)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Missing argument for option: p"); final String[] args03 = {"-p", "src/test/resources/parameters/goodParams.json", "-m", "zooby"}; - assertThatThrownBy(() -> apexArguments.parse(args03)) - .hasMessage("invalid command line arguments specified : Unrecognized option: -m"); - - final String[] args06 = {"-p", "src/test/resources/parameters/goodParams.json"}; - apexArguments.parse(args06); - apexArguments.validate(); + assertThatThrownBy(() -> apexArguments.parse(args03)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Unrecognized option: -m"); } @Test - public void testCommandLineRelativeRootParameters() throws ApexException { + public void testCommandLineRelativeRootParameters() throws ApexException, CommandLineException { final ApexCommandLineArguments apexArguments = new ApexCommandLineArguments(); final String[] args00 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "zooby"}; apexArguments.parse(args00); - assertThatThrownBy(() -> apexArguments.validate()) - .hasMessageContaining("zooby\" does not exist or is not a directory"); + assertThatThrownBy(() -> apexArguments.validateInputFiles()) + .hasMessageContaining("zooby\" does not exist or is not a directory"); final String[] args01 = {"-rfr"}; - assertThatThrownBy(() -> apexArguments.parse(args01)) - .hasMessage("invalid command line arguments specified : Missing argument for option: rfr"); + assertThatThrownBy(() -> apexArguments.parse(args01)).hasMessage("invalid command line arguments specified") + .hasRootCauseMessage("Missing argument for option: rfr"); final String[] args02 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "pom.xml"}; apexArguments.parse(args02); - assertThatThrownBy(() -> apexArguments.validate()) - .hasMessageContaining("pom.xml\" does not exist or is not a directory"); + assertThatThrownBy(() -> apexArguments.validateInputFiles()) + .hasMessageContaining("pom.xml\" does not exist or is not a directory"); final String[] args03 = {"-p", "src/test/resources/parameters/goodParams.json", "-rfr", "target"}; apexArguments.parse(args03); - apexArguments.validate(); + assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException(); - final String[] args04 = - {"-p", "src/test/resources/parameters/goodParamsRelative.json", "-rfr", "src/test/resources"}; + final String[] args04 = {"-p", "parameters/goodParamsRelative.json", "-rfr", "src/test/resources"}; apexArguments.parse(args04); - apexArguments.validate(); + assertThatCode(() -> apexArguments.validateInputFiles()).doesNotThrowAnyException(); } } diff --git a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java index 5764a5275..b7532aba2 100644 --- a/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java +++ b/services/services-engine/src/test/java/org/onap/policy/apex/service/engine/main/ApexMainTest.java @@ -89,7 +89,7 @@ public class ApexMainTest { apexMain1 = new ApexMain(args); await().atMost(200, TimeUnit.MILLISECONDS).until(() -> outContent.toString() - .contains("invalid command line arguments specified : Unrecognized option: -whee")); + .contains("invalid command line arguments specified")); assertNotNull(apexMain1); } diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java index cad2ffa72..dfc43e0ac 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterCommandLineArguments.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,72 +21,24 @@ package org.onap.policy.apex.services.onappf; -import java.io.File; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.net.URL; -import java.util.Arrays; -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.DefaultParser; -import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; -import org.apache.commons.cli.ParseException; -import org.onap.policy.apex.services.onappf.exception.ApexStarterException; import org.onap.policy.apex.services.onappf.exception.ApexStarterRunTimeException; -import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.common.utils.cmd.CommandLineArgumentsHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; /** * This class reads and handles command line parameters for the apex starter. * * @author Ajith Sreekumar (ajith.sreekumar@est.tech) */ -public class ApexStarterCommandLineArguments { - - private static final String FILE_MESSAGE_PREAMBLE = " file \""; - private static final int HELP_LINE_LENGTH = 120; - - private final Options options; - private String configurationFilePath = null; - private String propertyFilePath = null; +public class ApexStarterCommandLineArguments extends CommandLineArgumentsHandler { + private static final String APEX_COMPONENT = "policy apex starter"; /** * Construct the options for the CLI editor. */ public ApexStarterCommandLineArguments() { - //@formatter:off - options = new Options(); - options.addOption(Option.builder("h") - .longOpt("help") - .desc("outputs the usage of this command") - .required(false) - .type(Boolean.class) - .build()); - options.addOption(Option.builder("v") - .longOpt("version") - .desc("outputs the version of apex starter") - .required(false) - .type(Boolean.class) - .build()); - options.addOption(Option.builder("c") - .longOpt("config-file") - .desc("the full path to the configuration file to use, " - + "the configuration file must be a Json file containing the apex starter parameters") - .hasArg() - .argName("CONFIG_FILE") - .required(false) - .type(String.class) - .build()); - options.addOption(Option.builder("p") - .longOpt("property-file") - .desc("the full path to the topic property file to use, " - + "the property file contains the apex starter topic properties") - .hasArg() - .argName("PROP_FILE") - .required(false) - .type(String.class) - .build()); - //@formatter:on + super(ApexStarterMain.class.getName(), APEX_COMPONENT, apexPropertyFileOpt()); } /** @@ -95,203 +47,24 @@ public class ApexStarterCommandLineArguments { * @param args The command line arguments */ public ApexStarterCommandLineArguments(final String[] args) { - // Set up the options with the default constructor this(); - // Parse the arguments try { parse(args); - } catch (final ApexStarterException e) { + } catch (final CommandLineException e) { throw new ApexStarterRunTimeException("parse error on apex starter parameters", e); } } /** - * Parse the command line options. - * - * @param args The command line arguments - * @return a string with a message for help and version, or null if there is no message - * @throws ApexStarterException on command argument errors - */ - public String parse(final String[] args) throws ApexStarterException { - // Clear all our arguments - setConfigurationFilePath(null); - setPropertyFilePath(null); - - CommandLine commandLine = null; - try { - commandLine = new DefaultParser().parse(options, args); - } catch (final ParseException e) { - throw new ApexStarterException("invalid command line arguments specified : " + e.getMessage()); - } - - // Arguments left over after Commons CLI does its stuff - final String[] remainingArgs = commandLine.getArgs(); - - if (remainingArgs.length > 0 && commandLine.hasOption('c') || remainingArgs.length > 0) { - throw new ApexStarterException("too many command line arguments specified : " + Arrays.toString(args)); - } - - if (remainingArgs.length == 1) { - configurationFilePath = remainingArgs[0]; - } - - if (commandLine.hasOption('h')) { - return help(ApexStarterMain.class.getName()); - } - - if (commandLine.hasOption('v')) { - return version(); - } - - if (commandLine.hasOption('c')) { - setConfigurationFilePath(commandLine.getOptionValue('c')); - } - - if (commandLine.hasOption('p')) { - setPropertyFilePath(commandLine.getOptionValue('p')); - } - - return null; - } - - /** - * Validate the command line options. - * - * @throws ApexStarterException on command argument validation errors - */ - public void validate() throws ApexStarterException { - validateReadableFile("apex starter configuration", configurationFilePath); - } - - /** - * Print version information for apex starter. - * - * @return the version string - */ - public String version() { - return ResourceUtils.getResourceAsString("src/main/resources/version.txt"); - } - - /** - * Print help information for apex starter. - * - * @param mainClassName the main class name - * @return the help string - */ - public String help(final String mainClassName) { - final HelpFormatter helpFormatter = new HelpFormatter(); - final StringWriter stringWriter = new StringWriter(); - final PrintWriter printWriter = new PrintWriter(stringWriter); - - helpFormatter.printHelp(printWriter, HELP_LINE_LENGTH, mainClassName + " [options...]", "options", options, 0, - 0, ""); - - return stringWriter.toString(); - } - - /** - * Gets the configuration file path. - * - * @return the configuration file path - */ - public String getConfigurationFilePath() { - return configurationFilePath; - } - - /** - * Gets the full expanded configuration file path. - * - * @return the configuration file path - */ - public String getFullConfigurationFilePath() { - return ResourceUtils.getFilePath4Resource(getConfigurationFilePath()); - } - - /** - * Sets the configuration file path. - * - * @param configurationFilePath the configuration file path - */ - public void setConfigurationFilePath(final String configurationFilePath) { - this.configurationFilePath = configurationFilePath; - - } - - /** - * Check set configuration file path. + * Build the extra option property-file for ApexStarter. * - * @return true, if check set configuration file path + * @return the property-file option */ - public boolean checkSetConfigurationFilePath() { - return configurationFilePath != null && configurationFilePath.length() > 0; - } - - /** - * Gets the property file path. - * - * @return the property file path - */ - public String getPropertyFilePath() { - return propertyFilePath; - } - - /** - * Gets the full expanded property file path. - * - * @return the property file path - */ - public String getFullPropertyFilePath() { - return ResourceUtils.getFilePath4Resource(getPropertyFilePath()); - } - - /** - * Sets the property file path. - * - * @param propertyFilePath the property file path - */ - public void setPropertyFilePath(final String propertyFilePath) { - this.propertyFilePath = propertyFilePath; - - } - - /** - * Check set property file path. - * - * @return true, if check set property file path - */ - public boolean checkSetPropertyFilePath() { - return propertyFilePath != null && propertyFilePath.length() > 0; - } - - /** - * Validate readable file. - * - * @param fileTag the file tag - * @param fileName the file name - * @throws ApexStarterException on the file name passed as a parameter - */ - private void validateReadableFile(final String fileTag, final String fileName) throws ApexStarterException { - if (fileName == null || fileName.length() == 0) { - throw new ApexStarterException(fileTag + " file was not specified as an argument"); - } - - // The file name refers to a resource on the local file system - final URL fileUrl = ResourceUtils.getUrl4Resource(fileName); - if (fileUrl == null) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); - } - - final File theFile = new File(fileUrl.getPath()); - if (!theFile.exists()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" does not exist"); - } - if (!theFile.isFile()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is not a normal file"); - } - if (!theFile.canRead()) { - throw new ApexStarterException(fileTag + FILE_MESSAGE_PREAMBLE + fileName + "\" is ureadable"); - } + private static Option apexPropertyFileOpt() { + return Option.builder("p").longOpt("property-file") + .desc("the full path to the topic property file to use, " + + "the property file contains the policy apex starter properties") + .hasArg().argName("PROP_FILE").required(false).type(String.class).build(); } - } diff --git a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java index 7daa22846..c9362bcdd 100644 --- a/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java +++ b/services/services-onappf/src/main/java/org/onap/policy/apex/services/onappf/ApexStarterMain.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ @@ -28,6 +28,7 @@ import org.onap.policy.apex.services.onappf.exception.ApexStarterException; import org.onap.policy.apex.services.onappf.exception.ApexStarterRunTimeException; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.resources.MessageConstants; import org.onap.policy.common.utils.services.Registry; import org.slf4j.Logger; @@ -77,7 +78,7 @@ public class ApexStarterMain { // Start the activator activator.initialize(); - } catch (final ApexStarterException e) { + } catch (final ApexStarterException | CommandLineException e) { if (null != activator) { Registry.unregister(ApexStarterConstants.REG_APEX_STARTER_ACTIVATOR); } diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java new file mode 100644 index 000000000..e564d38e4 --- /dev/null +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/TestApexStarterCommandLineArguments.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.apex.services.onappf; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class TestApexStarterCommandLineArguments { + + /** + * Test method for {@link org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments + * #getPropertyFilePath()}. + * Assert custom option was added to options object from super. + */ + @Test + public void testCommandLineHasPropertyFileOption() { + String[] args = {"-p", "someFile.json"}; + ApexStarterCommandLineArguments sut = new ApexStarterCommandLineArguments(args); + assertEquals("someFile.json", sut.getPropertyFilePath()); + } + + /** + * Test method for {@link org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments#version()}. + * Assert method consults version.txt from Apex module. + */ + @Test + public void testVersion() { + String[] args = {"-v"}; + ApexStarterCommandLineArguments sut = new ApexStarterCommandLineArguments(args); + assertThat(sut.version()).startsWith("ONAP Policy Framework Apex Starter Service"); + } + +} diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java index 1d491ea03..b4308b8b9 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpStateChangeListener.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019-2020 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ @@ -45,6 +45,7 @@ import org.onap.policy.apex.services.onappf.handler.ApexEngineHandler; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.pdp.concepts.PdpStateChange; @@ -73,9 +74,10 @@ public class TestPdpStateChangeListener { * @throws ApexStarterException if some error occurs while starting up the apex starter * @throws FileNotFoundException if the file is missing * @throws IOException if IO exception occurs + * @throws CommandLineException if any parsing of args has errors */ @Before - public void setUp() throws ApexStarterException, FileNotFoundException, IOException { + public void setUp() throws ApexStarterException, FileNotFoundException, IOException, CommandLineException { pdpUpdateMessageListener = new PdpUpdateListener(); pdpStateChangeListener = new PdpStateChangeListener(); Registry.newRegistry(); diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java index d9b8fc09c..28e230ebb 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/comm/TestPdpUpdateListener.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. + * Copyright (C) 2019-2021 Nordix Foundation. * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. * ================================================================================ @@ -44,6 +44,7 @@ import org.onap.policy.apex.services.onappf.handler.PdpMessageHandler; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterGroup; import org.onap.policy.apex.services.onappf.parameters.ApexStarterParameterHandler; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.services.Registry; import org.onap.policy.models.pdp.concepts.PdpStateChange; @@ -72,9 +73,10 @@ public class TestPdpUpdateListener { * @throws ApexStarterException if some error occurs while starting up the apex starter * @throws FileNotFoundException if the file is missing * @throws IOException if IO exception occurs + * @throws CommandLineException if any parsing of args has errors */ @Before - public void setUp() throws ApexStarterException, FileNotFoundException, IOException { + public void setUp() throws ApexStarterException, FileNotFoundException, IOException, CommandLineException { Registry.newRegistry(); final String[] apexStarterConfigParameters = {"-c", "src/test/resources/ApexStarterConfigParametersNoop.json"}; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); diff --git a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java index d39cbecf0..dd424c15b 100644 --- a/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java +++ b/services/services-onappf/src/test/java/org/onap/policy/apex/services/onappf/parameters/TestApexStarterParameterHandler.java @@ -1,7 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2019 Nordix Foundation. - * Modifications Copyright (C) 2020 Nordix Foundation + * Copyright (C) 2019-2021 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +28,7 @@ import java.io.FileNotFoundException; import org.junit.Test; import org.onap.policy.apex.services.onappf.ApexStarterCommandLineArguments; import org.onap.policy.apex.services.onappf.exception.ApexStarterException; +import org.onap.policy.common.utils.cmd.CommandLineException; import org.onap.policy.common.utils.coder.CoderException; /** @@ -39,7 +39,7 @@ import org.onap.policy.common.utils.coder.CoderException; public class TestApexStarterParameterHandler { @Test - public void testParameterHandlerNoParameterFile() throws ApexStarterException { + public void testParameterHandlerNoParameterFile() throws ApexStarterException, CommandLineException { final String[] emptyArgumentString = { "-c", "src/test/resources/NoParametersFile.json" }; final ApexStarterCommandLineArguments emptyArguments = new ApexStarterCommandLineArguments(); @@ -51,7 +51,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerEmptyParameters() throws ApexStarterException { + public void testParameterHandlerEmptyParameters() throws ApexStarterException, CommandLineException { final String[] noArgumentString = { "-c", "src/test/resources/NoParameters.json" }; final ApexStarterCommandLineArguments noArguments = new ApexStarterCommandLineArguments(); @@ -62,7 +62,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerInvalidParameters() throws ApexStarterException { + public void testParameterHandlerInvalidParameters() throws ApexStarterException, CommandLineException { final String[] invalidArgumentString = { "-c", "src/test/resources/InvalidParameters.json" }; final ApexStarterCommandLineArguments invalidArguments = new ApexStarterCommandLineArguments(); @@ -74,7 +74,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testParameterHandlerNoParameters() throws ApexStarterException { + public void testParameterHandlerNoParameters() throws ApexStarterException, CommandLineException { final String[] noArgumentString = { "-c", "src/test/resources/EmptyConfigParameters.json" }; final ApexStarterCommandLineArguments noArguments = new ApexStarterCommandLineArguments(); @@ -85,7 +85,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterParameterGroup() throws ApexStarterException { + public void testApexStarterParameterGroup() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-c", "src/test/resources/ApexStarterConfigParameters.json" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); @@ -97,7 +97,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterParameterGroup_InvalidName() throws ApexStarterException { + public void testApexStarterParameterGroup_InvalidName() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-c", "src/test/resources/ApexStarterConfigParameters_InvalidName.json" }; @@ -110,7 +110,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterVersion() throws ApexStarterException { + public void testApexStarterVersion() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-v" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); final String version = arguments.parse(apexStarterConfigParameters); @@ -118,7 +118,7 @@ public class TestApexStarterParameterHandler { } @Test - public void testApexStarterHelp() throws ApexStarterException { + public void testApexStarterHelp() throws ApexStarterException, CommandLineException { final String[] apexStarterConfigParameters = { "-h" }; final ApexStarterCommandLineArguments arguments = new ApexStarterCommandLineArguments(); final String help = arguments.parse(apexStarterConfigParameters); diff --git a/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml b/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml index b6a9a9d1e..341c33e89 100644 --- a/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml +++ b/testsuites/integration/integration-context-test/src/test/resources/META-INF/persistence.xml @@ -2,20 +2,20 @@ <!-- ============LICENSE_START======================================================= Copyright (C) 2016-2018 Ericsson. All rights reserved. - Modifications Copyright (C) 2019 Nordix Foundation. + Modifications Copyright (C) 2019-2021 Nordix Foundation. ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 - + Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + SPDX-License-Identifier: Apache-2.0 ============LICENSE_END========================================================= --> @@ -40,7 +40,7 @@ <properties> <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:apex_test" /> - <property name="javax.persistence.target-database" value="Derby" /> + <property name="eclipselink.target-database" value="Derby" /> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> <property name="eclipselink.ddl-generation" value="drop-and-create-tables" /> |