--- /dev/null
+//
+// ============LICENSE_START=======================================================
+// Copyright (C) 2016-2018 Ericsson. All rights reserved.
+// ================================================================================
+// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
+// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
+//
+// SPDX-License-Identifier: CC-BY-4.0
+// ============LICENSE_END=========================================================
+//
+// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+//
+
+== Quick Guide: How to build APEX from source
+
+
+[IMPORTANT]
+.A Build needs Space
+====
+Building APEX requires approximately 2-3 GB of hard disc space, 1 GB for the actual build with full distribution and 1-2 GB for the downloaded dependencies
+====
+
+[IMPORTANT]
+.A Build requires Internet (for first build)
+====
+During the build, several (a lot) of Maven dependencies will be downloaded and stored in the configured local Maven repository.
+The first standard build (and any first specific build) requires Internet access to download those dependencies.
+====
+
+[IMPORTANT]
+.Building RPM distributions
+====
+RPM images are only build if the `rpm` package is installed (Unix).
+To install `rpm` run `sudo apt-get install rpm`, then build APEX.
+====
+
+
+
+=== Standard build
+
+A standard build will build all Maven projects, including the packages.
+It will not build the APEX site oand documentation.
+
+Note: APEX has a dependency to ONAP parent projects.
+You might need to adjust your Maven M2 settings.
+The most current settings can be found in the ONAP oparent repo: link:https://git.onap.org/oparent/plain/settings.xml[Settings].
+
+Without tests, takes about 6 minutes.
+
+----
+mvn install -DskipTests
+----
+
+With standard tests, takes about 10-15 minutes.
+
+----
+mvn install
+----
+
+With all tests (requires some database and other software installed).
+
+----
+mvn install -DapexAll
+----
+
+
+=== Building the HowTo with all details
+
+
+Build the APEX stand-alone documentation
+
+----
+mvn generate-resources -N -DapexDocs
+----
+
+Then open the HowTo in a browser, for example
+
+----
+firefox target/generated-docs/html/HowTo-Build-APEX.html
+----
+
+
+=== APEX Site
+
+Building a complete site workflow (start with cleaning your local site staging directory).
+
+[IMPORTANT]
+.Building a Site takes Time
+====
+Building and staging the APEX web site can take very long.
+The stand-alone documentation will take about 2 minutes.
+The sites for all modules and projects and the main APEX site can take between 10-30 minutes depending on your build machine
+(~10 minutes without generating source and test-source reports, closer to 30 minutes with all reports).
+====
+
+
+----
+mvn clean -DapexAll
+mvn install -DskipTests
+mvn generate-resources -N -DapexDocs
+mvn initialize site:attach-descriptor site site:stage -DapexSite
+----
+
+
+Terms & Conditions apply
+
+
+* * *
+*The ONAP APEX team*
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
- <id>unpack-client-deployment-shared-resources</id>
+ <id>unpack-client-deployment-shared-resources-war</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
- <phase>generate-resources</phase>
+ <phase>validate</phase>
<configuration>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}</outputDirectory>
<includeArtifacIds>client-common</includeArtifacIds>
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>3.1.0</version>
+ <executions>
+ <execution>
+ <id>copy-common-resources-to-jar</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/classes/webapp</outputDirectory>
+ <filtering>false</filtering>
+ <resources>
+ <resource>
+ <directory>../client-common/src/main/resources</directory>
+ </resource>
+ </resources>
+ <overwrite>true</overwrite>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-local-resources-to-jar</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/classes/webapp</outputDirectory>
+ <filtering>false</filtering>
+ <resources>
+ <resource>
+ <directory>src/main/resources/webapp</directory>
+ </resource>
+ </resources>
+ <overwrite>true</overwrite>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
+ <version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
+ <version>2.6</version>
<configuration>
<classifier>ui</classifier>
<warSourceDirectory>src/main/resources/webapp</warSourceDirectory>
<project name="APEX Client Deployment">
<body>
<menu name="APEX Client Deployment">
+ <item href="javadocs/index.html" name="API Doc" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
<goals>
<goal>unpack-dependencies</goal>
</goals>
- <phase>generate-resources</phase>
+ <phase>validate</phase>
<configuration>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}</outputDirectory>
<includeArtifacIds>client-common</includeArtifacIds>
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>3.1.0</version>
+ <executions>
+ <execution>
+ <id>copy-common-resources-to-jar</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/classes/webapp</outputDirectory>
+ <filtering>false</filtering>
+ <resources>
+ <resource>
+ <directory>../client-common/src/main/resources</directory>
+ </resource>
+ </resources>
+ <overwrite>true</overwrite>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-local-resources-to-jar</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/classes/webapp</outputDirectory>
+ <filtering>false</filtering>
+ <resources>
+ <resource>
+ <directory>src/main/resources/webapp</directory>
+ </resource>
+ </resources>
+ <overwrite>true</overwrite>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
+ <version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
+ <version>2.6</version>
<configuration>
<classifier>ui</classifier>
<warSourceDirectory>src/main/resources/webapp</warSourceDirectory>
.onapLogo {
padding-right: 100px;
- height: 250px;
+ height: 75px;
width: 350px;
}
.apexLogo {
- height: 250px;
+ height: 267px;
width: 350px;
}
<project name="APEX Client Editor">
<body>
<menu name="APEX Client Editor">
+ <item href="javadocs/index.html" name="API Doc" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
</includes>
</resource>
<resource>
- <directory>../client-monitoring/target/client-monitoring-${project.version}</directory>
+ <directory>../client-monitoring/target/classes/webapp</directory>
<includes>
<include>**/*.*</include>
</includes>
<targetPath>webapp/monitoring</targetPath>
</resource>
<resource>
- <directory>../client-editor/target/client-editor-${project.version}</directory>
+ <directory>../client-editor/target/classes/webapp</directory>
<includes>
<include>**/*.*</include>
</includes>
<targetPath>webapp/editor</targetPath>
</resource>
<resource>
- <directory>../client-deployment/target/client-deployment-${project.version}</directory>
+ <directory>../client-deployment/target/classes/webapp</directory>
<includes>
<include>**/*.*</include>
</includes>
<defaultGoal>install</defaultGoal>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack-client-editor-shared-resources</id>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ <configuration>
+ <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}</outputDirectory>
+ <includeArtifacIds>client-common</includeArtifacIds>
+ <includeGroupIds>${project.groupId}</includeGroupIds>
+ <excludeTransitive>true</excludeTransitive>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
+ <version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
+ <version>2.6</version>
<configuration>
<classifier>ui</classifier>
<warSourceDirectory>target/classes/webapp</warSourceDirectory>
.onapLogo {
display: block;
- height: 225px;
+ height: 59px;
width: 325px;
padding-bottom: 31px;
}
.apexLogo {
display: block;
- height: 225px;
+ height: 248px;
width: 325px;
}
<project name="APEX Client Full">
<body>
<menu name="APEX Client Full">
+ <item href="javadocs/index.html" name="API Doc" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules"/>
<goals>
<goal>unpack-dependencies</goal>
</goals>
- <phase>generate-resources</phase>
+ <phase>validate</phase>
<configuration>
<outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}</outputDirectory>
<includeArtifacIds>client-common</includeArtifacIds>
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>3.1.0</version>
+ <executions>
+ <execution>
+ <id>copy-common-resources-to-jar</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/classes/webapp</outputDirectory>
+ <filtering>false</filtering>
+ <resources>
+ <resource>
+ <directory>../client-common/src/main/resources</directory>
+ </resource>
+ </resources>
+ <overwrite>true</overwrite>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-local-resources-to-jar</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/classes/webapp</outputDirectory>
+ <filtering>false</filtering>
+ <resources>
+ <resource>
+ <directory>src/main/resources/webapp</directory>
+ </resource>
+ </resources>
+ <overwrite>true</overwrite>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
+ <version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
+ <version>2.6</version>
<configuration>
<classifier>ui</classifier>
<warSourceDirectory>src/main/resources/webapp</warSourceDirectory>
<project name="APEX Client Monitoring">
<body>
<menu name="APEX Client Monitoring">
+ <item href="javadocs/index.html" name="API Doc" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
* <ol>
* <li>flushPeriod: Context is flushed to any persistor plugin that is defined periodically, and the
* period for flushing is the flush period.
- * <li>distributorParameters: The parameters (a {@link distributorParameters} instance) for the
+ * <li>distributorParameters: The parameters (a {@link DistributorParameters} instance) for the
* distributor plugin that is being used for context album distribution
* <li>schemaParameters: The parameters (a {@link SchemaParameters} instance) for the schema plugin
* that is being used for context album schemas
import org.onap.policy.apex.model.basicmodel.concepts.AxKey;
import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
+/**
+ * The Class ArtifactKeyTestEntity is an entity for testing artifact keys.
+ */
@Entity
@Table(name = "ArtifactKeyTestEntity")
public class ArtifactKeyTestEntity extends AxConcept {
private double doubleValue;
+ /**
+ * Instantiates a new artifact key test entity.
+ */
public ArtifactKeyTestEntity() {
this.key = new AxArtifactKey();
this.doubleValue = 0;
}
+ /**
+ * Instantiates a new artifact key test entity.
+ *
+ * @param doubleValue the double value
+ */
public ArtifactKeyTestEntity(final Double doubleValue) {
this.key = new AxArtifactKey();
this.doubleValue = doubleValue;
}
+ /**
+ * Instantiates a new artifact key test entity.
+ *
+ * @param key the key
+ * @param doubleValue the double value
+ */
public ArtifactKeyTestEntity(final AxArtifactKey key, final Double doubleValue) {
this.key = key;
this.doubleValue = doubleValue;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKey()
+ */
@Override
public AxArtifactKey getKey() {
return key;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKeys()
+ */
@Override
public List<AxKey> getKeys() {
return Arrays.asList((AxKey) getKey());
}
+ /**
+ * Sets the key.
+ *
+ * @param key the new key
+ */
public void setKey(final AxArtifactKey key) {
this.key = key;
}
+ /**
+ * Check set key.
+ *
+ * @return true, if successful
+ */
public boolean checkSetKey() {
return (this.key != null);
}
+ /**
+ * Gets the double value.
+ *
+ * @return the double value
+ */
public double getDoubleValue() {
return doubleValue;
}
+ /**
+ * Sets the double value.
+ *
+ * @param doubleValue the new double value
+ */
public void setDoubleValue(final double doubleValue) {
this.doubleValue = doubleValue;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#validate(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxValidationResult)
+ */
@Override
public AxValidationResult validate(final AxValidationResult result) {
return key.validate(result);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#clean()
+ */
@Override
public void clean() {
key.clean();
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#toString()
+ */
@Override
public String toString() {
return "ArtifactKeyTestEntity [key=" + key + ", doubleValue=" + doubleValue + "]";
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#copyTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
@Override
public AxConcept copyTo(final AxConcept target) {
final Object copyObject = ((target == null) ? new ArtifactKeyTestEntity() : target);
}
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#hashCode()
+ */
@Override
public int hashCode() {
final int prime = 31;
return result;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#equals(java.lang.Object)
+ */
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return (Double.compare(doubleValue, other.doubleValue) == 0);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
@Override
public int compareTo(final AxConcept otherObj) {
if (otherObj == null) {
import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
import org.onap.policy.apex.model.basicmodel.xml.AxReferenceKeyAdapter;
+/**
+ * The Class ReferenceKeyTestEntity provides a reference key test concept.
+ */
@Entity
@Table(name = "ReferenceKeyTestEntity")
public class ReferenceKeyTestEntity extends AxConcept {
private double doubleValue;
+ /**
+ * Instantiates a new reference key test entity.
+ */
public ReferenceKeyTestEntity() {
this.key = new AxReferenceKey();
this.doubleValue = 0;
}
+ /**
+ * Instantiates a new reference key test entity.
+ *
+ * @param doubleValue the double value
+ */
public ReferenceKeyTestEntity(final Double doubleValue) {
this.key = new AxReferenceKey();
this.doubleValue = doubleValue;
}
+ /**
+ * Instantiates a new reference key test entity.
+ *
+ * @param key the key
+ * @param doubleValue the double value
+ */
public ReferenceKeyTestEntity(final AxReferenceKey key, final Double doubleValue) {
this.key = key;
this.doubleValue = doubleValue;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKey()
+ */
@Override
public AxReferenceKey getKey() {
return key;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#getKeys()
+ */
@Override
public List<AxKey> getKeys() {
return Arrays.asList((AxKey) getKey());
}
+ /**
+ * Sets the key.
+ *
+ * @param key the new key
+ */
public void setKey(final AxReferenceKey key) {
this.key = key;
}
+ /**
+ * Check set key.
+ *
+ * @return true, if successful
+ */
public boolean checkSetKey() {
return (this.key != null);
}
+ /**
+ * Gets the double value.
+ *
+ * @return the double value
+ */
public double getDoubleValue() {
return doubleValue;
}
+ /**
+ * Sets the double value.
+ *
+ * @param doubleValue the new double value
+ */
public void setDoubleValue(final double doubleValue) {
this.doubleValue = doubleValue;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#validate(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxValidationResult)
+ */
@Override
public AxValidationResult validate(final AxValidationResult result) {
return key.validate(result);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#clean()
+ */
@Override
public void clean() {
key.clean();
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#toString()
+ */
@Override
public String toString() {
return "ReferenceKeyTestEntity [key=" + key + ", doubleValue=" + doubleValue + "]";
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.model.basicmodel.concepts.AxConcept#copyTo(org.onap.policy.apex.model.basicmodel.concepts.
+ * AxConcept)
+ */
@Override
public AxConcept copyTo(final AxConcept target) {
final Object copyObject = ((target == null) ? new ReferenceKeyTestEntity() : target);
}
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#hashCode()
+ */
@Override
public int hashCode() {
final int prime = 31;
return result;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.model.basicmodel.concepts.AxConcept#equals(java.lang.Object)
+ */
@Override
public boolean equals(final Object obj) {
if (obj == null) {
return (Double.compare(doubleValue, other.doubleValue) == 0);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Comparable#compareTo(java.lang.Object)
+ */
@Override
public int compareTo(final AxConcept otherObj) {
if (otherObj == null) {
*/
/**
- * Contains common test entities
+ * Contains common test entities.
* @author Dinh Danh Le (dinh.danh.le@ericsson.com)
*
*/
import org.onap.policy.apex.context.ContextAlbum;
import org.onap.policy.apex.context.ContextException;
+/**
+ * The Interface AlbumModifier defines the interface to allow context albums be modified during context tests.
+ */
public interface AlbumModifier {
+ /**
+ * Modify album.
+ *
+ * @param contextAlbum the context album
+ * @param loopSize the loop size
+ * @param arraySize the array size
+ * @throws ContextException the context exception
+ */
void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize) throws ContextException;
}
import org.onap.policy.apex.context.ContextRuntimeException;
+/**
+ * The Enum LockType defines the type of lock on a test context album.
+ */
public enum LockType {
NO_LOCK(0) {
private final int value;
+ /**
+ * Instantiates a new lock type.
+ *
+ * @param value the value
+ */
private LockType(final int value) {
this.value = value;
}
+ /**
+ * Gets the value.
+ *
+ * @return the value
+ */
public int getValue() {
return value;
}
throw new ContextRuntimeException("Invalid Lock type value: " + value);
}
+ /**
+ * Gets the album modifier.
+ *
+ * @return the album modifier
+ */
public abstract AlbumModifier getAlbumModifier();
}
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
+/**
+ * The Class NoLockAlbumModifier implements a non lock context album.
+ */
public class NoLockAlbumModifier implements AlbumModifier {
private static final XLogger LOGGER = XLoggerFactory.getXLogger(NoLockAlbumModifier.class);
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.lock.modifier.AlbumModifier#modifyAlbum(org.onap.policy.apex.context.
+ * ContextAlbum, int, int)
+ */
@Override
public void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize) {
final Random rand = new Random();
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
+/**
+ * The Class ReadLockAlbumModifier implements a read lock context album.
+ */
public class ReadLockAlbumModifier implements AlbumModifier {
private static final XLogger LOGGER = XLoggerFactory.getXLogger(ReadLockAlbumModifier.class);
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.lock.modifier.AlbumModifier#modifyAlbum(org.onap.policy.apex.context.
+ * ContextAlbum, int, int)
+ */
@Override
public void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize) {
final Random rand = new Random();
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
+/**
+ * The Class SingleValueWriteLockAlbumModifier implements a single value lock context album.
+ */
public class SingleValueWriteLockAlbumModifier implements AlbumModifier {
private static final XLogger LOGGER = XLoggerFactory.getXLogger(SingleValueWriteLockAlbumModifier.class);
-
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.lock.modifier.AlbumModifier#modifyAlbum(org.onap.policy.apex.context.
+ * ContextAlbum, int, int)
+ */
@Override
public void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize)
- throws ContextException {
+ throws ContextException {
for (int i = 0; i < loopSize; i++) {
try {
contextAlbum.lockForWriting(TEST_VALUE);
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
+/**
+ * The Class WriteLockAlbumModifier implements a write lock context album.
+ */
public class WriteLockAlbumModifier implements AlbumModifier {
private static final XLogger LOGGER = XLoggerFactory.getXLogger(WriteLockAlbumModifier.class);
-
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.lock.modifier.AlbumModifier#modifyAlbum(org.onap.policy.apex.context.
+ * ContextAlbum, int, int)
+ */
@Override
public void modifyAlbum(final ContextAlbum contextAlbum, final int loopSize, final int arraySize) {
final Random rand = new Random();
--- /dev/null
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Provides modifiers that allow the locking on a contest album to be modified in various ways.
+ */
+
+package org.onap.policy.apex.context.test.lock.modifier;
import org.onap.policy.apex.context.test.lock.modifier.LockType;
import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+/**
+ * The Interface ConfigrationProvider provides the configuration for a context test to a context test executor.
+ */
public interface ConfigrationProvider {
+ /**
+ * Gets the test name.
+ *
+ * @return the test name
+ */
String getTestName();
+ /**
+ * Gets the loop size.
+ *
+ * @return the loop size
+ */
int getLoopSize();
+ /**
+ * Gets the thread count.
+ *
+ * @return the thread count
+ */
int getThreadCount();
+ /**
+ * Gets the jvm count.
+ *
+ * @return the jvm count
+ */
int getJvmCount();
+ /**
+ * Gets the album size.
+ *
+ * @return the album size
+ */
int getAlbumSize();
+ /**
+ * Gets the executor service.
+ *
+ * @return the executor service
+ */
ExecutorService getExecutorService();
+ /**
+ * Gets the executor service.
+ *
+ * @param threadFactoryName the thread factory name
+ * @param threadPoolSize the thread pool size
+ * @return the executor service
+ */
ExecutorService getExecutorService(final String threadFactoryName, final int threadPoolSize);
+ /**
+ * Gets the distributor.
+ *
+ * @param key the key
+ * @return the distributor
+ */
Distributor getDistributor(final AxArtifactKey key);
+ /**
+ * Gets the distributor.
+ *
+ * @return the distributor
+ */
Distributor getDistributor();
+ /**
+ * Gets the context album.
+ *
+ * @param distributor the distributor
+ * @return the context album
+ */
ContextAlbum getContextAlbum(final Distributor distributor);
+ /**
+ * Gets the context album.
+ *
+ * @param distributor the distributor
+ * @param axContextAlbumKey the ax context album key
+ * @param artifactKeys the artifact keys
+ * @return the context album
+ * @throws ContextException the context exception
+ */
ContextAlbum getContextAlbum(final Distributor distributor, AxArtifactKey axContextAlbumKey,
- AxArtifactKey[] artifactKeys) throws ContextException;
+ AxArtifactKey[] artifactKeys) throws ContextException;
+ /**
+ * Gets the context album init values.
+ *
+ * @return the context album init values
+ */
Map<String, Object> getContextAlbumInitValues();
+ /**
+ * Gets the album modifier.
+ *
+ * @return the album modifier
+ */
AlbumModifier getAlbumModifier();
+ /**
+ * Gets the lock type.
+ *
+ * @return the lock type
+ */
LockType getLockType();
}
import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
import org.onap.policy.apex.model.utilities.Assertions;
+/**
+ * The Class ConfigrationProviderImpl provides configuration information for a context test back to the caller.
+ */
public class ConfigrationProviderImpl implements ConfigrationProvider {
private final String testType;
/**
* The parameterized ConfigrationProviderImpl constructor.
+ *
* @param testType the test type
* @param jvmCount the JVM count
* @param threadCount the thread count
* @param lockType the lock type
*/
public ConfigrationProviderImpl(final String testType, final int jvmCount, final int threadCount,
- final int loopSize, final int albumSize, final int lockType) {
+ final int loopSize, final int albumSize, final int lockType) {
this.testType = testType;
this.jvmCount = jvmCount;
this.threadCount = threadCount;
this.lockType = LockType.getLockType(lockType);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getTestName()
+ */
@Override
public String getTestName() {
return testType;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getLoopSize()
+ */
@Override
public int getLoopSize() {
return loopSize;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getThreadCount()
+ */
@Override
public int getThreadCount() {
return threadCount;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getJvmCount()
+ */
@Override
public int getJvmCount() {
return jvmCount;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getAlbumSize()
+ */
@Override
public int getAlbumSize() {
return albumSize;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getExecutorService()
+ */
@Override
public ExecutorService getExecutorService() {
final String name = getThreadFactoryName(jvmCount, testType);
return executorService;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getExecutorService(java.lang.String, int)
+ */
@Override
public ExecutorService getExecutorService(final String threadFactoryName, final int threadPoolSize) {
final IntegrationThreadFactory threadFactory = new IntegrationThreadFactory(threadFactoryName);
return executorService;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.onap.policy.apex.context.test.utils.ConfigrationProvider#getDistributor(org.onap.policy.apex.model.basicmodel
+ * .concepts.AxArtifactKey)
+ */
@Override
public Distributor getDistributor(final AxArtifactKey key) {
try {
}
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getDistributor()
+ */
@Override
public Distributor getDistributor() {
final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributor", "0.0.1");
return getDistributor(distributorKey);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getContextAlbum(org.onap.policy.apex.context.
+ * Distributor)
+ */
@Override
public ContextAlbum getContextAlbum(final Distributor distributor) {
return getContextAlbum(distributor, Constants.L_TYPE_CONTEXT_ALBUM, Constants.getAxArtifactKeyArray());
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getContextAlbum(org.onap.policy.apex.context.
+ * Distributor, org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey,
+ * org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey[])
+ */
@Override
public ContextAlbum getContextAlbum(final Distributor distributor, final AxArtifactKey axContextAlbumKey,
- final AxArtifactKey[] artifactKeys) {
+ final AxArtifactKey[] artifactKeys) {
final AxContextModel axContextModel = TestContextAlbumFactory.createMultiAlbumsContextModel();
try {
distributor.registerModel(axContextModel);
}
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getContextAlbumInitValues()
+ */
@Override
public Map<String, Object> getContextAlbumInitValues() {
final Map<String, Object> values = new HashMap<>();
return values;
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getAlbumModifier()
+ */
@Override
public AlbumModifier getAlbumModifier() {
return lockType.getAlbumModifier();
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.onap.policy.apex.context.test.utils.ConfigrationProvider#getLockType()
+ */
@Override
public LockType getLockType() {
return lockType;
}
-
+ /**
+ * Gets the thread factory name.
+ *
+ * @param jvmCount the jvm count
+ * @param testType the test type
+ * @return the thread factory name
+ */
private String getThreadFactoryName(final int jvmCount, final String testType) {
return jvmCount == 1 ? testType + ":TestConcurrentContextThread_0_"
- : testType + ":TestConcurrentContextJVMThread_";
+ : testType + ":TestConcurrentContextJVMThread_";
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
@Override
public String toString() {
return "ConfigrationProviderImpl [testType=" + testType + ", jvmCount=" + jvmCount + ", threadCount="
- + threadCount + ", loopSize=" + loopSize + ", albumSize=" + albumSize + ", lockType=" + lockType + "]";
+ + threadCount + ", loopSize=" + loopSize + ", albumSize=" + albumSize + ", lockType=" + lockType
+ + "]";
}
-
}
import org.onap.policy.apex.context.test.concepts.TestPolicyContextItem;
import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+/**
+ * The Class Constants provides constants for context tests.
+ */
public class Constants {
public static final String MAP_CONTEXT_ALBUM = "MapContextAlbum";
public static final String LONG_CONTEXT_ALBUM = "LongContextAlbum";
private static final AxArtifactKey[] USED_ARTIFACT_STACK_ARRAY = new AxArtifactKey[] {KEY, KEY2, KEY3};
+ /**
+ * Gets the ax artifact key array.
+ *
+ * @return the ax artifact key array
+ */
public static final AxArtifactKey[] getAxArtifactKeyArray() {
return USED_ARTIFACT_STACK_ARRAY;
}
+ /**
+ * Instantiates a new constants.
+ */
private Constants() {}
}
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
+/**
+ * A factory for creating IntegrationThread objects.
+ */
public class IntegrationThreadFactory implements ThreadFactory {
private static final XLogger LOGGER = XLoggerFactory.getXLogger(IntegrationThreadFactory.class);
private final AtomicInteger counter = new AtomicInteger();
+ /**
+ * Instantiates a new integration thread factory.
+ *
+ * @param threadFactoryName the thread factory name
+ */
public IntegrationThreadFactory(final String threadFactoryName) {
this.threadFactoryName = threadFactoryName;
}
+ /* (non-Javadoc)
+ * @see java.util.concurrent.ThreadFactory#newThread(java.lang.Runnable)
+ */
@Override
public Thread newThread(final Runnable runnable) {
final Thread thread = new Thread(runnable);
LOGGER.debug("started thread " + thread.getName());
return thread;
}
-
}
import java.util.Enumeration;
import java.util.TreeSet;
+/**
+ * The Class NetworkUtils contains some utility functions for getting network information for context tests.
+ */
public class NetworkUtils {
+ /**
+ * Instantiates a new network utils.
+ */
private NetworkUtils() {}
/**
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;
+/**
+ * The Class ZooKeeperServerServiceProvider provides a zookeeper service to a caller.
+ */
public class ZooKeeperServerServiceProvider {
private static final XLogger LOGGER = XLoggerFactory.getXLogger(ZooKeeperServerServiceProvider.class);
private File zookeeperDirectory;
private InetSocketAddress addr;
+ /**
+ * Instantiates a new zoo keeper server service provider.
+ *
+ * @param zookeeperDirectory the zookeeper directory
+ * @param addr the addr
+ */
public ZooKeeperServerServiceProvider(final File zookeeperDirectory, final InetSocketAddress addr) {
this.zookeeperDirectory = zookeeperDirectory;
this.addr = addr;
}
+ /**
+ * Instantiates a new zoo keeper server service provider.
+ *
+ * @param zookeeperDirectory the zookeeper directory
+ * @param addr the addr
+ * @param port the port
+ */
public ZooKeeperServerServiceProvider(final File zookeeperDirectory, final String addr, final int port) {
this.zookeeperDirectory = zookeeperDirectory;
this.addr = new InetSocketAddress(addr, port);
zookeeperFactory.shutdown();
}
}
-
}
--- /dev/null
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Contains utilities for context tests.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+
+package org.onap.policy.apex.context.test.utils;
/**
* Defines the Apex engine Java API. The API is used to set up, control, send events to, and receive events from an APEX
- * engine. The {@link ApexEngine} interface is used to control the execution of a single APEX engine thread and to send
- * events to that APEX engine thread. The {@link EnEventListener} interface is used to listen for events being emitted
+ * engine. The ApexEngine interface is used to control the execution of a single APEX engine thread and to send
+ * events to that APEX engine thread. The EnEventListener interface is used to listen for events being emitted
* by an APEX engine thread.
*
* @author Liam Fallon (liam.fallon@ericsson.com)
/**
* Provides context and facades for executing tasks, task selection logic, and state finalizer
- * logic. The public fields and methods of {@link TaskExecutionContext},
- * {@link TaskSelectionExecutionContext} and {@link StateFinalizerExecutionContext} are available to
+ * logic. The public fields and methods of TaskExecutionContext,
+ * TaskSelectionExecutionContext and StateFinalizerExecutionContext are available to
* task logic, task selection logic, and state finalizer logic respectively when that logic is
* executing in an executor plugin under the control of an APEX engine.
*
- * The {@link AxStateFacade} and {@link AxTaskFacade} classes provide facades and convenience
+ * The AxStateFacade and AxTaskFacade classes provide facades and convenience
* methods for state and task definition information for logic at execution time.
*
* @author Liam Fallon (liam.fallon@ericsson.com)
/**
* This method searches the availability of the port, if the requested port not available,this
* method will increment the port number and check the availability of that port, this process
- * will continue until it reaches max port range which is {@link MAX_PORT_RANGE}.
+ * will continue until it reaches max port range which is MAX_PORT_RANGE.
*
* @param port the first port to check
* @return the port that was found
// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
//
-== Initiation Events
+== Initiation Event
-.Initiation Events
+.Initiation Event
[source,json,options="nowrap"]
----
-include::{adsite-examples-decisionmaker-dir}/main/resources/config/AnswerInitiationEvents.txt[Initiation Events]
+include::{adsite-examples-decisionmaker-dir}/main/resources/examples/config/DecisionMaker/AnswerInitiationEvent.json[Initiation Event]
----
\ No newline at end of file
.Config REst Client
[source,json,options="nowrap"]
----
-include::{adsite-examples-decisionmaker-dir}/main/resources/config/ApexConfigRESTClient.json[Config Rest Client]
+include::{adsite-examples-decisionmaker-dir}/main/resources/examples/config/DecisionMaker/ApexConfigRESTClient.json[Config Rest Client]
----
\ No newline at end of file
.Config REST Server
[source,json,options="nowrap"]
----
-include::{adsite-examples-decisionmaker-dir}/main/resources/config/ApexConfigRESTServer.json[Config REST Server]
+include::{adsite-examples-decisionmaker-dir}/main/resources/examples/config/DecisionMaker/ApexConfigRESTServer.json[Config REST Server]
----
\ No newline at end of file
.HTML Client, Extra Mode
[source,html,options="nowrap"]
----
-include::{adsite-examples-decisionmaker-dir}/main/resources/html/MakeDecisionExtraMode_Client.html[HTML Client, Extra Mode]
+include::{adsite-examples-decisionmaker-dir}/main/resources/examples/html/DecisionMaker/MakeDecisionExtraMode_Client.html[HTML Client, Extra Mode]
----
\ No newline at end of file
.HTML Server, Extra Mode
[source,html,options="nowrap"]
----
-include::{adsite-examples-decisionmaker-dir}/main/resources/html/MakeDecisionExtraMode_Server.html[HTML Server, Extra Mode]
+include::{adsite-examples-decisionmaker-dir}/main/resources/examples/html/DecisionMaker/MakeDecisionExtraMode_Server.html[HTML Server, Extra Mode]
----
\ No newline at end of file
.HTML Client
[source,html,options="nowrap"]
----
-include::{adsite-examples-decisionmaker-dir}/main/resources/html/MakeDecision_Client.html[HTML Client]
+include::{adsite-examples-decisionmaker-dir}/main/resources/examples/html/DecisionMaker/MakeDecision_Client.html[HTML Client]
----
\ No newline at end of file
.HTML Server
[source,html,options="nowrap"]
----
-include::{adsite-examples-decisionmaker-dir}/main/resources/html/MakeDecision_Server.html[HTML Server]
+include::{adsite-examples-decisionmaker-dir}/main/resources/examples/html/DecisionMaker/MakeDecision_Server.html[HTML Server]
----
\ No newline at end of file
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-== Dockerfile
-
-.Dockerfile
-[source,bash,options="nowrap"]
-----
-include::{adsite-examples-decisionmaker-dir}/../Dockerfile[Dockerfile]
-----
\ No newline at end of file
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-include::{adsite-examples-decisionmaker-dir}/site-docs/adoc/fragments/dockerfile.adoc[]
<item href="RandomAnswerTask.html" name="Task Logic: Random Answer" />
<item href="RoundRobinAnswerTask.html" name="Task Logic: RoundRobin Answer" />
</item>
- <item href="dockerfile.html" name="Dockerfile" />
-
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
<url>${apex.adsite.prefix}/modules/${project.parent.artifactId}/${project.artifactId}/</url>
</site>
</distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>3.0.2</version>
+ <executions>
+ <execution>
+ <id>copy-domain-mfp-images</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <resources>
+ <resource>
+ <directory>${project.basedir}/src/site-docs/adoc/resources/images</directory>
+ <includes>
+ <include>**/*.jpg</include>
+ <include>**/*.png</include>
+ </includes>
+ </resource>
+ </resources>
+ <outputDirectory>${project.build.directory}/site/images</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
</profile>
</profiles>
</project>
\ No newline at end of file
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-== Dockerfile
-
-.Dockerfile
-[source,bash,options="nowrap"]
-----
-include::{apex-domains-onap-vcpe-dir}/../Dockerfile[Dockerfile]
-----
<project name="APEX Examples ONAP vCPE">
<body>
<menu name="APEX Examples ONAP vCPE">
- <item href="dockerfile.html" name="Dockerfile" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
<url>${apex.adsite.prefix}/modules/${project.parent.artifactId}/${project.artifactId}/</url>
</site>
</distributionManagement>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>3.0.2</version>
+ <executions>
+ <execution>
+ <id>copy-domain-pcvs-images</id>
+ <phase>initialize</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <resources>
+ <resource>
+ <directory>${project.basedir}/src/site-docs/adoc/resources/images</directory>
+ <includes>
+ <include>**/*.jpg</include>
+ <include>**/*.png</include>
+ </includes>
+ </resource>
+ </resources>
+ <outputDirectory>${project.build.directory}/site/images</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
</profile>
</profiles>
</project>
\ No newline at end of file
.AVRO Schema Edges
[source,json,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/avro/topology-edges.avsc[AVRO Schema Edges]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/avro/topology-edges.avsc[AVRO Schema Edges]
----
.AVRO Schema Nodes
[source,json,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/avro/topology-nodes.avsc[AVRO Schema Nodes]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/avro/topology-nodes.avsc[AVRO Schema Nodes]
----
.AVRO Schema Customers
[source,json,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/avro/customers.avsc[AVRO Schema Customers]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/avro/customers.avsc[AVRO Schema Customers]
----
.AVRO Schema Situation
[source,json,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/avro/situation.avsc[AVRO Schema Situation]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/avro/situation.avsc[AVRO Schema Situation]
----
.AVRO Schema Decision
[source,json,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/avro/decision.avsc[AVRO Schema Decision]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/avro/decision.avsc[AVRO Schema Decision]
----
.AVRO Schema Link Status
[source,json,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/avro/link-status.avsc[AVRO Schema Link Status]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/avro/link-status.avsc[AVRO Schema Link Status]
----
.APEX VPN SLA Policy Specification
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/vpnsla.apex[APEX VPN SLA Policy Specification]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/vpnsla.apex[APEX VPN SLA Policy Specification]
----
.JS Logic Customer Context
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/ctxt-customer.js[JS Logic Customer Context]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/ctxt-customer.js[JS Logic Customer Context]
----
.JS Logic Edge Context
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/ctxt-edges.js[JS Logic Edge Context]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/ctxt-edges.js[JS Logic Edge Context]
----
.JS Logic Node Context
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/ctxt-nodes.js[JS Logic Node Context]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/ctxt-nodes.js[JS Logic Node Context]
----
.JS Logic Policy Act State
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/task-act.js[JS Logic Policy Act State]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/task-act.js[JS Logic Policy Act State]
----
.JS Logic Policy Decide State - None
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/task-decide-none.js[JS Logic Policy Decide State - None]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/task-decide-none.js[JS Logic Policy Decide State - None]
----
.JS Logic Policy Decide State - Priority
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/task-decide-priority.js[JS Logic Policy Decide State - Priority]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/task-decide-priority.js[JS Logic Policy Decide State - Priority]
----
.JS Logic Policy Decide State - SLA
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/task-decide-sla.js[JS Logic Policy Decide State - SLA]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/task-decide-sla.js[JS Logic Policy Decide State - SLA]
----
.JS Logic Policy Decide State - Solved
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/task-decide-solved.js[JS Logic Policy Decide State - Solved]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/task-decide-solved.js[JS Logic Policy Decide State - Solved]
----
.JS Logic Policy Decide State - TSL
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/tsl-decide.js[JS Logic Policy Decide State - TSL]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/tsl-decide.js[JS Logic Policy Decide State - TSL]
----
The actual task logic are then `none`, `solved`, `sla`, and `priority`.
.JS Logic Policy Establish State
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/task-establish.js[JS Logic Policy Establish State]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/task-establish.js[JS Logic Policy Establish State]
----
.JS Logic Policy Match State
[source,javascript,options="nowrap"]
----
-include::{adsite-examples-pcvs-dir}/main/resources/com/ericsson/apex/domains/pcvs/vpnsla/logic/task-match.js[JS Logic Policy Match State]
+include::{adsite-examples-pcvs-dir}/main/resources/org/onap/policy/apex/examples/pcvs/vpnsla/logic/task-match.js[JS Logic Policy Match State]
----
.APEX configuration
[source,json,options="nowrap"]
----
-include::{adsite-examples-periodic-dir}/main/resources/config/ApexConfigPeriodic.json[APEX configuration]
+include::{adsite-examples-periodic-dir}/main/resources/examples/config/Periodic/ApexConfigPeriodic.json[APEX configuration]
----
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-include::{adsite-examples-periodic-dir}/site-docs/adoc/fragments/dockerfile.adoc[]
<item href="apex-model.html" name="APEX Model (Policy)" />
<item href="logic-task-output.html" name="Logic: Output Task" />
<item href="logic-task-periodic.html" name="Logic: Periodic Task" />
- <item href="dockerfile.html" name="Dockerfile" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
* must have an {@link AxArtifactKey} to identify it. Concepts that are wholly contained in another concept are
* identified using a {@link AxReferenceKey} key.
*
- * <p>Key validation checks that the name and version fields match the {@link NAME_REGEXP} and {@link VERSION_REGEXP}
+ * <p>Key validation checks that the name and version fields match the NAME_REGEXP and VERSION_REGEXP
* regular expressions respectively.
*/
@Embeddable
/**
* Constructor to create a key using the key and version from the specified key ID.
*
- * @param id the key ID in a format that respects the {@link KEY_ID_REGEXP}
+ * @param id the key ID in a format that respects the KEY_ID_REGEXP
*/
public AxArtifactKey(final String id) {
Assertions.argumentNotNull(id, "id may not be null");
* <p>If a reference key's parent is itself a reference key, then the parent's local name must be set in the reference
* key. If the parent is a first order concept, then the parent's local name in the key will be set to NULL.
*
- * <p>Key validation checks that the parent name and parent version fields match the {@link NAME_REGEXP} and
- * {@link VERSION_REGEXP} regular expressions respectively and that the local name fields match the
- * {@link LOCAL_NAME_REGEXP} regular expression.
+ * <p>Key validation checks that the parent name and parent version fields match the NAME_REGEXP and
+ * VERSION_REGEXP regular expressions respectively and that the local name fields match the
+ * LOCAL_NAME_REGEXP regular expression.
*/
@Embeddable
@XmlAccessorType(XmlAccessType.FIELD)
* Constructor to create a key from the specified key ID.
*
* @param id
- * the key ID in a format that respects the {@link KEY_ID_REGEXP}
+ * the key ID in a format that respects the KEY_ID_REGEXP
*/
public AxReferenceKey(final String id) {
final String conditionedId = Assertions.validateStringParameter("id", id, REFERENCE_KEY_ID_REGEXP);
* read objects from the context album.
* <p>
* Validation checks that the album key and the context schema key are not null and that the scope field is not
- * undefined and matches the regular expression {@link SCOPE_REGEXP}.
+ * undefined and matches the regular expression SCOPE_REGEXP.
*/
@Entity
@Table(name = "AxContextAlbum")
/**
* The default constructor creates a context album with a null artifact key. The scope of the context album is set
- * as {@link SCOPE_UNDEFINED}, the album is writable, and the artifact key of the context schema is set to the null
+ * as SCOPE_UNDEFINED, the album is writable, and the artifact key of the context schema is set to the null
* artifact key.
*/
public AxContextAlbum() {
/**
* The keyed constructor creates a context album with the specified artifact key. The scope of the context album is
- * set as {@link SCOPE_UNDEFINED}, the album is writable, and the artifact key of the context schema is set to the
+ * set as SCOPE_UNDEFINED, the album is writable, and the artifact key of the context schema is set to the
* null artifact key.
*
* @param key the key of the context album
* Constructor that sets all the fields of the context album.
*
* @param key the key of the context album
- * @param scope the scope field, must match the regular expression {@link SCOPE_REGEXP}
+ * @param scope the scope field, must match the regular expression SCOPE_REGEXP
* @param isWritable specifies whether the context album will be writable or not
* @param itemSchema the artifact key of the context schema to use for this context album
*/
* {@link AxContextSchema} being defined as @code cell} objects.
* <p>
* Validation checks that the schema key is not null. It also checks that the schema flavour is defined and matches the
- * regular expression {@link SCHEMA_FLAVOUR_REGEXP}. Finally, validation checks that the defined schema is not a blank
+ * regular expression SCHEMA_FLAVOUR_REGEXP. Finally, validation checks that the defined schema is not a blank
* or empty string.
*/
@Entity
/**
* The default constructor creates a context schema with a null artifact key. The flavour of the context album is
- * set as {@link SCHEMA_FLAVOUR_UNDEFINED} and the schema itself is defined as an empty string.
+ * set as SCHEMA_FLAVOUR_UNDEFINED and the schema itself is defined as an empty string.
*/
public AxContextSchema() {
this(new AxArtifactKey());
/**
* The key constructor creates a context schema with the given artifact key. The flavour of the context album is set
- * as {@link SCHEMA_FLAVOUR_UNDEFINED} and the schema itself is defined as an empty string.
+ * as SCHEMA_FLAVOUR_UNDEFINED and the schema itself is defined as an empty string.
*
* @param key the key
*/
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2016-2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ */
+
+/**
+ * Provides a utility class for reading JSON streams.
+ *
+ * @author Liam Fallon (liam.fallon@ericsson.com)
+ */
+package org.onap.policy.apex.model.utilities.json;
<name>apexSite</name>
</property>
</activation>
+ <properties>
+ <adsite-packages-docker-dir>${project.basedir}/src</adsite-packages-docker-dir>
+ </properties>
<distributionManagement>
<site>
<id>${project.artifactId}-site</id>
// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
//
-== Dockerfile
+== APEX Dockerfile
-.Dockerfile
-[source,bash,options="nowrap"]
+.APEX Dockerfile
+[source%nowrap,sh,numbered,subs="attributes+"]
----
-include::{adsite-examples-periodic-dir}/../Dockerfile[Dockerfile]
+include::{adsite-packages-docker-dir}/main/docker/Dockerfile[APEX Dockerfile]
----
// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
//
-include::{apex-domains-onap-vcpe-dir}/site-docs/adoc/fragments/dockerfile.adoc[]
+include::{adsite-packages-docker-dir}/site-docs/adoc/fragments/dockerfile.adoc[]
<project name="APEX Packages Docker">
<body>
<menu name="APEX Packages Docker">
+ <item href="dockerfile.html" name="APEX Dockerfile" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
<version>${project.version}</version>
</dependency>
+ <!-- Client Servlet applications -->
+ <dependency>
+ <groupId>org.onap.policy.apex-pdp.client</groupId>
+ <artifactId>client-full</artifactId>
+ <type>war</type>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.apex-pdp.client</groupId>
+ <artifactId>client-editor</artifactId>
+ <type>war</type>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.apex-pdp.client</groupId>
+ <artifactId>client-deployment</artifactId>
+ <type>war</type>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.apex-pdp.client</groupId>
+ <artifactId>client-monitoring</artifactId>
+ <type>war</type>
+ <version>${project.version}</version>
+ </dependency>
+
<!-- Plugins for Context Distribution -->
<dependency>
<groupId>org.onap.policy.apex-pdp.plugins.plugins-context.plugins-context-distribution</groupId>
<artifactId>cli-editor</artifactId>
<version>${project.version}</version>
</dependency>
-
+
+ <!-- Tools -->
+ <dependency>
+ <groupId>org.onap.policy.apex-pdp.tools</groupId>
+ <artifactId>simple-wsclient</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onap.policy.apex-pdp.tools</groupId>
+ <artifactId>model-generator</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
<!-- Test Data used by examples -->
<dependency>
<groupId>org.onap.policy.apex-pdp.context</groupId>
<outputDirectory>${project.build.directory}/etc</outputDirectory>
<includes>/readme_examples-servlet.txt</includes>
</artifactItem>
+ <artifactItem>
+ <groupId>org.onap.policy.apex-pdp.tools</groupId>
+ <artifactId>tools-common</artifactId>
+ <version>${project.version}</version>
+ <type>jar</type>
+ <overWrite>false</overWrite>
+ <outputDirectory>${project.build.directory}/etc</outputDirectory>
+ <includes>/app-version.txt</includes>
+ </artifactItem>
+ </artifactItems>
+ <overWriteReleases>true</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ </configuration>
+ </execution>
+ <execution>
+ <id>copy-fat-jars</id>
+ <phase>package</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.onap.policy.apex-pdp.tools</groupId>
+ <artifactId>simple-wsclient</artifactId>
+ <version>${project.version}</version>
+ <type>jar</type>
+ <classifier>jar-with-dependencies</classifier>
+ <outputDirectory>${project.build.directory}/lib/applications</outputDirectory>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.onap.policy.apex-pdp.client</groupId>
+ <artifactId>client-monitoring</artifactId>
+ <version>${project.version}</version>
+ <classifier>monitoring</classifier>
+ <outputDirectory>${project.build.directory}/lib/applications</outputDirectory>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.onap.policy.apex-pdp.client</groupId>
+ <artifactId>client-editor</artifactId>
+ <version>${project.version}</version>
+ <classifier>editor</classifier>
+ <outputDirectory>${project.build.directory}/lib/applications</outputDirectory>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.onap.policy.apex-pdp.client</groupId>
+ <artifactId>client-deployment</artifactId>
+ <version>${project.version}</version>
+ <classifier>deployment</classifier>
+ <outputDirectory>${project.build.directory}/lib/applications</outputDirectory>
+ </artifactItem>
+ <artifactItem>
+ <groupId>org.onap.policy.apex-pdp.client</groupId>
+ <artifactId>client-full</artifactId>
+ <version>${project.version}</version>
+ <classifier>full</classifier>
+ <outputDirectory>${project.build.directory}/lib/applications</outputDirectory>
+ </artifactItem>
</artifactItems>
<overWriteReleases>true</overWriteReleases>
<overWriteSnapshots>true</overWriteSnapshots>
</configuration>
</execution>
+
</executions>
</plugin>
:: ============LICENSE_END=========================================================
::
-:: Script to run APEX Applications
-:: Call -h for help
+:: Script to run APEX Applications, call with '-h' for help
:: - adding a new app means to add a command to APEX_APP_MAP and a description to APEX_APP_DESCR_MAP using same/unique key
::
:: @package org.onap.policy.apex
:: @author Sven van der Meer <sven.van.der.meer@ericsson.com>
-:: @version v0.7.0
+:: @version v2.0.0
::
:: DO NOT CHANGE CODE BELOW, unless you know what you are doing
:: array of applications with name=command
:: declare -A APEX_APP_MAP
-set APEX_APP_MAP[ws-console]=java -jar %APEX_HOME%\lib\applications\apex-apps.wsclients-simple-%_VERSION%-jar-with-dependencies.jar -c
-set APEX_APP_MAP[ws-echo]=java -jar %APEX_HOME%\lib\applications\apex-apps.wsclients-simple-%_VERSION%-jar-with-dependencies.jar
-set APEX_APP_MAP[tpl-event-json]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.apps.generators.model.model2event.Application
-set APEX_APP_MAP[model-2-cli]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.apps.generators.model.model2cli.Application
-set APEX_APP_MAP[rest-editor]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\apex-services.client-editor-%_VERSION%-editor.jar
+set APEX_APP_MAP[ws-console]=java -jar %APEX_HOME%\lib\applications\simple-wsclient-%_VERSION%-jar-with-dependencies.jar -c
+set APEX_APP_MAP[ws-echo]=java -jar %APEX_HOME%\lib\applications\simple-wsclient-%_VERSION%-jar-with-dependencies.jar
+set APEX_APP_MAP[tpl-event-json]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.tools.model.generator.model2event.Application
+set APEX_APP_MAP[model-2-cli]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.tools.model.generator.model2cli.Application
+set APEX_APP_MAP[rest-editor]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\client-editor-%_VERSION%-editor.jar
set APEX_APP_MAP[cli-editor]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.auth.clieditor.ApexCLIEditorMain
set APEX_APP_MAP[engine]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.service.engine.main.ApexMain
-set APEX_APP_MAP[eng-deployment]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\apex-services.client-deployment-%_VERSION%-deployment.jar
-set APEX_APP_MAP[eng-monitoring]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\apex-services.client-monitoring-%_VERSION%-monitoring.jar
-set APEX_APP_MAP[full-client]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\apex-services.client-full-%_VERSION%-full.jar
+set APEX_APP_MAP[eng-deployment]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\client-deployment-%_VERSION%-deployment.jar
+set APEX_APP_MAP[eng-monitoring]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\client-monitoring-%_VERSION%-monitoring.jar
+set APEX_APP_MAP[full-client]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\client-full-%_VERSION%-full.jar
:: array of applications with name=description
:: declare -A APEX_APP_DESCR_MAP
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================
#-------------------------------------------------------------------------------
+##
+## Script to run APEX Applications, call with '-h' for help
+## - requires BASH with associative arrays, bash of at least version 4
+## - for BASH examples with arrays see for instance: http://www.artificialworlds.net/blog/2012/10/17/bash-associative-array-examples/
+## - adding a new app means to add a command to APEX_APP_MAP and a description to APEX_APP_DESCR_MAP using same/unique key
+##
+## @package org.onap.policy.apex
+## @author Sven van der Meer <sven.van.der.meer@ericsson.com>
+## @version v2.0.0
##
## DO NOT CHANGE CODE BELOW, unless you know what you are doing
if [ -z $APEX_HOME ]
then
- APEX_HOME="/opt/app/policy/apex-pdp"
+ APEX_HOME="/opt/app/policy/apex-pdp/apex-pdp"
fi
if [ ! -d $APEX_HOME ]
## array of applications with name=command
declare -A APEX_APP_MAP
-APEX_APP_MAP["ws-console"]="java -jar $APEX_HOME/lib/applications/apex-apps.wsclients-simple-$_version-jar-with-dependencies.jar -c"
-APEX_APP_MAP["ws-echo"]="java -jar $APEX_HOME/lib/applications/apex-apps.wsclients-simple-$_version-jar-with-dependencies.jar"
-APEX_APP_MAP["tpl-event-json"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -cp ${CLASSPATH} $_config org.onap.policy.apex.apps.generators.model.model2event.Application"
-APEX_APP_MAP["model-2-cli"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -cp ${CLASSPATH} $_config org.onap.policy.apex.apps.generators.model.model2cli.Application"
-APEX_APP_MAP["rest-editor"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -jar $APEX_HOME/lib/applications/apex-services.client-editor-$_version-editor.jar"
+APEX_APP_MAP["ws-console"]="java -jar $APEX_HOME/lib/applications/simple-wsclient-$_version-jar-with-dependencies.jar -c"
+APEX_APP_MAP["ws-echo"]="java -jar $APEX_HOME/lib/applications/simple-wsclient-$_version-jar-with-dependencies.jar"
+APEX_APP_MAP["tpl-event-json"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -cp ${CLASSPATH} $_config org.onap.policy.apex.tools.model.generator.model2event.Application"
+APEX_APP_MAP["model-2-cli"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -cp ${CLASSPATH} $_config org.onap.policy.apex.tools.model.generator.model2cli.Application"
+APEX_APP_MAP["rest-editor"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -jar $APEX_HOME/lib/applications/client-editor-$_version-editor.jar"
APEX_APP_MAP["cli-editor"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -cp ${CLASSPATH} $_config org.onap.policy.apex.auth.clieditor.ApexCLIEditorMain"
APEX_APP_MAP["engine"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -cp ${CLASSPATH} $_config org.onap.policy.apex.service.engine.main.ApexMain"
-APEX_APP_MAP["eng-deployment"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -jar $APEX_HOME/lib/applications/apex-services.client-deployment-$_version-deployment.jar"
-APEX_APP_MAP["eng-monitoring"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -jar $APEX_HOME/lib/applications/apex-services.client-monitoring-$_version-monitoring.jar"
-APEX_APP_MAP["full-client"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -jar $APEX_HOME/lib/applications/apex-services.client-full-$_version-full.jar"
+APEX_APP_MAP["eng-deployment"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -jar $APEX_HOME/lib/applications/client-deployment-$_version-deployment.jar"
+APEX_APP_MAP["eng-monitoring"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -jar $APEX_HOME/lib/applications/client-monitoring-$_version-monitoring.jar"
+APEX_APP_MAP["full-client"]="java -Dlogback.configurationFile=$APEX_HOME/etc/logback.xml -jar $APEX_HOME/lib/applications/client-full-$_version-full.jar"
## array of applications with name=description
declare -A APEX_APP_DESCR_MAP
:: ============LICENSE_END=========================================================
::
-:: Script to run the APEX CLI Editor
+:: Script to run the APEX CLI Editor, calls apexApps.bat
::
:: @package org.onap.policy.apex
:: @author Sven van der Meer <sven.van.der.meer@ericsson.com>
-:: @version v0.7.0
+:: @version v2.0.0
::
:: DO NOT CHANGE CODE BELOW, unless you know what you are doing
#-------------------------------------------------------------------------------
##
-## Script to run the APEX CLI Editor
-## - requires BASH with associative arrays, bash of at least version 4
-## - for BASH examples with arrays see for instance: http://www.artificialworlds.net/blog/2012/10/17/bash-associative-array-examples/
-## - adding a new app means to add a command to APEX_APP_MAP and a description to APEX_APP_DESCR_MAP using same/unique key
+## Script to run the APEX CLI Editor, calls apexApps.sh
##
## @package org.onap.policy.apex
## @author Sven van der Meer <sven.van.der.meer@ericsson.com>
-## @version v0.7.0
+## @version v2.0.0
##
## DO NOT CHANGE CODE BELOW, unless you know what you are doing
:: ============LICENSE_END=========================================================
::
-:: Script to run the APEX
+:: Script to run the APEX, calls apexApps.bat
::
:: @package org.onap.policy.apex
:: @author Sven van der Meer <sven.van.der.meer@ericsson.com>
-:: @version v0.7.0
+:: @version v2.0.0
::
:: DO NOT CHANGE CODE BELOW, unless you know what you are doing
#-------------------------------------------------------------------------------
##
-## Script to run the APEX
-## - requires BASH with associative arrays, bash of at least version 4
-## - for BASH examples with arrays see for instance: http://www.artificialworlds.net/blog/2012/10/17/bash-associative-array-examples/
-## - adding a new app means to add a command to APEX_APP_MAP and a description to APEX_APP_DESCR_MAP using same/unique key
+## Script to run the APEX, calls apexApps.sh
##
## @package org.onap.policy.apex
## @author Sven van der Meer <sven.van.der.meer@ericsson.com>
-## @version v0.7.0
+## @version v2.0.0
##
## DO NOT CHANGE CODE BELOW, unless you know what you are doing
:: ============LICENSE_END=========================================================
::
-:: Script to run the APEX REST Editor
+:: Script to run the APEX REST Editor, calls apexApps.bat
::
:: @package org.onap.policy.apex
:: @author Sven van der Meer <sven.van.der.meer@ericsson.com>
-:: @version v0.7.0
+:: @version v2.0.0
::
:: DO NOT CHANGE CODE BELOW, unless you know what you are doing
#-------------------------------------------------------------------------------
##
-## Script to run the APEX REST Editor
-## - requires BASH with associative arrays, bash of at least version 4
-## - for BASH examples with arrays see for instance: http://www.artificialworlds.net/blog/2012/10/17/bash-associative-array-examples/
-## - adding a new app means to add a command to APEX_APP_MAP and a description to APEX_APP_DESCR_MAP using same/unique key
+## Script to run the APEX REST Editor, calls apexApps.sh
##
## @package org.onap.policy.apex
## @author Sven van der Meer <sven.van.der.meer@ericsson.com>
-## @version v0.7.0
+## @version v2.0.0
##
## DO NOT CHANGE CODE BELOW, unless you know what you are doing
<dependencySets>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
- <outputDirectory>/lib</outputDirectory>
+ <outputDirectory>lib</outputDirectory>
<unpack>false</unpack>
<scope>runtime</scope>
<includes>
</dependencySet>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
- <outputDirectory>/war</outputDirectory>
+ <outputDirectory>war</outputDirectory>
<unpack>false</unpack>
<scope>runtime</scope>
<includes>
<includes>
<include>*</include>
</includes>
- <outputDirectory>/bin</outputDirectory>
+ <outputDirectory>bin</outputDirectory>
<fileMode>0755</fileMode>
<lineEnding>unix</lineEnding>
<excludes>
<includes>
<include>**/*</include>
</includes>
- <outputDirectory>/etc</outputDirectory>
+ <outputDirectory>etc</outputDirectory>
<lineEnding>unix</lineEnding>
<excludes>
<exclude>*.formatted</exclude>
<includes>
<include>**/*</include>
</includes>
- <outputDirectory>/examples</outputDirectory>
+ <outputDirectory>examples</outputDirectory>
<lineEnding>unix</lineEnding>
<excludes>
<exclude>*.formatted</exclude>
<includes>
<include>**/*</include>
</includes>
- <outputDirectory>/etc</outputDirectory>
+ <outputDirectory>etc</outputDirectory>
<lineEnding>unix</lineEnding>
<excludes>
<exclude>*.formatted</exclude>
<includes>
<include>**/*</include>
</includes>
- <outputDirectory>/examples</outputDirectory>
+ <outputDirectory>examples</outputDirectory>
<lineEnding>unix</lineEnding>
<excludes>
<exclude>*.formatted</exclude>
<includes>
<include>**/*</include>
</includes>
- <outputDirectory>/lib</outputDirectory>
+ <outputDirectory>lib</outputDirectory>
<excludes>
<exclude>*.formatted</exclude>
</excludes>
<includes>
<include>readme_examples-servlet.txt</include>
</includes>
- <outputDirectory>/war</outputDirectory>
+ <outputDirectory>war</outputDirectory>
</fileSet>
</fileSets>
</assembly>
+++ /dev/null
-${project.version}
\ No newline at end of file
</exclusion>
</exclusions>
</dependency>
- <dependency>
- <groupId>org.apache.curator</groupId>
- <artifactId>curator-recipes</artifactId>
- <version>4.0.1</version>
- </dependency>
</dependencies>
<profiles>
</distributionManagement>
</profile>
</profiles>
-</project>
\ No newline at end of file
+</project>
</exclusion>
<exclusion>
<groupId>com.github.jnr</groupId>
- <artifactId>jnr-posix:</artifactId>
- </exclusion>
- <exclusion>
- <groupId>com.github.jnr</groupId>
- <artifactId>jnr-posix:</artifactId>
+ <artifactId>jnr-posix</artifactId>
</exclusion>
<exclusion>
<groupId>com.github.jnr</groupId>
</distributionManagement>
</profile>
</profiles>
-</project>
\ No newline at end of file
+</project>
<adsite-main-dir>${project.basedir}/src</adsite-main-dir>
<adsite-tools-wsclients-dir>${project.basedir}/tools/simple-wsclient/src</adsite-tools-wsclients-dir>
<adsite-tools-common-dir>${project.basedir}/tools/tools-common/src</adsite-tools-common-dir>
- <adsite-apps-uservice-test-dir>${project.basedir}/apps/apps.uservice/apps.uservice-test/src</adsite-apps-uservice-test-dir>
+
<adsite-examples-myfirstpolicy-dir>${project.basedir}/examples/examples-myfirstpolicy/src</adsite-examples-myfirstpolicy-dir>
<adsite-examples-decisionmaker-dir>${project.basedir}/examples/examples-decisionmaker/src</adsite-examples-decisionmaker-dir>
<adsite-examples-pcvs-dir>${project.basedir}/examples/examples-pcvs/src</adsite-examples-pcvs-dir>
<adsite-examples-onap-vcpe-dir>${project.basedir}/examples/examples-onap-vcpe/src</adsite-examples-onap-vcpe-dir>
<adsite-examples-servlet-dir>${project.basedir}/examples/examples-servlet/src</adsite-examples-servlet-dir>
+ <adsite-packages-docker-dir>${project.basedir}/packages/apex-pdp-docker/src</adsite-packages-docker-dir>
+
<adsite-plugins-event-protocol-dir>${project.basedir}/plugins/plugins-event/plugins-event-protocol/src</adsite-plugins-event-protocol-dir>
<adsite-plugins-event-protocol-jms-dir>${project.basedir}/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src</adsite-plugins-event-protocol-jms-dir>
<adsite-plugins-event-protocol-xml-dir>${project.basedir}/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-xml/src</adsite-plugins-event-protocol-xml-dir>
<adsite-plugins-executor-jruby-dir>${project.basedir}/plugins/plugins-executor/plugins-executor-jruby/src</adsite-plugins-executor-jruby-dir>
<adsite-plugins-executor-jython-dir>${project.basedir}/plugins/plugins-executor/plugins-executor-jython/src</adsite-plugins-executor-jython-dir>
<adsite-plugins-executor-mvel-dir>${project.basedir}/plugins/plugins-executor/plugins-executor-mvel/src</adsite-plugins-executor-mvel-dir>
+
<adsite-services-engine-dir>${project.basedir}/services/services-engine/src</adsite-services-engine-dir>
</properties>
<distributionManagement>
<adsite-main-dir>${project.basedir}/src</adsite-main-dir>
<adsite-tools-wsclients-dir>${project.basedir}/tools/simple-wsclient/src</adsite-tools-wsclients-dir>
<adsite-tools-common-dir>${project.basedir}/tools/tools-common/src</adsite-tools-common-dir>
- <adsite-apps-uservice-test-dir>${project.basedir}/apps/apps.uservice/apps.uservice-test/src</adsite-apps-uservice-test-dir>
+
<adsite-examples-myfirstpolicy-dir>${project.basedir}/examples/examples-myfirstpolicy/src</adsite-examples-myfirstpolicy-dir>
<adsite-examples-decisionmaker-dir>${project.basedir}/examples/examples-decisionmaker/src</adsite-examples-decisionmaker-dir>
<adsite-examples-pcvs-dir>${project.basedir}/examples/examples-pcvs/src</adsite-examples-pcvs-dir>
<adsite-examples-onap-vcpe-dir>${project.basedir}/examples/examples-onap-vcpe/src</adsite-examples-onap-vcpe-dir>
<adsite-examples-servlet-dir>${project.basedir}/examples/examples-servlet/src</adsite-examples-servlet-dir>
+ <adsite-packages-docker-dir>${project.basedir}/packages/apex-pdp-docker/src</adsite-packages-docker-dir>
+
<adsite-plugins-event-protocol-dir>${project.basedir}/plugins/plugins-event/plugins-event-protocol/src</adsite-plugins-event-protocol-dir>
<adsite-plugins-event-protocol-jms-dir>${project.basedir}/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-jms/src</adsite-plugins-event-protocol-jms-dir>
<adsite-plugins-event-protocol-xml-dir>${project.basedir}/plugins/plugins-event/plugins-event-protocol/plugins-event-protocol-xml/src</adsite-plugins-event-protocol-xml-dir>
<adsite-plugins-executor-jruby-dir>${project.basedir}/plugins/plugins-executor/plugins-executor-jruby/src</adsite-plugins-executor-jruby-dir>
<adsite-plugins-executor-jython-dir>${project.basedir}/plugins/plugins-executor/plugins-executor-jython/src</adsite-plugins-executor-jython-dir>
<adsite-plugins-executor-mvel-dir>${project.basedir}/plugins/plugins-executor/plugins-executor-mvel/src</adsite-plugins-executor-mvel-dir>
+
<adsite-services-engine-dir>${project.basedir}/services/services-engine/src</adsite-services-engine-dir>
</attributes>
</configuration>
*/
/**
- * Provides a generic externally-facing {@link ApexEvent} class that can be sent into an APEX engine
- * and processed by an APEX engine. It provides the producer {@link ApexEventProducer} producer and
- * {@link ApexEventConsumer} consumer interfaces that APEX uses to send events to and receive events
- * from other systems. It also provides the {@link ApexEventConverter} interface that can be
+ * Provides a generic externally-facing ApexEvent class that can be sent into an APEX engine
+ * and processed by an APEX engine. It provides the producer ApexEventProducer producer and
+ * ApexEventConsumer consumer interfaces that APEX uses to send events to and receive events
+ * from other systems. It also provides the ApexEventConverter interface that can be
* implemented by plugins that wish to convert some external event format into the APEX event
* format. It also provides a periodic event generator that can be used to send periodic events into
* an APEX engine for triggering of policies to carry out housekeeping tasks.
*/
/**
- * Provides Java APIs for APEX engines at runtime. The {@link EngineService} is used to start, stop
- * and manage APEX engines. {@link EngineServiceEventInterface} is used to send events to an APEX
- * engine. {@link ApexEventListener} interface is used to receive events from an APEX engine.
+ * Provides Java APIs for APEX engines at runtime. The EngineService is used to start, stop
+ * and manage APEX engines. EngineServiceEventInterface is used to send events to an APEX
+ * engine. ApexEventListener interface is used to receive events from an APEX engine.
*
* @author Liam Fallon (liam.fallon@ericsson.com)
*/
/**
* Constructor to create a carrier technology parameters instance with the name of a sub class of this class and
* register the instance with the parameter service.
- *
- * @param parameterClassName the class name of a sub class of this class
*/
public CarrierTechnologyParameters() {
super();
*/
/**
- * Implements parameter handling for all parameters in APEX. It uses specializations of (@link
- * {@link org.onap.policy.apex.model.basicmodel.service.AbstractParameters} for all parameters and
- * works with {@link org.onap.policy.apex.model.basicmodel.service.ParameterService} for storing and
- * finding parameters.
+ * Implements parameter handling for all parameters in APEX.
+ * It uses specializations of the class <code>AbstractParameters</code> (basic model) for all parameters.
+ * It works with <code>ParameterService</code> (basic model) for storing and finding parameters.
*
* @author Liam Fallon (liam.fallon@ericsson.com)
*/
== Resources
* APEX Documentation hosted on Github: link:https://ericsson.github.io/apex-docs[]
-* APEX source code repo hosted on Github: link:https://github.com/Ericsson/apex[]
-* Issue Management (source and documentation): link:https://github.com/Ericsson/apex/issues[]
+* APEX source code repository hosted by ONAP: link:https://gerrit.onap.org/r/#/admin/projects/policy/apex-pdp[]
+* Issue Management (source and documentation, ONAP JIRA, requires a Linux Foundation ID): link:https://jira.onap.org/projects/POLICY/issues[]
* List of APEX publications: link:https://ericsson.github.io/apex-docs/apex-publications.html[]
For instance, running the tool with the __Sample Domain__ policy model as:
[source%nowrap,sh]
----
-apexApps.sh tpl-event-json -m $APEX_HOME/examples/models/SampleDomain/SamplePolicyModelJAVA.json -t stimuli
+apexApps.sh model-2-cli -m $APEX_HOME/examples/models/SampleDomain/SamplePolicyModelJAVA.json
----
will produce the following status messages:
[source%nowrap,sh]
----
+gen-model2event v{release-version} - generates JSON templates for events generated from a policy model
usage: gen-model2event
-h,--help prints this help and usage screen
-m,--model <MODEL-FILE> set the input policy model file
----
usage: org.onap.policy.apex.auth.clieditor.ApexCLIEditorMain [options...]
options
-
-a,--model-props-file <MODEL_PROPS_FILE> name of the apex model properties file to use
-c,--command-file <COMMAND_FILE> name of a file containing editor commands to run into the editor
-h,--help outputs the usage of this command
[source%nowrap,sh]
----
-usage: org.onap.policy.apex.services.client.deployment.rest.ApexDeploymentRestMain [options...]
--h,--help outputs the usage of this command
--p,--port <PORT> port to use for the Apex Services REST calls
--t,--time-to-live <TIME_TO_LIVE> the amount of time in seconds that the server will run for before terminating
+usage: org.onap.policy.apex.client.deployment.rest.ApexDeploymentRestMain [options...]
+-h,--help outputs the usage of this command
+-p,--port <PORT> port to use for the Apex Services REST calls
+-t,--time-to-live <TIME_TO_LIVE> the amount of time in seconds that the server will run for before terminating
+
----
If the Deployment Client is started without any arguments the final messages will look similar to this:
[source%nowrap,sh]
----
+Apex Services REST endpoint (ApexDeploymentRestMain: Config=[ApexDeploymentRestParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=READY) starting at http://localhost:18989/apexservices/ . . .
+Sep 05, 2018 11:27:09 PM org.glassfish.grizzly.http.server.NetworkListener start
+INFO: Started listener bound to [localhost:18989]
+Sep 05, 2018 11:27:09 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Apex Services REST endpoint (ApexDeploymentRestMain: Config=[ApexDeploymentRestParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=RUNNING) started at http://localhost:18989/apexservices/
----
[source%nowrap,sh]
----
-usage: org.onap.policy.apex.services.client.monitoring.rest.ApexMonitoringRestMain [options...]
--h,--help outputs the usage of this command
--p,--port <PORT> port to use for the Apex Services REST calls
--t,--time-to-live <TIME_TO_LIVE> the amount of time in seconds that the server will run for before terminating
+usage: org.onap.policy.apex.client.monitoring.rest.ApexMonitoringRestMain [options...]
+-h,--help outputs the usage of this command
+-p,--port <PORT> port to use for the Apex Services REST calls
+-t,--time-to-live <TIME_TO_LIVE> the amount of time in seconds that the server will run for before terminating
----
If the Monitoring Client is started without any arguments the final messages will look similar to this:
[source%nowrap,sh]
----
+Apex Services REST endpoint (ApexMonitoringRestMain: Config=[ApexMonitoringRestParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=READY) starting at http://localhost:18989/apexservices/ . . .
+Sep 05, 2018 11:26:20 PM org.glassfish.grizzly.http.server.NetworkListener start
+INFO: Started listener bound to [localhost:18989]
+Sep 05, 2018 11:26:20 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Apex Services REST endpoint (ApexMonitoringRestMain: Config=[ApexMonitoringRestParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=RUNNING) started at http://localhost:18989/apexservices/
----
- `apexEngine.sh` - this script will
** Test if `$APEX_USER` is set and if the user exists, terminate with an error otherwise
- ** Test if `$APEX_HOME` is set. If not set, it will use the default setting as `/opt/ericsson/apex/apex`.
+ ** Test if `$APEX_HOME` is set. If not set, it will use the default setting as `/opt/app/policy/apex-pdp/apex-pdp`.
Then the set directory is tested to exist, the script will terminate if not.
** When all tests are passed successfully, the script will call `apexApps.sh` with arguments to start the APEX engine.
- `apexApps.sh engine` - this is the general APEX application launcher, which will
----
usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]
options
- -c,--config-file <CONFIG_FILE> the full path to the configuration file to use,
- the configuration file must be a Json
- file containing the Apex configuration parameters
- -h,--help outputs the usage of this command
- -m,--model-file <MODEL_FILE> the full path to the model file to use,
- if set it overrides the model file set in the
- configuration file
- -v,--version outputs the version of Apex
+-c,--config-file <CONFIG_FILE> the full path to the configuration file to use, the configuration file must be a Json file
+ containing the Apex configuration parameters
+-h,--help outputs the usage of this command
+-m,--model-file <MODEL_FILE> the full path to the model file to use, if set it overrides the model file set in the
+ configuration file
+-v,--version outputs the version of Apex
----
[source%nowrap,sh]
----
-usage: org.onap.policy.apex.services.client.full.rest.ApexServicesRestMain [options...]
--h,--help outputs the usage of this command
--p,--port <PORT> port to use for the Apex Services REST calls
--t,--time-to-live <TIME_TO_LIVE> the amount of time in seconds that the server will run for before terminating
+usage: org.onap.policy.apex.client.full.rest.ApexServicesRestMain [options...]
+-h,--help outputs the usage of this command
+-p,--port <PORT> port to use for the Apex Services REST calls
+-t,--time-to-live <TIME_TO_LIVE> the amount of time in seconds that the server will run for before terminating
+
----
If the Full Client is started without any arguments the final messages will look similar to this:
[source%nowrap,sh]
----
+Apex Editor REST endpoint (ApexServicesRestMain: Config=[ApexServicesRestParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=READY) starting at http://localhost:18989/apexservices/ . . .
+Sep 05, 2018 11:28:28 PM org.glassfish.grizzly.http.server.NetworkListener start
+INFO: Started listener bound to [localhost:18989]
+Sep 05, 2018 11:28:28 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Apex Editor REST endpoint (ApexServicesRestMain: Config=[ApexServicesRestParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=RUNNING) started at http://localhost:18989/apexservices/
----
//
== Introduction to APEX Engine and Applications
-The core of APEX is the APEX Engine, also known as the APEX Policy Engine.
+The core of APEX is the APEX Engine, also known as the APEX Policy Engine or the APEX PDP (since it is in fact a Policy Decision Point).
Beside this engine, an APEX system comes with a few applications intended to help with policy authoring, deployment, and execution.
The engine itself and most applications are started from the command line with command line arguments.
Some applications require an installation on a webserver, as for instance the REST Editor.
Those applications can be accessed via a web browser.
-Starting with APEX version 0.5.6, we also provide plugins for Eclipse realizing a policy development environment.
-Those plugins support the main APEX policy language.
-Other, higher-level, policy languages will be added in future versions along with their Eclipse plugins.
-Furthermore, we are planning to provide a backend supporting the Language Server Protocol (LSP).
-This backend, run as a server, will allow to join any editor or IDE that is LSP-enabled to benefit from the APEX policy languages.
-
-Last not least, one can use the available APEX APIs and applications to develop other applications as required.
+You can also use the available APEX APIs and applications to develop other applications as required.
This includes policy languages (and associated parsers and compilers / interpreters), GUIs to access APEX or to define policies, clients to connect to APEX, etc.
-Separate documentation will be available in APEX releases addressing this type of applications.
-For this documentation, we assume an installation of APEX as a full system (i.e. not minimal) of version 0.5.6 or higher.
+For this documentation, we assume an installation of APEX as a full system based on a current ONAP release.
== CLI on Unix, Windows, and Cygwin
A note on APEX CLI applications: all applications and the engine itself have been deployed and tested on different operating systems: Red Hat, Ubuntu, Debian, Mac OSX, Windows, Cygwin.
The main items here are:
- For UNIX systems (RHL, Ubuntu, Debian, Mac OSX), the provided bash scripts work as expected
- with absolute paths (e.g. `/opt/ericsson/apex/apex-{release-version}/examples`),
+ with absolute paths (e.g. `/opt/app/policy/apex-pdp/apex-pdp-{release-version}/examples`),
indirect and linked paths (e.g. `../apex/apex`),
and path substitutions using environment settings (e.g. `$APEX_HOME/bin/`)
- For Windows systems, the provided batch files (`.bat`) work as expected with
[source%nowrap,sh]
----
-usage: org.onap.policy.apex.auth.rest.ApexEditorMain [options...]
+usage: org.onap.policy.apex.client.editor.rest.ApexEditorMain [options...]
-h,--help outputs the usage of this command
--l,--listen <ADDRESS> the IP address to listen on. Default value is 0.0.0.0 to listen on all available
- addresses. Use value 'localhost' to restrict access to the local machine only.
+-l,--listen <ADDRESS> the IP address to listen on. Default value is localhost to restrict access to the
+ local machine only.
-p,--port <PORT> port to use for the Apex RESTful editor REST calls.
-t,--time-to-live <TIME_TO_LIVE> the amount of time in seconds that the server will run for before terminating. Default
value is -1 to run indefinitely.
[source%nowrap,sh]
----
+Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=READY) starting at http://localhost:18989/apexservices/ . . .
+Sep 05, 2018 11:24:30 PM org.glassfish.grizzly.http.server.NetworkListener start
+INFO: Started listener bound to [localhost:18989]
+Sep 05, 2018 11:24:30 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
-Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://0.0.0.0:18988/apex/, TTL=-1sec], State=RUNNING) started at http://0.0.0.0:18988/apex/
+Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=RUNNING) started at http://localhost:18989/apexservices/
----
The last line states the URL on which the REST Editor can be accessed.
-The example above stated `http://0.0.0.0:18988/apex/`.
-In a web browser use the URL `http://localhost:18988` and the REST Editor will start.
+The example above stated `http://0.0.0.0:18989/apex/`.
+In a web browser use the URL `http://localhost:18989` and the REST Editor will start.
- Windows: `C:\dev\apex`
- Cygwin: `/cygdrive/c/dev/apex`
+
+[IMPORTANT]
+.A Build requires ONAP Nexus
+====
+APEX has a dependency to ONAP parent projects.
+You might need to adjust your Maven M2 settings.
+The most current settings can be found in the ONAP oparent repo: link:https://git.onap.org/oparent/plain/settings.xml[Settings].
+====
+
[IMPORTANT]
.A Build needs Space
====
Stage the APEX web site.
The target folder for the staged site is
-- Unix: `/usr/local/src/apex/target/gh-pages`
-- Windows: `C:\dev\apex\target\gh-pages`
-- Cygwin: `/cygdrive/c/dev/apex/target/gh-pages`
+- Unix: `/usr/local/src/apex/target/ad-site`
+- Windows: `C:\dev\apex\target\ad-site`
+- Cygwin: `/cygdrive/c/dev/apex/target/ad-site`
Once the web site is staged, copy the full site to a folder of choice or into a web server.
[source%nowrap,sh]
----
cd /usr/local/src/apex
-rm -fr target/gh-pages
+rm -fr target/ad-site
----
|
[source%nowrap,bat]
----
c:
cd \dev\apex
-rmdir /s /q target\gh-pages
+rmdir /s /q target\ad-site
----
|
[source%nowrap,sh]
----
cd /cygdrive/c/dev/apex
-rm -fr target/gh-pages
+rm -fr target/ad-site
----
|====================
----
|====================
-The build takes 2-3 minutes on a standard development laptop.
+The build takes about 6 minutes on a standard development laptop.
It should run through without errors, but with a lot of messages from the build process.
When Maven is finished with the build, the final screen should look similar to this (omitting some `success` lines):
|
[source%nowrap,sh,numbered]
----
-# cd modules/apex-apps/apex-apps.uservice/apex-apps.uservice-packaging/apex-apps.uservice-package-full/target
+# cd packages/apex-pdp-package-full/target
# ls -l
----
|
[source%nowrap,bat,numbered]
----
->cd modules\apex-apps\apex-apps.uservice\apex-apps.uservice-packaging\apex-apps.uservice-package-full\target
+>cd packages\apex-pdp-package-full\target
>dir
----
----
|====================
-The build takes about 5-6 minutes with tests on a standard development laptop.
+The build takes about 10 minutes with tests on a standard development laptop.
It should run through without errors, but with a lot of messages from the build process.
If build with tests (i.e. without `-DskipTests`), there will be error messages and stack trace prints from some tests.
This is normal, as long as the build finishes successful.
-
-When Maven is finished with the build, the final screen should look similar to this (omitting some `success` lines):
-
-[source%nowrap,sh,numbered,subs="attributes+"]
-----
-include::{adsite-main-dir}/site-docs/adoc/fragments/screens/mvn-install-skiptests.txt[mvn build, with tests]
-----
-
-The build will have created all artifacts required for an APEX installation.
-
The JAutoDoc and Checkstyle Eclipse Plugins and tools are useful and remove a lot of the tedium from code documentation.
Use them to check your code and please fix any issues they identify with your code.
-The templates and examples on this page have been tested on a clean installation of Eclipse Oxygen Release (4.7.0) on Ubuntu Linux 16.04 LTS.
-
-The Apex settings referred to on this page are also available in the apex-model GIT repository in the APEX model repository in apex-model/apex-model.build-tools/src/main/resources/`.
+Since APEX is part of ONAP, the general ONAP rules and guideliness for development do apply.
+Please see link:https://wiki.onap.org/display/DW/Developing+ONAP[ONAP Wiki] for details.
Select "Checkstyle Plug-in" when the search returns and install it.
Note that "Checkstyle Plug-in" may not be the first result in the list of items returned.
-You must configure Checkstyle in order to get the most out of it.
-There are two built-in style templates in Checkstyle (from Oracle and Google) but user will almost certainly wish to tweak these.
+For APEX, the ONAP checkstyle rules do apply.
+The configuration is part of the ONAP parent.
+See link:https://git.onap.org/oparent/plain/checkstyle/src/main/resources/onap-checkstyle/[ONAP Git] for details and updates.
+All settings for checkstyle are already part of the code (POM files).
That module is then used as a dependency in the __POM__ for all other modules that wish to use that checkstyle style.
For a full explanation see link:https://maven.apache.org/plugins/maven-checkstyle-plugin/examples/multi-module-config.html[the explanation of Checkstyle multi-module configuration].
-In Apex, the module `apex-model.build-tools` provides the Apex checkstyle style files as resources in `src/main/resources/checkstyle`.
-This style is a slightly tweaked version of the standard Google checkstyle style that allows longer lines and has some other checks slightly relaxed.
-Therefore, all modules that wish to use the Apex style must put the following build directive into their `pom.xml`.
-
-[source%nowrap,xml]
-----
-<plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-checkstyle-plugin</artifactId>
- <version>2.17</version>
- <dependencies>
- <dependency>
- <groupId>org.onap.policy.apex.model</groupId>
- <artifactId>apex-model.build-tools</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
- <configuration>
- <configLocation>checkstyle/apex_style_checks.xml</configLocation>
- <headerLocation>checkstyle/apex_header.txt</headerLocation>
- </configuration>
-</plugin>
-----
-
+For APEX, the ONAP checkstyle rules do apply.
+The configuration is part of the ONAP parent.
+See link:https://git.onap.org/oparent/plain/checkstyle/src/main/resources/onap-checkstyle/[ONAP Git] for details and updates.
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-[source%nowrap,text,subs="attributes+"]
-----
-include::{apex-main-dir}/checkstyle/apex_header.txt[]
-----
\ No newline at end of file
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-[source%nowrap,xml,subs="attributes+"]
-----
-include::{apex-main-dir}/checkstyle/apex_style_checks.xml[]
-----
\ No newline at end of file
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-[source%nowrap,xml,subs="attributes+"]
-----
-include::{apex-main-dir}/eclipse/ApexCheckstyleSettings.xml[]
-----
\ No newline at end of file
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-[source%nowrap,xml,subs="attributes+"]
-----
-include::{apex-main-dir}/eclipse/ApexCleanUpTemplate.xml[]
-----
\ No newline at end of file
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-[source%nowrap,xml,subs="attributes+"]
-----
-include::{apex-main-dir}/eclipse/ApexFormatterProfile.xml[]
-----
\ No newline at end of file
== Example Configuration for Logging Logic
-The following example shows a configuration that logs policy logic to standard out (__info__) and a file (__debug__)
-All other APEX components are logging to a file (__debug__) and standard out (__error__).
+The following example shows a configuration that logs policy logic to standard out and a file (__info__).
+All other APEX components are logging to a file (__debug__)..
This configuration an be used in a pre-production phase with the APEX engine still running in a separate terminal to monitor policy execution.
-This logback configuration is in the APEX installation as `etc/logback-logic.xml`
+This logback configuration is in the APEX installation as `etc/logback-logic.xml`.
[source%nowrap,xml]
----
<configuration debug="false">
- <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
+ <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
- <contextName>Apex</contextName>
- <property name="VAR_LOG" value="/var/log/ericsson/apex/" />
+ <contextName>Apex</contextName>
+ <property name="VAR_LOG" value="/var/log/onap/policy/apex-pdp/" />
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern>
- </encoder>
- </appender>
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <Pattern>%d %contextName [%t] %level %logger{36} - %msg%n</Pattern>
+ </encoder>
+ </appender>
- <appender name="FILE" class="ch.qos.logback.core.FileAppender">
- <file>${VAR_LOG}/apex.log</file>
- <encoder>
- <pattern>
- %d %-5relative [procId=${processId}] [%thread] %-5level%logger{26} - %msg %n %ex{full}
- </pattern>
- </encoder>
- </appender>
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+ <file>${VAR_LOG}/apex.log</file>
+ <encoder>
+ <pattern>
+ %d %-5relative [procId=${processId}] [%thread] %-5level%logger{26} - %msg %n %ex{full}
+ </pattern>
+ </encoder>
+ </appender>
- <appender name="POLICY_APPENDER_STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>policy: %msg\n</pattern>
- </encoder>
- </appender>
+ <appender name="POLICY_APPENDER_STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>policy: %msg\n</pattern>
+ </encoder>
+ </appender>
- <root level="error">
- <appender-ref ref="STDOUT" />
- </root>
+ <root level="error">
+ <appender-ref ref="STDOUT" />
+ </root>
-<logger name="org.onap.policy.apex" level="debug" additivity="false">
- <appender-ref ref="FILE" />
-</logger>
+ <logger name="org.onap.policy.apex" level="debug" additivity="false">
+ <appender-ref ref="FILE" />
+ </logger>
- <logger name="org.onap.policy.apex.executionlogging" level="debug" additivity="false">
- <appender-ref ref="POLICY_APPENDER_STDOUT" />
- <appender-ref ref="FILE" />
- </logger>
+ <logger name="org.onap.policy.apex.executionlogging" level="info" additivity="false">
+ <appender-ref ref="POLICY_APPENDER_STDOUT" />
+ <appender-ref ref="FILE" />
+ </logger>
</configuration>
----
[source%nowrap,xml]
----
<configuration debug="false">
- <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
-
- <contextName>Apex</contextName>
- <property name="VAR_LOG" value="/var/log/ericsson/apex/" />
-
- <appender name="FILE" class="ch.qos.logback.core.FileAppender">
- <file>${VAR_LOG}/apex.log</file>
- <encoder>
- <pattern>
- %d %-5relative [procId=${processId}] [%thread] %-5level%logger{26} - %msg %n %ex{full}
- </pattern>
- </encoder>
- </appender>
-
- <root level="debug">
- <appender-ref ref="FILE" />
- </root>
-
- <logger name="org.onap.policy.apex.executionlogging" level="debug" additivity="false">
- <appender-ref ref="FILE" />
- </logger>
+ <statusListener class="ch.qos.logback.core.status.NopStatusListener" />
+
+ <contextName>Apex</contextName>
+ <property name="VAR_LOG" value="/var/log/onap/policy/apex-pdp/" />
+
+ <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+ <file>${VAR_LOG}/apex.log</file>
+ <encoder>
+ <pattern>
+ %d %-5relative [procId=${processId}] [%thread] %-5level%logger{26} - %msg %n %ex{full}
+ </pattern>
+ </encoder>
+ </appender>
+
+ <root level="debug">
+ <appender-ref ref="FILE" />
+ </root>
+
+ <logger name="org.onap.policy.apex.executionlogging" level="debug" additivity="false">
+ <appender-ref ref="FILE" />
+ </logger>
</configuration>
----
The logger for policy logic is `org.onap.policy.apex.executionlogging`.
The following example defines
-- a new appender for policy logic logging to standard out using a very simple pattern (simply the actual message)
-- a logger for policy logic to standard out using the new appender
-- a logger for policy logic to the standard `FILE` appender
+- a new appender for standard out using a very simple pattern (simply the actual message)
+- a logger for policy logic to standard out using the new appender and the already described file appender.
[source%nowrap,xml]
----
</encoder>
</appender>
-<appender name="POLICY_APPENDER_STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>policy: %msg\n</pattern>
- </encoder>
-</appender>
-
<logger name="org.onap.policy.apex.executionlogging" level="info" additivity="false">
<appender-ref ref="POLICY_APPENDER_STDOUT" />
<appender-ref ref="FILE" />
[source%nowrap,xml]
----
<logger name="org.onap.policy.apex.executionlogging.TaskExecutionLogging" level="TRACE" additivity="false">
- <appender-ref ref="STDOUT" />
+ <appender-ref ref="POLICY_APPENDER_STDOUT" />
</logger>
----
== Standard Logging Configuration
The standard logging configuration defines a context __APEX__, which is used in the standard output pattern.
-The location for log files is defined in the property `VAR_LOG` and set to `/var/log/apex`.
+The location for log files is defined in the property `VAR_LOG` and set to `/var/log/onap/policy/apex-pdp`.
The standard status listener is set to __NOP__ and the overall logback configuration is set to no debug.
[source%nowrap,xml,numbered]
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
<contextName>Apex</contextName>
- <property name="VAR_LOG" value="/var/log/ericsson/apex/" />
+ <property name="VAR_LOG" value="/var/log/onap/policy/apex-pdp/" />
...appenders
...loggers
</root>
----
-The first appender is called `FILE`.
+The second appender is called `FILE`.
It writes logs to a file `apex.log`.
[source%nowrap,xml,numbered]
----
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${VAR_LOG}/apex.log</file>
<encoder>
- <pattern>
- %d %-5relative [procId=${processId}] [%thread] %-5level%logger{26} - %msg %n %ex{full}
- </pattern>
+ <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level %logger{26} - %msg %n %ex{full}</pattern>
</encoder>
</appender>
----
-The first appender is called `CTXT_FILE`.
+The third appender is called `CTXT_FILE`.
It writes logs to a file `apex_ctxt.log`.
[source%nowrap,xml,numbered]
----
<appender name="CTXT_FILE" class="ch.qos.logback.core.FileAppender">
<file>${VAR_LOG}/apex_ctxt.log</file>
<encoder>
- <pattern>
- %d %-5relative [procId=${processId}] [%thread] %-5level%logger{26} - %msg %n %ex{full}
- </pattern>
+ <pattern>%d %-5relative [procId=${processId}] [%thread] %-5level %logger{26} - %msg %n %ex{full}</pattern>
</encoder>
</appender>
----
The last definitions are for specific loggers.
-The first logger captures all standard APEX classes, appends logs to `STDOUT` with the log level __info__.
-The second logger capture all standard APEX classes, appends logs to `FILE` with log level __info__.
-The third logger captures context monitoring classes, appends logs to `CTXT_FILE` with log level __trace__.
+The first logger captures all standard APEX classes.
+It is configured for log level __info__ and uses the standard output and file appenders.
+The second logger captures APEX context classes responsible for context monitoring.
+It is configured for log level __trace__ and uses the context file appender.
[source%nowrap,xml,numbered]
----
The example details the policy background, shows how to use the REST Editor to create a policy, and provides details for running the policies.
The documentation can be found:
-* link:https://ericsson.github.io/apex-docs/modules/apex-domains/apex-domains.myfirstpolicy/MyFirstPolicyHowto.html[My-First-Policy on the APEX site]
+* link:https://ericsson.github.io/apex-docs/modules/examples/examples-myfirstpolicy/MyFirstPolicyHowto.html[My-First-Policy on the APEX site]
* link:https://ericsson.github.io/apex-docs/docs-apex/html/HowTo-MyFirstPolicy.html[Stand-alone HTML]
* link:https://ericsson.github.io/apex-docs/docs-apex/pdf/HowTo-MyFirstPolicy.pdf[Stand-alone PDF]
The policy model here demonstrates virtually all APEX features: local context and policies controlling it, task selection logic and multiple tasks in a single state, AVRO schemas for context, AVOR schemas for events (trigger and local), and a CLI editor specification of the policy.
The documentation can be found:
-* link:https://ericsson.github.io/apex-docs/modules/apex-domains/apex-domains.pcvs/vpnsla/policy.html[VPN SLA Policy on the APEX site]
+* link:https://ericsson.github.io/apex-docs/modules/examples/examples-pcvs/vpnsla/policy.html[VPN SLA Policy on the APEX site]
== Decision Maker
It also has local context to remember past decisions, and shows how to use that to no make the same decision twice in a row.
The documentation can be found:
-* link:https://ericsson.github.io/apex-docs/modules/apex-domains/apex-domains.decisionmaker/index.html[Decision Maker on APEX site]
+* link:https://ericsson.github.io/apex-docs/modules/examples/examples-decisionmaker/index.html[Decision Maker on APEX site]
The examples in this document assume that the APEX source repositories are cloned to:
-- Unix, Cygwin: `/usr/local/src/apex`
-- Windows: `C:\dev\apex`
-- Cygwin: `/cygdrive/c/dev/apex`
+- Unix, Cygwin: `/usr/local/src/apex-pdp`
+- Windows: `C:\dev\apex-pdp`
+- Cygwin: `/cygdrive/c/dev/apex-pdp`
+
+[IMPORTANT]
+.A Build requires ONAP Nexus
+====
+APEX has a dependency to ONAP parent projects.
+You might need to adjust your Maven M2 settings.
+The most current settings can be found in the ONAP oparent repo: link:https://git.onap.org/oparent/plain/settings.xml[Settings].
+====
[IMPORTANT]
.A Build needs Space
|
[source%nowrap,sh,numbered]
----
-# cd /usr/local/src/apex
+# cd /usr/local/src/apex-pdp
# mvn clean install -DskipTests
----
|
[source%nowrap,bat,numbered]
----
>c:
->cd \dev\apex
+>cd \dev\apex-pdp
>mvn clean install -DskipTests
----
|====================
|
[source%nowrap,sh,numbered]
----
-# cd modules/apex-apps/apex-apps.uservice/apex-apps.uservice-packaging/apex-apps.uservice-package-full/target
+# cd packages/apex-pdp-package-full/target
# ls -l
----
|
[source%nowrap,bat,numbered]
----
->cd modules\apex-apps\apex-apps.uservice\apex-apps.uservice-packaging\apex-apps.uservice-package-full\target
+>cd packages\apex-pdp-package-full\target
>dir
----
[source%nowrap,bash,numbered]
----
# export APEX_USER=apexuser
-# cd /opt/ericsson/apex/apex
+# cd /opt/app/policy/apex-pdp/apex-pdp
# export APEX_HOME=`pwd`
----
[source%nowrap,tcsh,numbered]
----
# setenv APEX_USER apexuser
-# cd /opt/ericsson/apex/apex
+# cd /opt/app/policy/apex-pdp/apex-pdp
# setenv APEX_HOME `pwd`
----
|
----
# env \| grep APEX
APEX_USER=apexuser
-APEX_HOME=/opt/ericsson/apex/apex
+APEX_HOME=/opt/app/policy/apex-pdp/apex-pdp
----
|
[source%nowrap,bat,numbered,subs="attributes+"]
Edit the file `$APEX_HOME/etc/logback.xml` for any required changes.
To change the log directory change the line
-`<property name="VAR_LOG" value="/var/log/ericsson/apex/" />`
+`<property name="VAR_LOG" value="/var/log/onap/policy/apex-pdp/" />`
to
|
[source%nowrap,sh,numbered]
----
-mkdir -p /var/log/ericsson/apex
-chown -R apexuser:apexuser /var/log/ericsson/apex
+mkdir -p /var/log/onap/policy/apex-pdp
+chown -R apexuser:apexuser /var/log/onap/policy/apex-pdp
----
|
[source%nowrap,bat,numbered,subs="attributes+"]
== Running APEX in Docker
-This section explains how to create a Docker image that contains the base APEX package and shows how to run APEX in Docker.
-It also explains how to use the base APEX Docker image to create application docker images that contain both APEX and your application policies.
+Since APEX is in ONAP, we provide a full virtualization environment for the engine.
-We assume you have already installed Docker on your host.
-For instructions on how to install Docker, see the link:https://www.docker.com/community-edition[Get Started with Docker] page on the Docker web site.
+=== Run in ONAP
-=== Create the APEX Base Docker Image
+Running APEX from the ONAP docker repository only requires 2 commands:
-You need only perform this task once to create an APEX base image that you can use as a base for your applications from then on.
-This task sets up an Ubuntu Docker image and then installs Java and APEX on Ubuntu running in the Docker image.
-
-. Create an empty directory, here the directory is called `apex`, and change into that directory
-+
-[source%nowrap,bash,numbered]
-----
-# mkdir apex
-# cd apex
+. Log into the ONAP docker repo
+[source%nowrap,sh,numbered]
----
-+
-. Copy the APEX Debian package from the APEX download site into the directory
-. Open a text editor and create a file called `Dockerfile` in your directory
-. Paste the following text into the editor that is editing `Dockerfile`
-+
-[source%nowrap,bash,numbered,subs="attributes+"]
+docker login -u docker -p docker nexus3.onap.org:10003
----
-#
-# Docker file to build an image that runs APEX on Java 8 in Ubuntu
-#
-FROM ubuntu:16.04
-MAINTAINER <YOUR> <NAME> <YOUR>.<NAME>@ericsson.com
-
-RUN apt-get update && \
- apt-get upgrade -y && \
- apt-get install -y software-properties-common && \
- add-apt-repository ppa:webupd8team/java -y && \
- apt-get update && \
- echo oracle-javax8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
- apt-get install -y oracle-java8-installer
-
-RUN mkdir /packages
-COPY apex-apps.uservice-packages-{release-version}-full.deb /packages
-RUN dpkg -i packages/apex-apps.uservice-packages-{release-version}-full.deb
-RUN rm /packages/apex-apps.uservice-packages-{release-version}-full.deb
-
-ENV PATH /opt/ericsson/apex/apex/bin:$PATH
-
-RUN apt-get clean
-
-RUN chown -R apexuser:apexuser /home/apexuser/*
-WORKDIR /home/apexuser
-
+. Run the APEX docker image
+[source%nowrap,sh,numbered]
----
-+
-. Replace the fields <YOUR> and <NAME> above with your name and email address
-. Save the `Dockerfile`
-. An example working base `Dockerfile` appears below
-+
-[source%nowrap,bash,numbered,subs="attributes+"]
+docker run -it --rm nexus3.onap.org:10003/onap/policy-apex-pdp:latest
----
-#
-# Docker file to build an image that runs APEX on Java 8 in Ubuntu
-#
-FROM ubuntu:16.04
-MAINTAINER Sean Citizen sean.citizen@ericsson.com
-RUN apt-get update && \
- apt-get upgrade -y && \
- apt-get install -y software-properties-common && \
- add-apt-repository ppa:webupd8team/java -y && \
- apt-get update && \
- echo oracle-javax8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
- apt-get install -y oracle-java8-installer
-RUN mkdir /packages
-COPY apex-apps.uservice-packages-{release-version}-full.deb /packages
-RUN dpkg -i packages/apex-apps.uservice-packages-{release-version}-full.deb
-RUN rm /packages/apex-apps.uservice-packages-{release-version}-full.deb
+=== Build a Docker Image
-ENV PATH /opt/ericsson/apex/apex/bin:$PATH
+Alternatively, one can use the Dockerfile defined in the Docker package to build an image.
-RUN apt-get clean
-
-RUN chown -R apexuser:apexuser /home/apexuser/*
-WORKDIR /home/apexuser
-----
-+
-. Create and tag the base Docker image for APEX using this command
-+
-[source%nowrap,bash,numbered]
-----
-docker build -t apex/base .
-docker tag apex/base apex/base:latest
-docker tag apex/base apex/base:{release-version}
-----
-+
-. Test the APEX Docker base image with the following command, APEX will start a sample policy:
-+
-[source%nowrap,bash,numbered]
-----
-docker run --name apex --user=apexuser:apexuser -it --rm -p 12345:12345 apex/base apexEngine.sh -c examples/config/SampleDomain/Stdin2StdoutJsonEventJavascript.json
-----
-+
-. Paste the following event into the shell and the APEX Policy will process the event
-+
-[source%nowrap,json,numbered]
-----
-{
- "nameSpace": "org.onap.policy.apex.sample.events",
- "name": "Event0000",
- "version": "0.0.1",
- "source": "test",
- "target": "apex",
- "TestSlogan": "Test slogan for External Event0",
- "TestMatchCase": 0,
- "TestTimestamp": 1469781869269,
- "TestTemperature": 9080.866
-}
-----
-+
-. APEX returns the following event
-+
-[source%nowrap,json,numbered]
-----
-{
- "nameSpace" : "org.onap.policy.apex..sample.events",
- "name" : "Event0004",
- "version" : "0.0.1",
- "source" : "",
- "target" : "",
- "TestActCaseSelected" : 3,
- "TestActStateTime" : 1481215910429,
- "TestTemperature" : 9080.866,
- "TestDecideCaseSelected" : 1,
- "TestMatchCaseSelected" : 2,
- "TestTimestamp" : 1469781869269,
- "TestDecideStateTime" : 1481215910425,
- "TestMatchCase" : 0,
- "TestSlogan" : "Test slogan for External Event0",
- "TestEstablishCaseSelected" : 0,
- "TestEstablishStateTime" : 1481215910421,
- "TestMatchStateTime" : 1481215910415
-}
-----
-+
-. You now have built and tested an APEX base Docker image.
- You can connect the APEX Deployment and Monitoring servlet to this APEX engine instance. For example, assuming the APEX Deployment and Monitoring servlet is deploying on the localhost computer on port 8080 you can use the following URL:
-+
-----
-http://localhost:8080/apex-services.client-{release-version}/?hostname=0.0.0.0&port=12345
-----
-
-=== Create an APEX Application Docker Image using the APEX Base Docker Image
-
-We assume you have created an APEX application, that you wish to use static deployment, and that you have APEX metadata to add to the base APEX Docker image.
-
-. 1.Create an empty directory for your application, here the directory is called `myApplication`, and change into that directory
-+
-[source%nowrap,bash,numbered]
-----
-mkdir myApplication
-cd myApplication
-----
-+
-. Copy the directories containing your application metadata into that directory, for example, if you have three directories called `myappDirectory0`, `myappDirectory1`, and `myappDirectoryn`, you will have the following directory structure
-+
-[source%nowrap,bash,numbered]
-----
-ls | cat
-myappDirectory0
-myappDirectory1
-myappDirectoryn
-----
-+
-. Open a text editor and create a file called `Dockerfile` in your application directory
-. Paste the following text into the editor that is editing `Dockerfile`
-+
-[source%nowrap,bash,numbered]
-----
-#
-# Docker file to build an image that runs APEX Applications on Java 8 in Ubuntu
-#
-FROM apex/base:{release-version}
-MAINTAINER <YOUR> <NAME> <YOUR>.<NAME>@ericsson.com
-
-# Copy your application metadata
-COPY <MY_APP_DIRECTORY_0> /home/apexuser/<MY_APP_DIRECTORY_0>
-COPY <MY_APP_DIRECTORY_1> /home/apexuser/<MY_APP_DIRECTORY_1>
-COPY <MY_APP_DIRECTORY_N> /home/apexuser/<MY_APP_DIRECTORY_N>
-
-run chown -R apexuser:apexuser /home/apexuser/*
-----
-+
-. Edit the template fields
- .. Replace the fields <YOUR> and <NAME> with your name and email address
- .. Replace the <MY_APP_DIRECTORY_x> fields with the names of your actual application directory names, myappDirectoryx in our example here. Do this for all application directories you have.
-. Save the `Dockerfile`
-. An example working application `Dockerfile` appears below
-+
-[source%nowrap,bash,numbered]
-----
-#
-# Docker file to build an image that runs APEX Applications on Java 8 in Ubuntu
-#
-FROM apex/base:{release-version}
-MAINTAINER Sean Citizen sean.citizen@ericsson.com
-
-# Copy your application metadata
-COPY myappDirectory0 /home/apexuser/myappDirectory0
-COPY myappDirectory1 /home/apexuser/myappDirectory1
-COPY myappDirectoryn /home/apexuser/myappDirectoryn
-
-run chown -R apexuser:apexuser /home/apexuser/*
-----
-+
-. Create the Docker image for your APEX application using this command
-+
-[source%nowrap,bash,numbered]
-----
-docker build -t apex/myapplication .
-----
-+
-. Test the APEX Docker base image with the following command, APEX will start to a bash shell in the `apexuser` home directory:
-+
-[source%nowrap,bash,numbered]
-----
-docker run --name myapplication -it --rm -p 12345:12345 apex/myapplication apexBash.sh
-----
-+
-. Check that your application directories have been created, the command returns the directory list:
-+
-[source%nowrap,bash,numbered]
+.APEX Dockerfile
+[source%nowrap,sh,numbered,subs="attributes+"]
----
-> pwd
-/opt/ericsson
-> ls -l
-total 16
-drwxr-xr-x 8 apexuser apexuser 4096 Dec 9 13:28 examples
-drwxr-xr-x 2 apexuser apexuser 4096 Dec 9 13:28 myappDirectory0
-drwxr-xr-x 2 apexuser apexuser 4096 Dec 9 13:28 myappDirectory1
-drwxr-xr-x 2 apexuser apexuser 4096 Dec 9 13:28 myappDirectoryn
+include::{adsite-packages-docker-dir}/main/docker/Dockerfile[APEX Dockerfile]
----
-+
-. You now have built an APEX Application docker image and you can use the `apexEngine.sh` command to run your application using the appropriate configuration file for your application.
//
== Get the APEX Source Code
-The APEX source code is hosted in as project on Github link:https://github.com/Ericsson/apex[Ericsson:apex].
+
+The first APEX source code was hosted on Github in January 2018.
+By the end of 2018, APEX was added as a project in the ONAP Policy Framework, released later in the ONAP Casablanca release.
+
+The APEX source code is hosted in ONAP as project APEX.
The current stable version is in the master branch.
-Simply clone the master branch from Github using either HTTPS (first example below) or SSH (second example below).
+Simply clone the master branch from ONAP using HTTPS.
[source%nowrap,sh,numbered]
----
-git clone https://github.com/Ericsson/apex.git
+git clone https://gerrit.onap.org/r/policy/apex-pdp
----
-[source%nowrap,sh,numbered]
-----
-git clone git@github.com:Ericsson/apex.git
-----
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-== Installing the Web Monitoring Application
-
-APEX comes with a deployment and monitoring application realized as a servlet.
-This requires a _full_ installation of APEX.
-This requires a web server that can execute `war` web archives.
-We recommend to use link:https://tomcat.apache.org/[Apache Tomcat], however other web servers can be used as well.
-
-Install Apache Tomcat including the `Manager App`, see link:https://tomcat.apache.org/tomcat-9.0-doc/manager-howto.html#Configuring_Manager_Application_Access[V9.0 Docs] for details.
-Start the Tomcat service, or make sure that Tomcat is running.
-Locate the APEX monitoring application.
-
-[source%nowrap,sh,numbered,subs="attributes+"]
-----
-$APEX_HOME/war/apex-services.client.monitoring-{release-version}.war
-----
-
-[source%nowrap,bat,numbered,subs="attributes+"]
-----
-%APEX_HOME%\war\apex-services.client.monitoring-{release-version}.war
-----
-
-There are multiple ways to install the APEX monitoring application:
-
-- copy the `.war` file into the Tomcat `webapps` folder
-- use the Tomcat `Manager App` to deploy via the web interface
-- deploy using a REST call to Tomcat
-
-For details on how to install `war` files please consult the link:https://tomcat.apache.org/tomcat-9.0-doc/index.html[Tomcat Documentation] or the link:https://tomcat.apache.org/tomcat-9.0-doc/manager-howto.html[Manager App HOW-TO].
-Once you installed the APEX monitoring application (and wait for sufficient time for Tomcat to finalize the installation), open the `Manager App` in Tomcat.
-You should see the APEX monitoring application being installed and running.
-
-image::install-guide/tomcat-installed.png[Tomcat Application Manager with APEX Monitoring Application]
-
-In case of errors, examine the log files in the Tomcat log directory.
-In a conventional install, those log files are in the logs directory where Tomcat is installed.
-
-Once the APEX monitoring application is installed, start an APEX engine with the `SampleDomain` configuration as described above.
-Wait until the engine is fully started.
-Then open a browser (or a new tab) and use the following URL to connect to the APEX monitoring application.
-Change the values for the Tomcat port (`10080` in the example), the APEX application version (`{release-version}` in the example), and the APEX management port (`12345` in the example, taken from the example configuration) to your local settings.
-If your browser is not opened on the same host as the APEX engine runs, change `localhost` to the host name with the APEX engine.
-
-[source%nowrap,url,subs="attributes+"]
-----
-http://localhost:10080/apex-services.client-{release-version}/?hostname=localhost&port=12345
-----
-
-The browser will now show the APEX monitoring application.
-
-image::install-guide/monitoring-app.png[APEX Monitoring and Deployment Application]
-
-Now send some events to the APEX engine.
-The configuration is for standard input, so simply paste the following event into the APEX engine console.
-
-[source%nowrap,json,numbered]
-----
-{
- "nameSpace": "org.onap.policy.apex.sample.events",
- "name": "Event0000",
- "version": "0.0.1",
- "source": "test",
- "target": "apex",
- "TestSlogan": "Test slogan for External Event0",
- "TestMatchCase": 0,
- "TestTimestamp": 1469781869269,
- "TestTemperature": 9080.866
-}
-----
-
-When events are sent to APEX, the monitoring application will show all engine status changes.
-The following screen shot show the engine status after passing several events into the engine.
-
-image::install-guide/monitoring-app-status.png[APEX Monitoring: status]
-
-To terminate this setting, first use `CTRL+C` in the engine console to terminate the engine.
-Within a few seconds, the APEX monitoring application will terminate as well with a connection error:
-
-----
-Error connecting to Apex Engine Service at localhost:12345
-cound not handshake with server localhost:12345
-See detailed message in log
-----
-
-Terminate the browser now (or the tab with the application).
-Finally, if you do not want to use Tomcat for any other applications, terminate the Tomcat server as well.
-
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-== Installing the REST Editor
-
-APEX comes with a RESR Editor application realized as a servlett.
-This requires a _full_ installation of APEX.
-This requires a web server that can execute `war` web archives.
-We recommend to use link:https://tomcat.apache.org/[Apache Tomcat], however other web servers can be used as well.
-
-Install Apache Tomcat including the `Manager App`, see link:https://tomcat.apache.org/tomcat-9.0-doc/manager-howto.html#Configuring_Manager_Application_Access[V9.0 Docs] for details.
-Start the Tomcat service, or make sure that Tomcat is running.
-Locate the APEX monitoring application in your local APEX installation.
-
-[source%nowrap,sh,numbered,subs="attributes+"]
-----
-$APEX_HOME/war/apex-services.client-editor-{release-version}.war
-----
-
-[source%nowrap,bat,numbered,subs="attributes+"]
-----
-%APEX_HOME%\war\apex-services.client-editor-{release-version}.war
-----
-
-There are multiple ways to install the APEX monitoring application:
-
-- copy the `.war` file into the Tomcat `webapps` folder
-- use the Tomcat `Manager App` to deploy via the web interface
-- deploy using a REST call to Tomcat
-
-For details on how to install `war` files please consult the link:https://tomcat.apache.org/tomcat-9.0-doc/index.html[Tomcat Documentation] or the link:https://tomcat.apache.org/tomcat-9.0-doc/manager-howto.html[Manager App HOW-TO].
-Once you installed the APEX monitoring application (and wait for sufficient time for Tomcat to finalize the installation), open the `Manager App` in Tomcat.
-You should see the APEX REST Editor application being installed and running.
-
-In case of errors, examine the log files in the Tomcat log directory.
-In a conventional install, those log files are in the logs directory where Tomcat is installed.
-
-Once the APEX REST Editor is installed, open a browser (or a new tab) and use the following URL to connect to the APEX monitoring application.
-Change the values for the Tomcat port (`10080` in the example), the APEX REST EDITOR version (`{release-version}` in the example), and the APEX management port (`12345` in the example, taken from the example configuration) to your local settings.
-If your browser is not opened on the same host as the APEX engine runs, change `localhost` to the host name with the APEX engine.
-
-[source%nowrap,url,subs="attributes+"]
-----
-http://localhost:10080/apex%2Dauth.rest%2D{release-version}/
-----
-
-The browser will now show the APEX REST Editor.
-
-Terminate the browser now (or the tab with the application).
-Finally, if you do not want to use Tomcat for any other applications, terminate the Tomcat server as well.
--- /dev/null
+//
+// ============LICENSE_START=======================================================
+// Copyright (C) 2016-2018 Ericsson. All rights reserved.
+// ================================================================================
+// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
+// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
+//
+// SPDX-License-Identifier: CC-BY-4.0
+// ============LICENSE_END=========================================================
+//
+// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+//
+
+== Installing WAR Applications
+APEX comes with a set of WAR files.
+These are complete applications that can be installed and run in an application server.
+All of these applications are realized as servlets.
+You can find the WAR applications in `$APEX_HOME/war` (UNIX, Cygwin) or `%APEX_HOME%\war` (Windows).
+
+Installing and using the WAR applications requires a web server that can execute `war` web archives.
+We recommend to use link:https://tomcat.apache.org/[Apache Tomcat], however other web servers can be used as well.
+
+Install Apache Tomcat including the `Manager App`, see link:https://tomcat.apache.org/tomcat-9.0-doc/manager-howto.html#Configuring_Manager_Application_Access[V9.0 Docs] for details.
+Start the Tomcat service, or make sure that Tomcat is running.
+
+There are multiple ways to install the APEX WAR applications:
+
+- copy the `.war` file into the Tomcat `webapps` folder
+- use the Tomcat `Manager App` to deploy via the web interface
+- deploy using a REST call to Tomcat
+
+For details on how to install `war` files please consult the link:https://tomcat.apache.org/tomcat-9.0-doc/index.html[Tomcat Documentation] or the link:https://tomcat.apache.org/tomcat-9.0-doc/manager-howto.html[Manager App HOW-TO].
+Once you installed an APEX WAR application (and wait for sufficient time for Tomcat to finalize the installation), open the `Manager App` in Tomcat.
+You should see the APEX WAR application being installed and running.
+
+In case of errors, examine the log files in the Tomcat log directory.
+In a conventional install, those log files are in the logs directory where Tomcat is installed.
+
+The current APEX version provides the following WAR applications:
+
+* client-deployment-{release-version}.war - a client to deploy new policy models to a running engine
+* client-editor-{release-version}.war - the standard policy REST editor GUI
+* client-monitoring-{release-version}.war - a client for monitoring a running APEX engine
+* client-full-{release-version}.war - a full client with a one-stop-access to deployment, monitoring, and REST editor
+* examples-servlet-{release-version}.war - an example APEX servlet
+
=== Install with RPM and DPKG
The install distributions of APEX automatically install the system.
-The installation directory is `/opt/ericsson/apex`.
-Log files are located in `/var/log/ericsson/apex`.
-The latest APEX version will be available as `/opt/ericsson/apex/apex`.
+The installation directory is `/opt/app/policy/apex-pdp`.
+Log files are located in `/var/log/onap/policy/apex-pdp`.
+The latest APEX version will be available as `/opt/app/policy/apex-pdp/apex-pdp`.
For the installation, a new user `apexuser` and a new group `apexuser` will be created.
This user owns the installation directories and the log file location.
|
[source%nowrap,sh,numbered,subs="attributes+"]
----
-# sudo rpm -i apex-apps.uservice-packages-{release-version}-full.rpm
+# sudo rpm -i apex-pdp-package-full-{release-version}.rpm
********************preinst*******************
arguments 1
**********************************************
|
[source%nowrap,sh,numbered,subs="attributes+"]
----
-# sudo dpkg -i apex-apps.uservice-packages-{release-version}-full.deb
+# sudo dpkg -i apex-pdp-package-full-{release-version}.deb
Selecting previously unselected package apex-uservice.
(Reading database ... 288458 files and directories currently installed.)
-Preparing to unpack apex-apps.uservice-packages-{release-version}-full.deb ...
+Preparing to unpack apex-pdp-package-full-{release-version}.deb ...
********************preinst*******************
arguments install
**********************************************
# mkdir apex
# cd apex
# mkdir apex-full-{release-version}
-# tar xvfz ~/Downloads/apex-apps.uservice-packages-{release-version}-full.tar.gz -C apex-full-{release-version}
-# ln -s apex apex-apps.uservice-packages-{release-version}
+# tar xvfz ~/Downloads/apex-pdp-package-full-{release-version}.tar.gz -C apex-full-{release-version}
+# ln -s apex apex-pdp-package-full-{release-version}
----
Inside the new APEX folder you see the main directories: `bin`, `etc`, `examples`, `lib`, and `war`
-image::install-guide/win-extracted.png[Extracted APEX distribution]
-
Once extracted, please rename the created folder to `apex-full-{release-version}`.
This will keep the directory name in line with the rest of this documentation.
----
>c:
>cd \apex
->"\Program Files\7-Zip\7z.exe" x apex-apps.uservice-packages-{release-version}-full.tar.gz -so | "\Program Files\7-Zip\7z.exe" x -aoa -si -ttar -o"apex-full-{release-version}"
+>"\Program Files\7-Zip\7z.exe" x apex-pdp-package-full-{release-version}.tar.gz -so | "\Program Files\7-Zip\7z.exe" x -aoa -si -ttar -o"apex-full-{release-version}"
----
APEX is now installed in the folder `C:\apex\apex-full-{release-version}`.
|
[source%nowrap,sh,numbered]
----
-# cd modules/apex-apps/apex-apps.uservice/apex-apps.uservice-packaging/apex-apps.uservice-package-full/target
+# cd packages/apex-pdp-package-full/target
# ls -l
----
|
[source%nowrap,bat,numbered]
----
->cd modules\apex-apps\apex-apps.uservice\apex-apps.uservice-packaging\apex-apps.uservice-package-full\target
+>cd packages\apex-pdp-package-full\target
>dir
----
----
$APEX_HOME
- ├───bin <1>
- ├───etc <2>
+ ├───bin <1>
+ ├───etc <2>
│ ├───editor
│ ├───hazelcast
│ ├───infinispan
│ ├───config <4>
│ ├───docker <5>
│ ├───events <6>
- │ ├───models <7>
- │ └───scripts <8>
- ├───lib <9>
- │ └───applications <10>
- └───war <11>
+ │ ├───html <7>
+ │ ├───models <8>
+ │ └───scripts <9>
+ ├───lib <10>
+ │ └───applications <11>
+ └───war <12>
+
----
<1> binaries, mainly scripts (bash and bat) to start the APEX engine and applications
<2> configuration files, such as logback (logging) and third party library configurations
<4> configurations for the examples (with sub directories for individual examples)
<5> Docker files and additional Docker instructions for the exampples
<6> example events for the examples (with sub directories for individual examples)
-<7> the policy models, generated for each example (with sub directories for individual examples)
-<8> additional scripts for the examples (with sub directories for individual examples)
-<9> the library folder with all Java JAR files
-<10> applications, also known as jar with dependencies (or fat jars), individually deployable
-<11> WAR files for web applications
+<7> HTML files for some examples, e.g. the Decisionmaker example
+<8> the policy models, generated for each example (with sub directories for individual examples)
+<9> additional scripts for the examples (with sub directories for individual examples)
+<10> the library folder with all Java JAR files
+<11> applications, also known as jar with dependencies (or fat jars), individually deployable
+<12> WAR files for web applications
== Verify the APEX Installation
When APEX is installed and all settings are realized, the installation can be verified.
-=== Verify a Minimal Installation
-The minimal installation does not come with any configuration or policy model.
-It is therefore not possible to test all APEX features, or an engine running with policies.
-
-However, one can verify that the engine starts up to the point where it tries to load a configuration.
-
+=== Verify Installation - run Engine
+A simple verification of an APEX installation can be done by simply starting the APEX engine without any configuration.
On Unix (or Cygwin) start the engine using `$APEX_HOME/bin/apexEngine.sh`.
+On Windows start the engine using `%APEX_HOME%\bin\apexEngine.bat`.
The engine will fail to fully start.
However, if the output looks similar to the following line, the APEX installation is realized.
----
Starting Apex service with parameters [] . . .
start of Apex service failed: Apex configuration file was not specified as an argument
-2017-07-28 13:18:44,266 Apex [main] ERROR c.e.a.service.engine.main.ApexMain - start of Apex service failed:
-----
+2018-09-03 13:11:33,914 Apex [main] ERROR o.o.p.a.service.engine.main.ApexMain - start of Apex service failed
+org.onap.policy.apex.model.basicmodel.concepts.ApexException: Apex configuration file was not specified as an argument
+ at org.onap.policy.apex.service.engine.main.ApexCommandLineArguments.validateReadableFile(ApexCommandLineArguments.java:267)
+ at org.onap.policy.apex.service.engine.main.ApexCommandLineArguments.validate(ApexCommandLineArguments.java:161)
+ at org.onap.policy.apex.service.engine.main.ApexMain.<init>(ApexMain.java:68)
+ at org.onap.policy.apex.service.engine.main.ApexMain.main(ApexMain.java:165)
+usage: org.onap.policy.apex.service.engine.main.ApexMain [options...]
+options
+-c,--config-file <CONFIG_FILE>the full path to the configuration file to use, the configuration file must be a Json file
+ containing the Apex configuration parameters
+-h,--help outputs the usage of this command
+-m,--model-file <MODEL_FILE> the full path to the model file to use, if set it overrides the model file set in the
+ configuration file
+-v,--version outputs the version of Apex
-On Windows start the engine using `%APEX_HOME%\bin\apexEngine.bat`.
-The engine will fail to fully start.
-However, if the output looks similar to the following line, the APEX installation is realized.
-
-[source%nowrap,bat,numbered]
-----
-Starting Apex service with parameters [] . . .
-start of Apex service failed: Apex configuration file was not specified as an argument
-2017-07-28 13:18:44,266 Apex [main] ERROR c.e.a.service.engine.main.ApexMain - start of Apex service failed:
----
-=== Verify a Full Installation - run an Example
+
+=== Verify Installation - run an Example
A full APEX installation comes with several examples.
Here, we can fully verify the installation by running one of the examples.
----
# $APEX_HOME/bin/apexEngine.sh -c $APEX_HOME/examples/config/SampleDomain/Stdin2StdoutJsonEventJava.json # <1>
# $APEX_HOME/bin/apexEngine.sh -c C:/apex/apex-full-{release-version}/examples/config/SampleDomain/Stdin2StdoutJsonEventJava.json # <2>
->%APEX_HOME%\bin\apexEngine.bat -c %APEX_HOME%\examples\config\SampleDomain\Stdin2StdoutJsonEventJava.json @@ <3>
+>%APEX_HOME%\bin\apexEngine.bat -c %APEX_HOME%\examples\config\SampleDomain\Stdin2StdoutJsonEventJava.json :: <3>
----
<1> UNIX
<2> Cygwin
[source%nowrap,sh,numbered]
----
-2017-07-28 13:20:54,673 Apex [main] INFO c.e.a.s.engine.runtime.EngineService - engine model SamplePolicyModelJAVA:0.0.1 added to the engine-AxArtifactKey:(name=MyApexEngine-3,version=0.0.1)
-2017-07-28 13:20:54,675 Apex [Apex-apex-engine-service-0:0] INFO c.e.a.s.engine.runtime.EngineService - Engine AxArtifactKey:(name=MyApexEngine-0,version=0.0.1) processing ...
-2017-07-28 13:20:54,677 Apex [Apex-apex-engine-service-0:1] INFO c.e.a.s.engine.runtime.EngineService - Engine AxArtifactKey:(name=MyApexEngine-1,version=0.0.1) processing ...
-2017-07-28 13:20:54,677 Apex [Apex-apex-engine-service-0:2] INFO c.e.a.s.engine.runtime.EngineService - Engine AxArtifactKey:(name=MyApexEngine-2,version=0.0.1) processing ...
-2017-07-28 13:20:54,677 Apex [Apex-apex-engine-service-0:3] INFO c.e.a.s.engine.runtime.EngineService - Engine AxArtifactKey:(name=MyApexEngine-3,version=0.0.1) processing ...
-2017-07-28 13:20:54,680 Apex [main] INFO c.e.a.s.e.r.impl.EngineServiceImpl - Added the action listener to the engine
+Starting Apex service with parameters [-c, v:/dev/ericsson/apex/onap/apex-pdp/packages/apex-pdp-package-full/target/install_hierarchy/examples/config/SampleDomain/Stdin2StdoutJsonEventJava.json] . . .
+2018-09-05 15:16:42,800 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-0:0.0.1 .
+2018-09-05 15:16:42,804 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-1:0.0.1 .
+2018-09-05 15:16:42,804 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-2:0.0.1 .
+2018-09-05 15:16:42,805 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Created apex engine MyApexEngine-3:0.0.1 .
+2018-09-05 15:16:42,805 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - APEX service created.
+2018-09-05 15:16:43,962 Apex [main] INFO o.o.p.a.s.e.e.EngDepMessagingService - engine<-->deployment messaging starting . . .
+2018-09-05 15:16:43,963 Apex [main] INFO o.o.p.a.s.e.e.EngDepMessagingService - engine<-->deployment messaging started
+2018-09-05 15:16:44,987 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Registering apex model on engine MyApexEngine-0:0.0.1
+2018-09-05 15:16:45,112 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Registering apex model on engine MyApexEngine-1:0.0.1
+2018-09-05 15:16:45,113 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Registering apex model on engine MyApexEngine-2:0.0.1
+2018-09-05 15:16:45,113 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Registering apex model on engine MyApexEngine-3:0.0.1
+2018-09-05 15:16:45,120 Apex [main] INFO o.o.p.a.s.e.r.impl.EngineServiceImpl - Added the action listener to the engine
Started Apex service
----
[source%nowrap,json,numbered]
----
{
- "nameSpace" : "org.onap.policy.apex.sample.events",
- "name" : "Event0004",
- "version" : "0.0.1",
- "source" : "Act",
- "target" : "Outside",
- "TestActCaseSelected" : 1,
- "TestActStateTime" : 1499280954832,
- "TestTemperature" : 9080.866,
- "TestDecideCaseSelected" : 2,
- "TestMatchCaseSelected" : 2,
- "TestTimestamp" : 1469781869269,
- "TestDecideStateTime" : 1499280954831,
- "TestMatchCase" : 0,
- "TestSlogan" : "Test slogan for External Event0",
- "TestEstablishCaseSelected" : 1,
- "TestEstablishStateTime" : 1499280954831,
- "TestMatchStateTime" : 1499280954828
+ "name": "Event0004",
+ "version": "0.0.1",
+ "nameSpace": "org.onap.policy.apex.sample.events",
+ "source": "Act",
+ "target": "Outside",
+ "TestActCaseSelected": 2,
+ "TestActStateTime": 1536157104627,
+ "TestDecideCaseSelected": 0,
+ "TestDecideStateTime": 1536157104625,
+ "TestEstablishCaseSelected": 0,
+ "TestEstablishStateTime": 1536157104623,
+ "TestMatchCase": 0,
+ "TestMatchCaseSelected": 1,
+ "TestMatchStateTime": 1536157104620,
+ "TestSlogan": "Test slogan for External Event0",
+ "TestTemperature": 9080.866,
+ "TestTimestamp": 1469781869269
}
----
|====================
----
The script will start a simple web server (link:https://javaee.github.io/grizzly/[Grizzly]) and deploy a `war` web archive in it.
-Once the editor is started, it will be available on `localhost:18988`.
+Once the editor is started, it will be available on `localhost:18989`.
The last few line of the messages should be:
[source%nowrap,sh,numbered]
----
-Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://localhost:18988/apex/, TTL=-1sec], State=READY) starting at http://localhost:18988/apex/ . . .
-Jul 28, 2017 1:22:15 PM org.glassfish.grizzly.http.server.NetworkListener start
-INFO: Started listener bound to [localhost:18988]
-Jul 28, 2017 1:22:15 PM org.glassfish.grizzly.http.server.HttpServer start
+Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=READY) starting at http://localhost:18989/apexservices/ . . .
+Sep 05, 2018 10:35:57 PM org.glassfish.grizzly.http.server.NetworkListener start
+INFO: Started listener bound to [localhost:18989]
+Sep 05, 2018 10:35:57 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
-Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://localhost:18988/apex/, TTL=-1sec], State=RUNNING) started at http://localhost:18988/apex/
+Apex Editor REST endpoint (ApexEditorMain: Config=[ApexEditorParameters: URI=http://localhost:18989/apexservices/, TTL=-1sec], State=RUNNING) started at http://localhost:18989/apexservices/
----
-Now open a browser (Firefox, Chrome, Opera, Internet Explorer) and use the URL `http://localhost:18988/`.
+Now open a browser (Firefox, Chrome, Opera, Internet Explorer) and use the URL `http://localhost:18989/`.
This will connect the browser to the started REST editor.
The start screen should be as follows.
[source,bibtex]
----
@article{VanDerMeer2015b,
- Author = {van der Meer, Sven},
- Journal = {IEEE First International 5G Summit},
- Month = {May},
- Title = {{5G \& Autonomic Networking - Challenges in closing the Loop}},
- Url = {https://ieeetv.ieee.org/mobile/video/princeton-5g-summit-sven-van-der-meer-keynote-automatic-automation},
- Year = {2015},
+ Author = {van der Meer, Sven},
+ Journal = {IEEE First International 5G Summit},
+ Month = may,
+ Title = {{5G \& Autonomic Networking - Challenges in closing the Loop}},
+ Year = {2015}
+}
----
|===
[source,bibtex]
----
@inproceedings{DBLP:conf/cnsm/KeeneyMF14,
- author = {John Keeney and
- Sven van der Meer and
- Liam Fallon},
- title = {Towards Real-time Management of
- Virtualized Telecommunication Networks},
- booktitle = {10th International Conference on Network and Service Management,
- {CNSM} 2014, Rio de Janeiro, Brazil, November 17-21, 2014},
+ author = {John Keeney and Sven van der Meer and Liam Fallon},
+ title = {Towards Real-time Management of Virtualized Telecommunication Networks},
+ booktitle = {10th International Conference on Network and Service Management, {CNSM} 2014, Rio de Janeiro, Brazil, November 17-21, 2014},
pages = {388--393},
year = {2014},
crossref = {DBLP:conf/cnsm/2014},
- url = {https://doi.org/10.1109/CNSM.2014.7014200},
doi = {10.1109/CNSM.2014.7014200},
- timestamp = {Tue, 23 May 2017 01:11:56 +0200},
biburl = {http://dblp.org/rec/bib/conf/cnsm/KeeneyMF14},
bibsource = {dblp computer science bibliography, http://dblp.org}
}
[source,bibtex]
----
@inproceedings{DBLP:conf/cnsm/MeerKF15,
- author = {Sven van der Meer and
- John Keeney and
- Liam Fallon},
- title = {Dynamically Adaptive Policies for
- Dynamically Adaptive Telecommunications Networks},
- booktitle = {11th International Conference on Network and Service Management,
- {CNSM} 2015, Barcelona, Spain, November 9-13, 2015},
+ author = {Sven van der Meer and John Keeney and Liam Fallon},
+ title = {Dynamically Adaptive Policies for Dynamically Adaptive Telecommunications Networks},
+ booktitle = {11th International Conference on Network and Service Management, {CNSM} 2015, Barcelona, Spain, November 9-13, 2015},
pages = {182--186},
year = {2015},
crossref = {DBLP:conf/cnsm/2015},
- url = {https://doi.org/10.1109/CNSM.2015.7367357},
doi = {10.1109/CNSM.2015.7367357},
- timestamp = {Tue, 23 May 2017 01:11:56 +0200},
biburl = {http://dblp.org/rec/bib/conf/cnsm/MeerKF15},
bibsource = {dblp computer science bibliography, http://dblp.org}
}
[source,bibtex]
----
@inproceedings{DBLP:conf/im/KeeneyMH13,
- author = {John Keeney and
- Sven van der Meer and
- Gabriel Hogan},
- title = {A Recommender-system for Telecommunications
- Network Management Actions},
- booktitle = {2013 {IFIP/IEEE} International Symposium on Integrated
- Network Management
- {IM} 2013, Ghent, Belgium, May 27-31, 2013},
+ author = {John Keeney and Sven van der Meer and Gabriel Hogan}
+ title = {A Recommender-system for Telecommunications Network Management Actions},
+ booktitle = {2013 {IFIP/IEEE} International Symposium on Integrated Network Management {IM} 2013, Ghent, Belgium, May 27-31, 2013},
pages = {760--763},
year = {2013},
crossref = {DBLP:conf/im/2013},
url = {http://ieeexplore.ieee.org/document/6573072/},
- timestamp = {Sun, 30 Apr 2017 09:41:39 +0200},
biburl = {http://dblp.org/rec/bib/conf/im/KeeneyMH13},
bibsource = {dblp computer science bibliography, http://dblp.org}
}
[source,bibtex]
----
@inproceedings{DBLP:conf/im/FallonKM17,
- author = {Liam Fallon and
- John Keeney and
- Sven van der Meer},
+ author = {Liam Fallon and John Keeney and Sven van der Meer},
title = {Distributed Management Information Models},
- booktitle = {2017 {IFIP/IEEE} International Symposium on Integrated
- Network Management
- {IM} 2017, Lisbon, Portugal, May 8-12, 2017},
+ booktitle = {2017 {IFIP/IEEE} International Symposium on Integrated Network Management {IM} 2017, Lisbon, Portugal, May 8-12, 2017},
pages = {414--420},
year = {2017},
crossref = {DBLP:conf/im/2017},
- url = {https://doi.org/10.23919/INM.2017.7987306},
doi = {10.23919/INM.2017.7987306},
- timestamp = {Fri, 28 Jul 2017 12:12:57 +0200},
biburl = {http://dblp.org/rec/bib/conf/im/FallonKM17},
bibsource = {dblp computer science bibliography, http://dblp.org}
}
[source,bibtex]
----
@inproceedings{DBLP:conf/im/FallonKMQM17,
- author = {Liam Fallon and
- John Keeney and
- Mark McFadden and
- John Quilty and
- Sven van der Meer},
- title = {Using the {COMPA} Autonomous Architecture
- for Mobile Network Security},
- booktitle = {2017 {IFIP/IEEE} International Symposium on Integrated
- Network Management
- {IM} 2017, Lisbon, Portugal, May 8-12, 2017},
+ author = {Liam Fallon and John Keeney and Mark McFadden and John Quilty and Sven van der Meer},
+ title = {Using the {COMPA} Autonomous Architecture for Mobile Network Security},
+ booktitle = {2017 {IFIP/IEEE} International Symposium on Integrated Network Management {IM} 2017, Lisbon, Portugal, May 8-12, 2017},
pages = {747--753},
year = {2017},
crossref = {DBLP:conf/im/2017},
- url = {https://doi.org/10.23919/INM.2017.7987370},
doi = {10.23919/INM.2017.7987370},
- timestamp = {Fri, 28 Jul 2017 12:12:57 +0200},
biburl = {http://dblp.org/rec/bib/conf/im/FallonKMQM17},
bibsource = {dblp computer science bibliography, http://dblp.org}
}
| The explosion in consumer devices has resulted in a significant increase in the number of mobile telecommunications nodes. As a result of increased device and node numbers, network operators have experienced a large increase in associated events. In such an environment, scalability and performance of event handling become important aspects for Operation Support Systems (OSS). A traditional approach has been to centralize monitoring and decision functions. The scale of events in a modern mobile telecommunications network means such centralized implementations are performance limited. What is required is a remodeling of Complex Event Processing (monitoring) and Policies (decision making) towards a distributed yet coordinated system. This paper describes an extensible architecture for such a distributed policy-based event processing system. Our approach provides a pluggable mechanism into which various event handling functionality can be integrated. In order to illustrate the applicability of our approach we evaluate the performance of 2 message queuing protocols, Advanced Message Queuing Protocol (AMQP) based RabbitMQ and Java Web Sockets. Our performance evaluation illustrates the ability of our architecture to transparently integrate alternative event processing technologies.
h| Links
-| ###
+| link:https://www.researchgate.net/publication/259785930_Cloudifying_Mobile_Network_Management_Performance_Tests_of_Event_Distribution_and_Rule_Processing[ResarchGate] [accessed Aug 11, 2017]
h| BibTeX
a|
[source,bibtex]
----
@inproceedings{DBLP:conf/monami/DawarMKFB13,
- author = {Sumit Dawar and
- Sven van der Meer and
- John Keeney and
- Enda Fallon and
- Tom Bennet},
- title = {Cloudifying Mobile Network Management: Performance Tests
- of Event Distribution and Rule Processing},
- booktitle = {Mobile Networks and Management - 5th International Conference,
- {MONAMI} 2013, Cork, Ireland, September 23-25, 2013},
+ author = {Sumit Dawar and Sven van der Meer and John Keeney and Enda Fallon and Tom Bennet},
+ title = {Cloudifying Mobile Network Management: Performance Tests of Event Distribution and Rule Processing},
+ booktitle = {Mobile Networks and Management - 5th International Conference, {MONAMI} 2013, Cork, Ireland, September 23-25, 2013},
pages = {94--107},
year = {2013},
crossref = {DBLP:conf/monami/2013},
- url = {https://doi.org/10.1007/978-3-319-04277-0_8},
doi = {10.1007/978-3-319-04277-0_8},
- timestamp = {Wed, 24 May 2017 08:27:31 +0200},
biburl = {http://dblp.org/rec/bib/conf/monami/DawarMKFB13},
bibsource = {dblp computer science bibliography, http://dblp.org}
}
[source,bibtex]
----
@inproceedings{DBLP:conf/noms/FallonMK16,
- author = {Liam Fallon and
- Sven van der Meer and
- John Keeney},
+ author = {Liam Fallon and Sven van der Meer and John Keeney},
title = {Apex: An Engine for Dynamic Adaptive Policy Execution},
- booktitle = {2016 {IEEE/IFIP} Network Operations and Management Symposium,
- {NOMS} 2016, Istanbul, Turkey, April 25-29, 2016},
+ booktitle = {2016 {IEEE/IFIP} Network Operations and Management Symposium, {NOMS} 2016, Istanbul, Turkey, April 25-29, 2016},
pages = {699--702},
year = {2016},
crossref = {DBLP:conf/noms/2016},
- url = {https://doi.org/10.1109/NOMS.2016.7502880},
doi = {10.1109/NOMS.2016.7502880},
- timestamp = {Fri, 19 May 2017 01:26:25 +0200},
biburl = {http://dblp.org/rec/bib/conf/noms/FallonMK16},
bibsource = {dblp computer science bibliography, http://dblp.org}
}
| IEEE NOMS, Taipei, April 2018
h| Abstract
-| Since the 1970’s it has been acknowledged that a
-complex system can be broken into (a) its invariant functional
-parts (mechanism), and (b) the externalized choices for how the
-system should behave (policy). Policy-based management’s main
-objective is to separate and externalize the decisions required by a
-system from the mechanisms provided by the system, and provide
-a way to define and evaluate these decisions. A few decades later,
-we have today a plethora of different policy models and even more
-policy languages – plus tooling – offering policy-based solutions
-for virtually any use case and scenario. However, policy-based
-management as a standalone domain has never been evaluated
-in terms of which parts are variant / invariant, i.e. which parts
-of policy-based management can be domain-, model-, language-,
-usecase-independent. In this paper, we introduce and define a
-formal universal policy model that does exactly that. The result
-is a model that can be used to design, implement, and deploy
-immutable policy infrastructure (engine and executor) being able
-to execute (virtually) any policy model.
+| Since the 1970’s it has been acknowledged that a complex system can be broken into (a) its invariant functional parts (mechanism), and (b) the externalized choices for how the system should behave (policy). Policy-based management’s main objective is to separate and externalize the decisions required by a system from the mechanisms provided by the system, and provide a way to define and evaluate these decisions. A few decades later, we have today a plethora of different policy models and even more policy languages – plus tooling – offering policy-based solutions for virtually any use case and scenario. However, policy-based management as a standalone domain has never been evaluated in terms of which parts are variant / invariant, i.e. which parts of policy-based management can be domain-, model-, language-, usecase-independent. In this paper, we introduce and define a formal universal policy model that does exactly that. The result is a model that can be used to design, implement, and deploy immutable policy infrastructure (engine and executor) being able to execute (virtually) any policy model.
+
+h| Links
+| link:https://www.researchgate.net/publication/325057975_Taming_Policy_Complexity_Model_to_Execution[Research Gate] [accessed Sep 4, 2018]
h| BibTeX
a|
[source,bibtex]
----
-@inproceedings{noms/MeerMK18a,
- author = {Sven van der Meer and
- John Keeney and
- Liam Fallon},
- title = {Taming Policy Complexity: Model to Execution},
- booktitle = {2018 {IEEE/IFIP} Network Operations and Management Symposium,
- {NOMS} 2018, Taipei, Taiwan, April 23-27, 2018},
- year = {2018}
+@inproceedings{DBLP:conf/noms/MeerKF18,
+ author = {Sven van der Meer and John Keeney and Liam Fallon},
+ title = {Taming policy complexity: Model to execution},
+ booktitle = {2018 {IEEE/IFIP} Network Operations and Management Symposium, {NOMS} 2018, Taipei, Taiwan, April 23-27, 2018},
+ pages = {1--8},
+ year = {2018},
+ crossref = {DBLP:conf/noms/2018},
+ doi = {10.1109/NOMS.2018.8406172},
+ biburl = {https://dblp.org/rec/bib/conf/noms/MeerKF18},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}
----
|===
| IEEE NOMS, Taipei, April 2018
h| Abstract
-| 5G networks will be the first real converged networks
-supporting a plethora of different services, each with their
-own requirements. A static best-effort approach is no longer
-sufficient. Extreme flexibility and dynamicity is required, yet costs
-must be drastically reduced. The only way that these conflicting
-goals can be achieved is with vastly increased automation in the
-provision and operation of our future 5G networks. In this paper
-we briefly discuss the facilitators, goals and challenges for 5G
-networks. We identify some of the places where automation is not
-just helpful, but is in fact required for 5G to become a reality.
-We go on to present a conceptual approach for modeling and
-achieving autonomic operations and management in 5G networks
-positioning modern policy-based management as a key enabler
-for autonomic 5G network management.
+| 5G networks will be the first real converged networks supporting a plethora of different services, each with their own requirements. A static best-effort approach is no longer sufficient. Extreme flexibility and dynamicity is required, yet costs must be drastically reduced. The only way that these conflicting goals can be achieved is with vastly increased automation in the provision and operation of our future 5G networks. In this paper we briefly discuss the facilitators, goals and challenges for 5G networks. We identify some of the places where automation is not just helpful, but is in fact required for 5G to become a reality. We go on to present a conceptual approach for modeling and achieving autonomic operations and management in 5G networks positioning modern policy-based management as a key enabler for autonomic 5G network management.
+
+h| Links
+| link:https://www.researchgate.net/publication/325057790_5G_Networks_Must_Be_Autonomic?_iepl%5BgeneralViewId%5D=NFUJVNL9bfZcUhlhGPKG13VvHQDRMJhMCBbY&_iepl%5Bcontexts%5D%5B0%5D=searchReact&_iepl%5BviewId%5D=K8kQ3zeC2xUNNSJwMYtpD849IAOlx6jPYj2I&_iepl%5BsearchType%5D=publication&_iepl%5Bdata%5D%5BcountLessEqual20%5D=1&_iepl%5Bdata%5D%5BinteractedWithPosition1%5D=1&_iepl%5Bdata%5D%5BwithEnrichment%5D=1&_iepl%5Bposition%5D=1&_iepl%5BrgKey%5D=PB%3A325057790&_iepl%5BtargetEntityId%5D=PB%3A325057790&_iepl%5BinteractionType%5D=publicationTitle[Research Gate] [accessed Sep 4, 2018]
h| BibTeX
a|
[source,bibtex]
----
-@inproceedings{noms/MeerMK18b,
- author = {Sven van der Meer and
- John Keeney and
- Liam Fallon},
- title = {5G Networks Must Be Autonomic!},
- booktitle = {2018 {IEEE/IFIP} Network Operations and Management Symposium,
- {NOMS} 2018, Taipei, Taiwan, April 23-27, 2018},
- year = {2018}
+@inproceedings{DBLP:conf/noms/MeerKF18a,
+ author = {Sven van der Meer and John Keeney and Liam Fallon},
+ title = {5G networks must be autonomic!},
+ booktitle = {2018 {IEEE/IFIP} Network Operations and Management Symposium, {NOMS} 2018, Taipei, Taiwan, April 23-27, 2018},
+ pages = {1--5},
+ year = {2018},
+ crossref = {DBLP:conf/noms/2018},
+ doi = {10.1109/NOMS.2018.8406185},
+ biburl = {https://dblp.org/rec/bib/conf/noms/MeerKF18a},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}
----
|===
In this work we present our experiences of building a networking testbed that incorporates an emulated network, a production-grade network controller, an analytics function, and a policy execution environment. This allows users to develop policies for adaptive (closed loop) management of a realistic emulated network. We also present two scenarios where the testbed is used to emulate and mitigate against a temporary and prolonged failure occurring on a network.
+h| Links
+| link:https://www.researchgate.net/publication/325059988_A_Testbed_For_Policy_Driven_Closed_Loop_Network_Management[Research Gate] [accessed Sep 4, 2018]
+
h| BibTeX
a|
[source,bibtex]
----
-@inproceedings{noms/McNamaraMK18,
- author = {Joseph McNamara and
- John Keeney and
- Liam Fallon and
- Sven van der Meer and
- Enda Fallon},
- title = {A Testbed For Policy Driven Closed Loop Network Management},
- booktitle = {2018 {IEEE/IFIP} Network Operations and Management Symposium,
- {NOMS} 2018, Taipei, Taiwan, April 23-27, 2018},
- year = {2018}
+@inproceedings{DBLP:conf/noms/McNamaraKFMF18,
+ author = {Joseph McNamara and John Keeney and Liam Fallon and Sven van der Meer and Enda Fallon},
+ title = {A testbed for policy driven closed loop network management},
+ booktitle = {2018 {IEEE/IFIP} Network Operations and Management Symposium, {NOMS} 2018, Taipei, Taiwan, April 23-27, 2018},
+ pages = {1--6},
+ year = {2018},
+ crossref = {DBLP:conf/noms/2018},
+ doi = {10.1109/NOMS.2018.8406144},
+ biburl = {https://dblp.org/rec/bib/conf/noms/McNamaraKFMF18},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
}
----
--- /dev/null
+//
+// ============LICENSE_START=======================================================
+// Copyright (C) 2016-2018 Ericsson. All rights reserved.
+// ================================================================================
+// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
+// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
+//
+// SPDX-License-Identifier: CC-BY-4.0
+// ============LICENSE_END=========================================================
+//
+// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+//
+
+== APEX Demo (NOMS'18)
+
+[width="100%",cols="15%,90%"]
+|===
+
+h| Title
+e| Demo: Adaptive policy execution (APEX)
+
+h| Venue
+| IEEE NOMS, Taipei, April 2018
+
+h| Abstract
+| This demo focuses on demonstrating features of the Adaptive Policy Execution (APEX) system. APEX is a carrier-grade, production ready, scalable policy engine implementing, based on published theory, universal and immutable policy infrastructure. The demo will showcase the main APEX features, from authoring via deployment to runtime; with three demo use cases. All software and features are available on Github.
+
+h| Links
+| link:https://www.researchgate.net/publication/325058016_Demo_Adaptive_Policy_Execution_APEX[Research Gate] [accessed Sep 4, 2018]
+
+h| BibTeX
+a|
+[source,bibtex]
+----
+@inproceedings{DBLP:conf/noms/MeerKFM18,
+ author = {Sven van der Meer and John Keeney and Liam Fallon and Joseph McNamara},
+ title = {Demo: Adaptive policy execution {(APEX)}},
+ booktitle = {2018 {IEEE/IFIP} Network Operations and Management Symposium, {NOMS} 2018, Taipei, Taiwan, April 23-27, 2018},
+ pages = {1--2},
+ year = {2018},
+ crossref = {DBLP:conf/noms/2018},
+ url = {https://doi.org/10.1109/NOMS.2018.8406117},
+ doi = {10.1109/NOMS.2018.8406117},
+ timestamp = {Tue, 10 Jul 2018 16:33:52 +0200},
+ biburl = {https://dblp.org/rec/bib/conf/noms/MeerKFM18},
+ bibsource = {dblp computer science bibliography, https://dblp.org}
+}
+----
+
+|===
+
--- /dev/null
+//
+// ============LICENSE_START=======================================================
+// Copyright (C) 2016-2018 Ericsson. All rights reserved.
+// ================================================================================
+// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
+// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
+//
+// SPDX-License-Identifier: CC-BY-4.0
+// ============LICENSE_END=========================================================
+//
+// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
+//
+
+== NOMS 2018, Keynote #6
+
+[width="100%",cols="15%,90%"]
+|===
+
+h| Title
+e| What do we actually manage in 5G? - And what is missing?
+
+h| Venue
+| IEEE NOMS, Taipei, April 2018
+
+h| Abstract
+| We are at the crossroads of yet another technology shift. Networks evolved continuously from TDM to IP, legacy to SDN, PNF to VNF as part of virtualization and now microservices/containers/K8s. All these technologies play a vital role in the evolution of 5G and the future networks will deliver services to many vertical industries. Distributed cloud is key to deliver services that require low latency and high bandwidth. Orchestration and adaptive Policy decisions will be key for automation in 5G networks. In this keynote, we will discuss the requirements and challenges for managing this – massive scale, dynamic, and complex – new environment. We will see what efforts are underway and planned for 5 G management, including open source initiatives such as ONAP. Finally, we will explore what is missing today to tame the 5G management complexity.
+
+h| Links
+| link:http://noms2018.ieee-noms.org/content/keynotes[Event], link:https://www.researchgate.net/publication/325057988_What_do_we_actually_manage_in_5G_And_what_is_missing[Research Gate] [accessed Sep 4, 2018]
+
+h| BibTeX
+a|
+[source,bibtex]
+----
+@online{vandermeer-noms2018-e,
+ author = {Sven van der Meer},
+ title = {What do we actually manage in 5G? - And what is missing?},
+ howpublished = {Keynote, 2018 {IEEE/IFIP} Network Operations and Management Symposium, {NOMS} 2018, Taipei, Taiwan, April 23-27, 2018},
+ year = {2018}
+}
+----
+
+|===
+
-[INFO] apex-apps.uservice ................................. SUCCESS [ 0.054 s]
-[INFO] apex-apps.uservice-packaging ....................... SUCCESS [ 0.058 s]
-[INFO] apex-apps.uservice-package-minimal ................. SUCCESS [ 7.138 s]
-[INFO] apex-apps.uservice-package-full .................... SUCCESS [ 58.960 s]
-[INFO] apex-apps.uservice-packages ........................ SUCCESS [ 1.781 s]
-[INFO] apex-apps.servlet .................................. SUCCESS [ 3.465 s]
+[INFO] tools .............................................. SUCCESS [ 0.248 s]
+[INFO] tools-common ....................................... SUCCESS [ 0.784 s]
+[INFO] simple-wsclient .................................... SUCCESS [ 3.303 s]
+[INFO] model-generator .................................... SUCCESS [ 0.644 s]
+[INFO] packages ........................................... SUCCESS [ 0.336 s]
+[INFO] apex-pdp-package-full .............................. SUCCESS [01:10 min]
+[INFO] Policy APEX PDP - Docker build 2.0.0-SNAPSHOT ...... SUCCESS [ 10.307 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 02:48 min
-[INFO] Finished at: 2018-01-04T12:20:45+00:00
-[INFO] Final Memory: 164M/1648M
+[INFO] Total time: 03:43 min
+[INFO] Finished at: 2018-09-03T11:56:01+01:00
[INFO] ------------------------------------------------------------------------
\ No newline at end of file
+++ /dev/null
-[INFO] apex-apps.uservice ................................. SUCCESS [ 0.027 s]
-[INFO] apex-apps.uservice-packaging ....................... SUCCESS [ 0.008 s]
-[INFO] apex-apps.uservice-package-minimal ................. SUCCESS [ 6.934 s]
-[INFO] apex-apps.uservice-package-full .................... SUCCESS [ 55.667 s]
-[INFO] apex-apps.uservice-packages ........................ SUCCESS [ 1.833 s]
-[INFO] apex-apps.servlet .................................. SUCCESS [ 2.383 s]
-[INFO] ------------------------------------------------------------------------
-[INFO] BUILD SUCCESS
-[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 05:34 min
-[INFO] Finished at: 2018-01-04T13:49:16+00:00
-[INFO] Final Memory: 164M/1595M
-[INFO] ------------------------------------------------------------------------
\ No newline at end of file
--rwxrwx---+ 1 esvevan Domain Users 706 Jan 4 10:44 apex-apps.uservice-package-full_0.7.0_all.changes
--rwxrwx---+ 1 esvevan Domain Users 32694 Jan 4 10:43 apex-apps.uservice-package-full-0.7.0.jar
--rwxrwx---+ 1 esvevan Domain Users 255629634 Jan 4 10:44 apex-uservice-full-0.7.0.deb
--rwxrwx---+ 1 esvevan Domain Users 255613724 Jan 4 10:43 apex-uservice-full-0.7.0-tarball.tar.gz
-drwxrwx---+ 1 esvevan Domain Users 0 Jan 4 10:43 archive-tmp/
-drwxrwx---+ 1 esvevan Domain Users 0 Jan 4 10:43 classes/
-drwxrwx---+ 1 esvevan Domain Users 0 Jan 4 10:43 dependency-maven-plugin-markers/
-drwxrwx---+ 1 esvevan Domain Users 0 Jan 4 10:43 etc/
-drwxrwx---+ 1 esvevan Domain Users 0 Jan 4 10:43 examples/
-drwxrwx---+ 1 esvevan Domain Users 0 Jan 4 10:43 install_hierarchy/
-drwxrwx---+ 1 esvevan Domain Users 0 Jan 4 10:43 lib/
-drwxrwx---+ 1 esvevan Domain Users 0 Jan 4 10:43 maven-archiver/
\ No newline at end of file
+-rwxrwx---+ 1 esvevan Domain Users 772 Sep 3 11:55 apex-pdp-package-full_2.0.0~SNAPSHOT_all.changes*
+-rwxrwx---+ 1 esvevan Domain Users 146328082 Sep 3 11:55 apex-pdp-package-full-2.0.0-SNAPSHOT.deb*
+-rwxrwx---+ 1 esvevan Domain Users 15633 Sep 3 11:54 apex-pdp-package-full-2.0.0-SNAPSHOT.jar*
+-rwxrwx---+ 1 esvevan Domain Users 146296819 Sep 3 11:55 apex-pdp-package-full-2.0.0-SNAPSHOT-tarball.tar.gz*
+drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 archive-tmp/
+-rwxrwx---+ 1 esvevan Domain Users 89 Sep 3 11:54 checkstyle-cachefile*
+-rwxrwx---+ 1 esvevan Domain Users 10621 Sep 3 11:54 checkstyle-checker.xml*
+-rwxrwx---+ 1 esvevan Domain Users 584 Sep 3 11:54 checkstyle-header.txt*
+-rwxrwx---+ 1 esvevan Domain Users 86 Sep 3 11:54 checkstyle-result.xml*
+drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 classes/
+drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 dependency-maven-plugin-markers/
+drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 etc/
+drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 examples/
+drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:55 install_hierarchy/
+drwxrwx---+ 1 esvevan Domain Users 0 Sep 3 11:54 maven-archiver/
-04/01/2018 11:51 <DIR> .
-04/01/2018 11:51 <DIR> ..
-04/01/2018 10:43 32,694 apex-apps.uservice-package-full-0.7.0.jar
-04/01/2018 10:44 706 apex-apps.uservice-package-full_0.7.0_all.changes
-04/01/2018 10:43 255,613,724 apex-uservice-full-0.7.0-tarball.tar.gz
-04/01/2018 10:44 255,629,634 apex-uservice-full-0.7.0.deb
-04/01/2018 10:43 <DIR> archive-tmp
-04/01/2018 10:43 <DIR> classes
-04/01/2018 10:43 <DIR> dependency-maven-plugin-markers
-04/01/2018 10:43 <DIR> etc
-04/01/2018 10:43 <DIR> examples
-04/01/2018 10:43 <DIR> install_hierarchy
-04/01/2018 10:43 <DIR> lib
-04/01/2018 10:43 <DIR> maven-archiver
- 4 File(s) 511,276,758 bytes
- 10 Dir(s) 6,230,409,216 bytes free
\ No newline at end of file
+03/09/2018 11:55 <DIR> .
+03/09/2018 11:55 <DIR> ..
+03/09/2018 11:55 146,296,819 apex-pdp-package-full-2.0.0-SNAPSHOT-tarball.tar.gz
+03/09/2018 11:55 146,328,082 apex-pdp-package-full-2.0.0-SNAPSHOT.deb
+03/09/2018 11:54 15,633 apex-pdp-package-full-2.0.0-SNAPSHOT.jar
+03/09/2018 11:55 772 apex-pdp-package-full_2.0.0~SNAPSHOT_all.changes
+03/09/2018 11:54 <DIR> archive-tmp
+03/09/2018 11:54 89 checkstyle-cachefile
+03/09/2018 11:54 10,621 checkstyle-checker.xml
+03/09/2018 11:54 584 checkstyle-header.txt
+03/09/2018 11:54 86 checkstyle-result.xml
+03/09/2018 11:54 <DIR> classes
+03/09/2018 11:54 <DIR> dependency-maven-plugin-markers
+03/09/2018 11:54 <DIR> etc
+03/09/2018 11:54 <DIR> examples
+03/09/2018 11:55 <DIR> install_hierarchy
+03/09/2018 11:54 <DIR> maven-archiver
+ 8 File(s) 292,652,686 bytes
+ 9 Dir(s) 14,138,720,256 bytes free
\ No newline at end of file
include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/verify.adoc[]
-include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-monitoring.adoc[]
-
-include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-resteditor.adoc[]
+include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-wars.adoc[]
include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/docker.adoc[]
include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/verify.adoc[leveloffset=+1]
-include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-monitoring.adoc[leveloffset=+1]
-
-include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-resteditor.adoc[leveloffset=+1]
+include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-wars.adoc[leveloffset=+1]
include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/docker.adoc[leveloffset=+1]
include::{adsite-main-dir}/site-docs/adoc/fragments/howto-codestyle/50-disable-eclispe-formatting.adoc[]
include::{adsite-main-dir}/site-docs/adoc/fragments/howto-codestyle/51-supress-checkstyle.adoc[]
-
\ No newline at end of file
include::{adsite-main-dir}/site-docs/adoc/fragments/reference-publications/noms-2018a.adoc[leveloffset=+1]
+include::{adsite-main-dir}/site-docs/adoc/fragments/reference-publications/noms-2018d.adoc[leveloffset=+1]
+
include::{adsite-main-dir}/site-docs/adoc/fragments/reference-publications/noms-2018c.adoc[leveloffset=+1]
include::{adsite-main-dir}/site-docs/adoc/fragments/reference-publications/noms-2018b.adoc[leveloffset=+1]
+include::{adsite-main-dir}/site-docs/adoc/fragments/reference-publications/noms-2018e.adoc[leveloffset=+1]
+++ /dev/null
-//
-// ============LICENSE_START=======================================================
-// Copyright (C) 2016-2018 Ericsson. All rights reserved.
-// ================================================================================
-// This file is licensed under the CREATIVE COMMONS ATTRIBUTION 4.0 INTERNATIONAL LICENSE
-// Full license text at https://creativecommons.org/licenses/by/4.0/legalcode
-//
-// SPDX-License-Identifier: CC-BY-4.0
-// ============LICENSE_END=========================================================
-//
-// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
-//
-
-include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-monitoring.adoc[]
// @author Sven van der Meer (sven.van.der.meer@ericsson.com)
//
-include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-resteditor.adoc[]
+include::{adsite-main-dir}/site-docs/adoc/fragments/install-guide/install-wars.adoc[]
<item href="user-manual/install/um-install-layout.html" name="Final Layout" />
<item href="user-manual/install/um-install-configure.html" name="System Configuration" />
<item href="user-manual/install/um-install-verify.html" name="Verify Installation" />
- <item href="user-manual/install/um-install-monitoring.html" name="Install Monitoring" />
- <item href="user-manual/install/um-install-resteditor.html" name="Install REST Editor" />
+ <item href="user-manual/install/um-install-wars.html" name="Install WARs" />
<item href="user-manual/install/um-install-docker.html" name="APEX in Docker" />
</item>
<li><a href="modules/examples/examples-pcvs/index.html">examples-pcvs</a> - An example policy for managing customers and link failures showing video streaming for a simple VPN scenario</li>
<li><a href="modules/examples/examples-onap-vcpe/index.html">examples-onap-vcpe</a> - An example policy for managing vCPE's in ONAP</li>
<li><a href="modules/examples/examples-periodic/index.html">examples-periodic</a> - An example periodic policy</li>
- <li><a href="modules/examples/examples-servlet/index.html">examples-aadm</a> - An APEX Servlet Example</li>
+ <li><a href="modules/examples/examples-servlet/index.html">examples-servlet</a> - An APEX Servlet Example</li>
<li><a href="modules/examples/examples-adaptive/index.html">examples-adaptive</a> - A simple adaptive policy</li>
<li><a href="modules/examples/examples-aadm/index.html">examples-aadm</a> - A policy realizing a complex scenario for Autonomic Anomaly Detection and Mitigation (AADM)</li>
</ul>
</td>
</tr>
<tr>
- <td><a href="https://github.com/Ericsson/apex/issues">APEX Issue Management (Github)</a></td>
+ <td><a href="https://jira.onap.org/projects/POLICY/issues">APEX Issue Management (ONAP, JIRA)</a></td>
<td>
Issues with the APEX software and integrated documentation are managed here.
+ This link requires a Linux Foundation ID.
</td>
</tr>
</table>
<plugins>
<plugin>
<artifactId>maven-pmd-plugin</artifactId>
+ <version>3.10.0</version>
<configuration>
<excludes>
<exclude>**/test/common/**/*.java</exclude>
</distributionManagement>
</profile>
</profiles>
-</project>
\ No newline at end of file
+</project>
<project name="APEX Testsuites Integration Common">
<body>
<menu name="APEX Testsuites Integration Common">
+ <item href="javadocs/index.html" name="API Doc" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
<item name="Common" href="index.html" />
</breadcrumbs>
</body>
-</project>
\ No newline at end of file
+</project>
<artifactId>jersey-container-servlet-core</artifactId>
<version>${version.jersey}</version>
</dependency>
- <dependency>
- <groupId>org.onap.policy.apex-pdp.context</groupId>
- <artifactId>context-test-utils</artifactId>
- <version>${project.version}</version>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
</distributionManagement>
</profile>
</profiles>
-</project>
\ No newline at end of file
+</project>
<project name="APEX Testsuites Performance Context-Metrics">
<body>
<menu name="APEX Testsuites Performance Context-Metrics">
+ <item href="javadocs/index.html" name="API Doc" />
</menu>
<menu ref="reports" inherit="top" />
<menu ref="modules" />
--- /dev/null
+#!/usr/bin/env bash
+
+#-------------------------------------------------------------------------------
+# ============LICENSE_START=======================================================
+# Copyright (C) 2016-2018 Ericsson. All rights reserved.
+# ================================================================================
+# 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=========================================================
+#-------------------------------------------------------------------------------
+
+##
+## Script to clear all created site artifacts, so all target/site for all modules plus target/ad-site on parrent.
+## Call -h for help
+##
+## @author Sven van der Meer <sven.van.der.meer@ericsson.com>
+## @version v2.0.0
+
+
+##
+## DO NOT CHANGE CODE BELOW, unless you know what you are doing
+##
+
+## script name for output
+MOD_SCRIPT_NAME=`basename $0`
+
+
+##
+## Help screen and exit condition (i.e. too few arguments)
+##
+Help()
+{
+ echo ""
+ echo "$MOD_SCRIPT_NAME - remove all generated site artifacts."
+ echo ""
+ echo " Usage: $MOD_SCRIPT_NAME [options]"
+ echo ""
+ echo " Options"
+ echo " -x - execute the delete actions"
+ echo " -h - this help screen"
+ echo ""
+ echo ""
+ exit 255;
+}
+if [ $# -eq 0 ]; then
+ Help
+fi
+
+while [ $# -gt 0 ]
+do
+ case $1 in
+ # -x do clear
+ -x)
+ echo
+ echo "$MOD_SCRIPT_NAME: removing generated sites in all modules"
+ for dir in `find -type d -name "site"|grep "/target/"`
+ do
+ echo "--> removing $dir"
+ rm -fr $dir
+ done
+ echo "--> removing target/ad-site"
+ rm -fr target/ad-site
+ exit
+ ;;
+
+ #-h prints help and exists
+ -h) Help;exit 0;;
+
+ *) echo "$MOD_SCRIPT_NAME: undefined CLI option - $1"; exit 255;;
+ esac
+done
+
+#!/usr/bin/env bash
+
#-------------------------------------------------------------------------------
# ============LICENSE_START=======================================================
# Copyright (C) 2016-2018 Ericsson. All rights reserved.
# ============LICENSE_END=========================================================
#-------------------------------------------------------------------------------
-#
-# Docker file to build an image that runs APEX on Java 8 in Ubuntu
-#
-# apex/base:0.6.0
-FROM ubuntu:16.04
-MAINTAINER John Keeney John.Keeney@ericsson.com
+##
+## Script to copy css artifacts from parent to all child modules, recursively.
+##
+## @author Sven van der Meer <sven.van.der.meer@ericsson.com>
+## @version v2.0.0
-RUN apt-get update && \
- apt-get upgrade -y && \
- apt-get install -y software-properties-common && \
- add-apt-repository ppa:webupd8team/java -y && \
- apt-get update && \
- echo oracle-javax8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
- apt-get install -y oracle-java8-installer && \
- rm -rf /var/cache/oracle-jdk8-installer && \
- apt-get clean
-RUN mkdir /packages
-COPY apex-pdp-package-full-2.0.0-SNAPSHOT.deb /packages
-RUN dpkg -i packages/apex-pdp-package-full-2.0.0-SNAPSHOT.deb && \
- rm /packages/apex-pdp-package-full-2.0.0-SNAPSHOT.deb
+##
+## DO NOT CHANGE CODE BELOW, unless you know what you are doing
+##
-ENV PATH /opt/ericsson/apex/apex/bin:$PATH
+## script name for output
+MOD_SCRIPT_NAME=`basename $0`
-RUN apt-get clean
+echo
+echo "$MOD_SCRIPT_NAME: copying standard css and images to modules"
+for dir in `find -type d -name "site"|grep "/src"|grep "./modules/"`
+do
+ echo "--> copying to $dir"
+ cp -dfrp src/site/css $dir
+ cp -dfrp src/site/images $dir
+done
-RUN chown -R apexuser:apexuser /home/apexuser/*
-WORKDIR /home/apexuser
+echo "-> done"
+echo
<name>${project.artifactId}</name>
<description>[${project.parent.artifactId}] Simple Websocket client (console and echo)</description>
- <properties>
- <apex-apps-wsclients-simple-dir>${project.basedir}/src</apex-apps-wsclients-simple-dir>
- </properties>
-
<dependencies>
<dependency>
<groupId>org.java-websocket</groupId>
</descriptorRefs>
<archive>
<manifest>
- <mainClass>org.onap.policy.apex.tools.simple.wsclients.Application</mainClass>
+ <mainClass>org.onap.policy.apex.tools.simple.wsclient.Application</mainClass>
</manifest>
</archive>
</configuration>
</distributionManagement>
</profile>
</profiles>
-</project>
\ No newline at end of file
+</project>
package org.onap.policy.apex.tools.common.docs;
////
-//// NOTE: This file contains tags for ASCIIDOC
-//// DO NOT REMOVE any of those tag lines, e.g.
-//// //tag::**
-//// //end::**
+////NOTE: This file contains tags for ASCIIDOC
+////DO NOT REMOVE any of those tag lines, e.g.
+//////tag::**
+//////end::**
+////
+////DO NOT auto-refresh imports or organise imports!
////
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.junit.Test;
+
+//tag::import[]
import org.onap.policy.apex.tools.common.CliOptions;
import org.onap.policy.apex.tools.common.CliParser;
+//end::import[]
+
import org.slf4j.ext.XLogger;
import org.slf4j.ext.XLoggerFactory;