diff --git a/bundles/org.eclipse.passage.lac.jetty/.classpath b/bundles/org.eclipse.passage.lac.jetty/.classpath
new file mode 100644
index 000000000..22f30643c
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/bundles/org.eclipse.passage.lac.jetty/.project b/bundles/org.eclipse.passage.lac.jetty/.project
new file mode 100644
index 000000000..8337f6f49
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/.project
@@ -0,0 +1,39 @@
+
+
+ org.eclipse.passage.lac.jetty
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+ org.eclipse.pde.api.tools.apiAnalysisBuilder
+
+
+
+
+ org.eclipse.pde.ds.core.builder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.api.tools.apiAnalysisNature
+
+
diff --git a/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..8f9ec5cde
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,101 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
diff --git a/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 000000000..906381876
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,122 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=false
+cleanup.remove_redundant_type_arguments=false
+cleanup.remove_trailing_whitespaces=false
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=org.eclipse.jdt.ui.default.eclipse_clean_up_profile
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+org.eclipse.jdt.ui.text.custom_code_templates=
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.core.prefs b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 000000000..706f07e8a
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+pluginProject.extensions=true
+resolve.requirebundle=false
diff --git a/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 000000000..73a356b6d
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,8 @@
+classpath=true
+dsVersion=V1_3
+eclipse.preferences.version=1
+enabled=true
+generateBundleActivationPolicyLazy=true
+path=OSGI-INF
+validationErrorLevel=error
+validationErrorLevel.missingImplicitUnbindMethod=error
diff --git a/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.prefs b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.prefs
new file mode 100644
index 000000000..47bd5bdfc
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,34 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=2
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=2
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.no.automatic.module=1
+compilers.p.not-externalized-att=0
+compilers.p.service.component.without.lazyactivation=1
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.passage.lac.jetty/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lac.jetty/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..a05cc15d9
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.eclipse.passage.lac.jetty
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.passage.lac.jetty;singleton:=true
+Bundle-Version: 0.1.0.qualifier
+Bundle-Name: %Bundle-Name
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Copyright: %Bundle-Copyright
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.core.runtime;bundle-version="0.0.0",
+ org.eclipse.osgi.services;bundle-version="0.0.0",
+ org.eclipse.passage.lac;bundle-version="0.1.0",
+ org.eclipse.passage.lic.net;bundle-version="1.0.100",
+ org.eclipse.passage.lic.jetty;bundle-version="0.1.0"
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.passage.lac.internal.jetty.JettyActivator
diff --git a/bundles/org.eclipse.passage.lac.jetty/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.passage.lac.jetty/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 000000000..9d77c2c81
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,22 @@
+#Properties file for org.eclipse.passage.lac.jetty
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+Bundle-Name = Passage LAC Jetty
+Bundle-Vendor = Eclipse Passage
+Bundle-Copyright = Copyright (c) 2021 ArSysOp and others.\n\
+\n\
+This program and the accompanying materials are made\n\
+available under the terms of the Eclipse Public License 2.0\n\
+which is available at https://www.eclipse.org/legal/epl-2.0/\n\
+\n\
+SPDX-License-Identifier: EPL-2.0\n\
diff --git a/bundles/org.eclipse.passage.lac.jetty/about.html b/bundles/org.eclipse.passage.lac.jetty/about.html
new file mode 100644
index 000000000..164f781a8
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/about.html
@@ -0,0 +1,36 @@
+
+
+
+
+About
+
+
+ About This Content
+
+ November 30, 2017
+ License
+
+
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at http://www.eclipse.org/legal/epl-2.0.
+ For purposes of the EPL, "Program" will mean the Content.
+
+
+
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at http://www.eclipse.org.
+
+
+
+
\ No newline at end of file
diff --git a/bundles/org.eclipse.passage.lac.jetty/build.properties b/bundles/org.eclipse.passage.lac.jetty/build.properties
new file mode 100644
index 000000000..6f36dd4c0
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/build.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ OSGI-INF/,\
+ about.html
diff --git a/bundles/org.eclipse.passage.lac.jetty/src/org/eclipse/passage/lac/internal/jetty/JettyActivator.java b/bundles/org.eclipse.passage.lac.jetty/src/org/eclipse/passage/lac/internal/jetty/JettyActivator.java
new file mode 100644
index 000000000..4a5d73e7c
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac.jetty/src/org/eclipse/passage/lac/internal/jetty/JettyActivator.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2021 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.lac.internal.jetty;
+
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.passage.internal.lac.base.BaseLicensingRequestHandled;
+import org.eclipse.passage.lic.internal.jetty.JettyHandler;
+import org.eclipse.passage.lic.internal.jetty.JettyServer;
+import org.eclipse.passage.lic.internal.net.connect.Port;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class JettyActivator implements BundleActivator {
+
+ private final JettyServer jetty;
+
+ public JettyActivator() {
+ jetty = new JettyServer(this::handler);
+ }
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ jetty.launch(new Port(Platform.getApplicationArgs(), 8090));
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ jetty.terminate();
+ }
+
+ private JettyHandler handler() {
+ return new JettyHandler(request -> new BaseLicensingRequestHandled(request).get());
+ }
+
+}
diff --git a/bundles/org.eclipse.passage.lac/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lac/META-INF/MANIFEST.MF
index 0c6756cd9..ba0e2a7e4 100644
--- a/bundles/org.eclipse.passage.lac/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.passage.lac/META-INF/MANIFEST.MF
@@ -7,3 +7,5 @@ Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
Bundle-Copyright: %Bundle-Copyright
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.passage.lic.net;bundle-version="1.0.100"
+Export-Package: org.eclipse.passage.internal.lac.base
diff --git a/bundles/org.eclipse.passage.lac/src/org/eclipse/passage/internal/lac/base/BaseLicensingRequestHandled.java b/bundles/org.eclipse.passage.lac/src/org/eclipse/passage/internal/lac/base/BaseLicensingRequestHandled.java
new file mode 100644
index 000000000..494b519db
--- /dev/null
+++ b/bundles/org.eclipse.passage.lac/src/org/eclipse/passage/internal/lac/base/BaseLicensingRequestHandled.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2021 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.internal.lac.base;
+
+import org.eclipse.passage.lic.internal.net.handle.NetRequest;
+import org.eclipse.passage.lic.internal.net.handle.NetRequestHandled;
+import org.eclipse.passage.lic.internal.net.handle.NetResponse;
+
+public final class BaseLicensingRequestHandled implements NetRequestHandled {
+
+ public BaseLicensingRequestHandled(NetRequest origin) {
+ // TODO Auto-generated constructor stub
+ }
+
+ @Override
+ public NetResponse get() {
+ return null;
+ }
+
+}
diff --git a/bundles/org.eclipse.passage.lbc.base/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lbc.base/META-INF/MANIFEST.MF
index 7e9dd86b9..d2bb28109 100644
--- a/bundles/org.eclipse.passage.lbc.base/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.passage.lbc.base/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Automatic-Module-Name: org.eclipse.passage.lbc.base
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.passage.lbc.base
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.1.qualifier
Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
Bundle-Copyright: %Bundle-Copyright
diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseFlotingRequestHandled.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseFlotingRequestHandled.java
index c4c1b748b..027aedd8a 100644
--- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseFlotingRequestHandled.java
+++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/BaseFlotingRequestHandled.java
@@ -22,9 +22,9 @@
public final class BaseFlotingRequestHandled implements NetRequestHandled {
private final RawRequest request;
- private final Chores chores;
+ private final Chores chores;
- public BaseFlotingRequestHandled(RawRequest request, Chores chores) {
+ public BaseFlotingRequestHandled(RawRequest request, Chores chores) {
Objects.requireNonNull(request, "BaseFlotingRequestHandled:request");//$NON-NLS-1$
Objects.requireNonNull(chores, "BaseFlotingRequestHandled:chores");//$NON-NLS-1$
this.request = request;
diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/EObjectTransfer.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/EObjectTransfer.java
index 6eb91cebb..56db8b50e 100644
--- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/EObjectTransfer.java
+++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/EObjectTransfer.java
@@ -14,6 +14,7 @@
import org.eclipse.emf.ecore.EObject;
import org.eclipse.passage.lic.internal.api.LicensingException;
+import org.eclipse.passage.lic.internal.api.conditions.mining.ContentType;
import org.eclipse.passage.lic.internal.emf.EObjectToBytes;
import org.eclipse.passage.lic.internal.net.handle.NetResponse;
@@ -45,4 +46,9 @@ public byte[] payload() throws LicensingException {
return new EObjectToBytes(payload).get();
}
+ @Override
+ public ContentType contentType() {
+ return new ContentType.Xml();
+ }
+
}
diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/Failure.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/Failure.java
index dfc409cdf..7cd2c3dfb 100644
--- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/Failure.java
+++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/Failure.java
@@ -14,6 +14,7 @@
import org.eclipse.passage.lic.floating.model.api.GrantAcqisition;
import org.eclipse.passage.lic.internal.api.LicensedProduct;
+import org.eclipse.passage.lic.internal.api.conditions.mining.ContentType;
import org.eclipse.passage.lic.internal.net.handle.NetResponse;
public abstract class Failure implements NetResponse {
@@ -27,25 +28,30 @@ protected Failure(int code, String message) {
}
@Override
- public boolean failed() {
+ public final boolean failed() {
return true;
}
@Override
- public boolean carriesPayload() {
+ public final boolean carriesPayload() {
return false;
}
@Override
- public Error error() {
+ public final Error error() {
return new Err();
}
@Override
- public byte[] payload() {
+ public final byte[] payload() {
throw new IllegalStateException("Is not intended to be called for failed response: no valid output"); //$NON-NLS-1$ dev
}
+ @Override
+ public final ContentType contentType() {
+ return new ContentType.Xml();
+ }
+
private final class Err implements Error {
@Override
diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/PlainSuceess.java b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/PlainSuceess.java
index 046bc3587..9c4ffbed0 100644
--- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/PlainSuceess.java
+++ b/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/PlainSuceess.java
@@ -12,6 +12,7 @@
*******************************************************************************/
package org.eclipse.passage.lbc.internal.base;
+import org.eclipse.passage.lic.internal.api.conditions.mining.ContentType;
import org.eclipse.passage.lic.internal.net.handle.NetResponse;
public final class PlainSuceess implements NetResponse {
@@ -36,4 +37,9 @@ public byte[] payload() {
throw new IllegalStateException("Plain successful result is not intended to contain any payload"); //$NON-NLS-1$ dev
}
+ @Override
+ public ContentType contentType() {
+ return new ContentType.Xml();
+ }
+
}
diff --git a/bundles/org.eclipse.passage.lbc.jetty/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lbc.jetty/META-INF/MANIFEST.MF
index bcdf3eea9..7c23de55b 100644
--- a/bundles/org.eclipse.passage.lbc.jetty/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.passage.lbc.jetty/META-INF/MANIFEST.MF
@@ -2,19 +2,15 @@ Manifest-Version: 1.0
Automatic-Module-Name: org.eclipse.passage.lbc.jetty
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.passage.lbc.jetty;singleton:=true
-Bundle-Version: 0.5.100.qualifier
+Bundle-Version: 0.5.200.qualifier
Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
Bundle-Copyright: %Bundle-Copyright
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Require-Bundle: javax.servlet;bundle-version="0.0.0",
- org.eclipse.core.runtime;bundle-version="0.0.0",
- org.eclipse.jetty.http;bundle-version="0.0.0",
- org.eclipse.jetty.server;bundle-version="0.0.0",
- org.eclipse.jetty.util;bundle-version="0.0.0",
- org.eclipse.osgi.services;bundle-version="0.0.0",
- org.eclipse.passage.lbc.base;bundle-version="0.0.0",
- org.eclipse.passage.lic.base;bundle-version="0.0.0",
- org.eclipse.passage.lic.net;bundle-version="1.0.100"
+Require-Bundle: org.eclipse.osgi.services;bundle-version="0.0.0",
+ org.eclipse.passage.lbc.base;bundle-version="1.1.1",
+ org.eclipse.passage.lic.net;bundle-version="1.0.100",
+ org.eclipse.passage.lic.jetty;bundle-version="0.1.0",
+ org.eclipse.core.runtime;bundle-version="3.20.0"
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.eclipse.passage.lbc.internal.jetty.JettyActivator
diff --git a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyActivator.java b/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyActivator.java
index 4f1fde810..e0eca6d78 100644
--- a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyActivator.java
+++ b/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyActivator.java
@@ -13,21 +13,27 @@
package org.eclipse.passage.lbc.internal.jetty;
import org.eclipse.core.runtime.Platform;
-import org.eclipse.passage.lbc.internal.base.Port;
+import org.eclipse.passage.lbc.internal.base.BaseFlotingRequestHandled;
+import org.eclipse.passage.lbc.internal.base.EagerFloatingState;
+import org.eclipse.passage.lbc.internal.base.api.FloatingState;
+import org.eclipse.passage.lic.internal.jetty.JettyHandler;
+import org.eclipse.passage.lic.internal.jetty.JettyServer;
+import org.eclipse.passage.lic.internal.net.connect.Port;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class JettyActivator implements BundleActivator {
private final JettyServer jetty;
+ private final FloatingState state = new EagerFloatingState();
public JettyActivator() {
- jetty = new JettyServer();
+ jetty = new JettyServer(this::handler);
}
@Override
public void start(BundleContext context) throws Exception {
- jetty.launch(new Port(Platform.getApplicationArgs()));
+ jetty.launch(new Port(Platform.getApplicationArgs(), 8090));
}
@Override
@@ -35,4 +41,8 @@ public void stop(BundleContext context) throws Exception {
jetty.terminate();
}
+ private JettyHandler handler() {
+ return new JettyHandler(request -> new BaseFlotingRequestHandled(new StatedRequest(request, state)).get());
+ }
+
}
diff --git a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/StatedRequest.java b/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/StatedRequest.java
new file mode 100644
index 000000000..79b6cce91
--- /dev/null
+++ b/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/StatedRequest.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2020 ArSysOp
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * https://www.eclipse.org/legal/epl-2.0/.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * ArSysOp - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.passage.lbc.internal.jetty;
+
+import java.io.IOException;
+
+import org.eclipse.passage.lbc.internal.base.api.FloatingState;
+import org.eclipse.passage.lbc.internal.base.api.RawRequest;
+import org.eclipse.passage.lic.internal.net.handle.NetRequest;
+
+final class StatedRequest implements RawRequest {
+
+ private final NetRequest delegate;
+ private final FloatingState state;
+
+ StatedRequest(NetRequest delegate, FloatingState state) {
+ this.delegate = delegate;
+ this.state = state;
+ }
+
+ @Override
+ public String parameter(String name) {
+ return delegate.parameter(name);
+ }
+
+ @Override
+ public byte[] content() throws IOException {
+ return delegate.content();
+ }
+
+ @Override
+ public FloatingState state() {
+ return state;
+ }
+
+}
diff --git a/bundles/org.eclipse.passage.lic.api/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lic.api/META-INF/MANIFEST.MF
index 93030e87f..d7018466e 100644
--- a/bundles/org.eclipse.passage.lic.api/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.passage.lic.api/META-INF/MANIFEST.MF
@@ -73,19 +73,23 @@ Export-Package: org.eclipse.passage.lic.internal.api;
org.eclipse.passage.lic.json,
org.eclipse.passage.lic.oshi",
org.eclipse.passage.lic.internal.api.conditions.mining;
- x-friends:="org.eclipse.passage.lbc.api,
+ x-friends:="org.eclipse.passage.lac.jetty,
+ org.eclipse.passage.lbc.api,
org.eclipse.passage.lbc.base,
- org.eclipse.passage.lic.json,
- org.eclipse.passage.lic.hc,
- org.eclipse.passage.lic.licenses.migration,
- org.eclipse.passage.lic.base,
- org.eclipse.passage.lic.equinox,
- org.eclipse.passage.lic.base.tests,
org.eclipse.passage.lbc.jetty,
org.eclipse.passage.lic.api.tests,
+ org.eclipse.passage.lic.base,
+ org.eclipse.passage.lic.base.tests,
+ org.eclipse.passage.lic.equinox,
+ org.eclipse.passage.lic.hc,
org.eclipse.passage.lic.hc.tests,
+ org.eclipse.passage.lic.jface,
+ org.eclipse.passage.lic.json,
+ org.eclipse.passage.lic.licenses.migration,
org.eclipse.passage.seal.demo,
- org.eclipse.passage.lic.jface",
+ org.eclipse.passage.lac,
+ org.eclipse.passage.lic.net,
+ org.eclipse.passage.lic.jetty",
org.eclipse.passage.lic.internal.api.diagnostic;
x-friends:="org.eclipse.passage.lic.base,
org.eclipse.passage.lic.jface,
diff --git a/bundles/org.eclipse.passage.lic.jetty/.classpath b/bundles/org.eclipse.passage.lic.jetty/.classpath
new file mode 100644
index 000000000..eca7bdba8
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/bundles/org.eclipse.passage.lic.jetty/.project b/bundles/org.eclipse.passage.lic.jetty/.project
new file mode 100644
index 000000000..bea6aa11e
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/.project
@@ -0,0 +1,39 @@
+
+
+ org.eclipse.passage.lic.jetty
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+ org.eclipse.pde.ds.core.builder
+
+
+
+
+ org.eclipse.pde.api.tools.apiAnalysisBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.pde.api.tools.apiAnalysisNature
+
+
diff --git a/bundles/org.eclipse.passage.lic.jetty/.settings/.api_filters b/bundles/org.eclipse.passage.lic.jetty/.settings/.api_filters
new file mode 100644
index 000000000..8b54a69f8
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/.settings/.api_filters
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..c0a6a56ce
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,115 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
+org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
+org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
+org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
+org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
+org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
+org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 000000000..906381876
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,122 @@
+cleanup.add_default_serial_version_id=true
+cleanup.add_generated_serial_version_id=false
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=false
+cleanup.always_use_blocks=true
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_functional_interfaces=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=false
+cleanup.format_source_code=false
+cleanup.format_source_code_changes_only=false
+cleanup.insert_inferred_type_arguments=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=false
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_redundant_modifiers=false
+cleanup.remove_redundant_semicolons=false
+cleanup.remove_redundant_type_arguments=false
+cleanup.remove_trailing_whitespaces=false
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=false
+cleanup.sort_members_all=false
+cleanup.use_anonymous_class_creation=false
+cleanup.use_blocks=false
+cleanup.use_blocks_only_for_return_and_throw=false
+cleanup.use_lambda=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=false
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=false
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=org.eclipse.jdt.ui.default.eclipse_clean_up_profile
+cleanup_settings_version=2
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+org.eclipse.jdt.ui.text.custom_code_templates=
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=true
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_redundant_modifiers=false
+sp_cleanup.remove_redundant_semicolons=false
+sp_cleanup.remove_redundant_type_arguments=false
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=true
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.pde.ds.annotations.prefs b/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.pde.ds.annotations.prefs
new file mode 100644
index 000000000..73a356b6d
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.pde.ds.annotations.prefs
@@ -0,0 +1,8 @@
+classpath=true
+dsVersion=V1_3
+eclipse.preferences.version=1
+enabled=true
+generateBundleActivationPolicyLazy=true
+path=OSGI-INF
+validationErrorLevel=error
+validationErrorLevel.missingImplicitUnbindMethod=error
diff --git a/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.pde.prefs b/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.pde.prefs
new file mode 100644
index 000000000..47bd5bdfc
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/.settings/org.eclipse.pde.prefs
@@ -0,0 +1,34 @@
+compilers.f.unresolved-features=1
+compilers.f.unresolved-plugins=1
+compilers.incompatible-environment=1
+compilers.p.build=1
+compilers.p.build.bin.includes=1
+compilers.p.build.encodings=2
+compilers.p.build.java.compiler=2
+compilers.p.build.java.compliance=1
+compilers.p.build.missing.output=2
+compilers.p.build.output.library=1
+compilers.p.build.source.library=1
+compilers.p.build.src.includes=1
+compilers.p.deprecated=1
+compilers.p.discouraged-class=1
+compilers.p.internal=1
+compilers.p.missing-packages=2
+compilers.p.missing-version-export-package=2
+compilers.p.missing-version-import-package=2
+compilers.p.missing-version-require-bundle=1
+compilers.p.no-required-att=0
+compilers.p.no.automatic.module=1
+compilers.p.not-externalized-att=0
+compilers.p.service.component.without.lazyactivation=1
+compilers.p.unknown-attribute=1
+compilers.p.unknown-class=1
+compilers.p.unknown-element=1
+compilers.p.unknown-identifier=1
+compilers.p.unknown-resource=1
+compilers.p.unresolved-ex-points=0
+compilers.p.unresolved-import=0
+compilers.s.create-docs=false
+compilers.s.doc-folder=doc
+compilers.s.open-tags=1
+eclipse.preferences.version=1
diff --git a/bundles/org.eclipse.passage.lic.jetty/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lic.jetty/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..a4a8cbf13
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Automatic-Module-Name: org.eclipse.passage.lic.jrtty
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.eclipse.passage.lic.jetty
+Bundle-Version: 0.1.0.qualifier
+Bundle-Name: %Bundle-Name
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Copyright: %Bundle-Copyright
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: javax.servlet;bundle-version="0.0.0",
+ org.eclipse.core.runtime;bundle-version="0.0.0",
+ org.eclipse.jetty.http;bundle-version="0.0.0",
+ org.eclipse.jetty.server;bundle-version="0.0.0",
+ org.eclipse.jetty.util;bundle-version="0.0.0",
+ org.eclipse.osgi.services;bundle-version="0.0.0",
+ org.eclipse.passage.lic.net;bundle-version="1.0.100"
+Export-Package: org.eclipse.passage.lic.internal.jetty;
+ x-friends:="org.eclipse.passage.lbc.base,
+ org.eclipse.passage.lbc.jetty,
+ org.eclipse.passage.lac.jetty"
+Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.passage.lic.jetty/OSGI-INF/l10n/bundle.properties b/bundles/org.eclipse.passage.lic.jetty/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 000000000..fc0ea28c2
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,23 @@
+#Properties file for org.eclipse.passage.lic.jetty
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+
+Bundle-Name = Passage LIC Jetty
+Bundle-Vendor = Eclipse Passage
+Bundle-Copyright = Copyright (c) 2021 ArSysOp and others.\n\
+\n\
+This program and the accompanying materials are made\n\
+available under the terms of the Eclipse Public License 2.0\n\
+which is available at https://www.eclipse.org/legal/epl-2.0/\n\
+\n\
+SPDX-License-Identifier: EPL-2.0\n\
diff --git a/bundles/org.eclipse.passage.lic.jetty/about.html b/bundles/org.eclipse.passage.lic.jetty/about.html
new file mode 100644
index 000000000..164f781a8
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/about.html
@@ -0,0 +1,36 @@
+
+
+
+
+About
+
+
+ About This Content
+
+ November 30, 2017
+ License
+
+
+ The Eclipse Foundation makes available all content in this plug-in
+ ("Content"). Unless otherwise indicated below, the Content
+ is provided to you under the terms and conditions of the Eclipse
+ Public License Version 2.0 ("EPL"). A copy of the EPL is
+ available at http://www.eclipse.org/legal/epl-2.0.
+ For purposes of the EPL, "Program" will mean the Content.
+
+
+
+ If you did not receive this Content directly from the Eclipse
+ Foundation, the Content is being redistributed by another party
+ ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the
+ Redistributor's license that was provided with the Content. If no such
+ license exists, contact the Redistributor. Unless otherwise indicated
+ below, the terms and conditions of the EPL still apply to any source
+ code in the Content and such source code may be obtained at http://www.eclipse.org.
+
+
+
+
\ No newline at end of file
diff --git a/bundles/org.eclipse.passage.lic.jetty/about.ini b/bundles/org.eclipse.passage.lic.jetty/about.ini
new file mode 100644
index 000000000..9cdf90902
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/about.ini
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=passage32.png
diff --git a/bundles/org.eclipse.passage.lic.jetty/about.mappings b/bundles/org.eclipse.passage.lic.jetty/about.mappings
new file mode 100644
index 000000000..6d9f2e527
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/about.mappings
@@ -0,0 +1,18 @@
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=${buildId}
diff --git a/bundles/org.eclipse.passage.lic.jetty/about.properties b/bundles/org.eclipse.passage.lic.jetty/about.properties
new file mode 100644
index 000000000..ab727d790
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/about.properties
@@ -0,0 +1,24 @@
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+blurb=Passage Licensing Jetty Integration Units.\n\
+\n\
+Version: {featureVersion}\n\
+\n\
+Copyright (c) 2021 ArSysOp and others. All rights reserved.\n\
+Visit http://www.eclipse.org/passage
diff --git a/bundles/org.eclipse.passage.lic.jetty/build.properties b/bundles/org.eclipse.passage.lic.jetty/build.properties
new file mode 100644
index 000000000..d83aae1fc
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.jetty/build.properties
@@ -0,0 +1,23 @@
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ OSGI-INF/,\
+ about.html,\
+ about.ini,\
+ about.mappings,\
+ about.properties,\
+ passage32.png
diff --git a/bundles/org.eclipse.passage.lic.jetty/passage32.png b/bundles/org.eclipse.passage.lic.jetty/passage32.png
new file mode 100644
index 000000000..8f2e30bf3
Binary files /dev/null and b/bundles/org.eclipse.passage.lic.jetty/passage32.png differ
diff --git a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyException.java b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyException.java
similarity index 82%
rename from bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyException.java
rename to bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyException.java
index 6be14e2f7..86d50cbeb 100644
--- a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyException.java
+++ b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyException.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2020 ArSysOp
+ * Copyright (c) 2020, 2021 ArSysOp
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -10,7 +10,7 @@
* Contributors:
* ArSysOp - initial API and implementation
*******************************************************************************/
-package org.eclipse.passage.lbc.internal.jetty;
+package org.eclipse.passage.lic.internal.jetty;
/**
* Unrecoverable Jetty Server lifecycle error
@@ -18,7 +18,7 @@
* @see JettyServer
*
*/
-public class JettyException extends Exception {
+public final class JettyException extends Exception {
private static final long serialVersionUID = 1L;
diff --git a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyHandler.java b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyHandler.java
similarity index 77%
rename from bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyHandler.java
rename to bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyHandler.java
index bb4329909..8fc76e362 100644
--- a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyHandler.java
+++ b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyHandler.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2020 ArSysOp
+ * Copyright (c) 2021 ArSysOp
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -10,11 +10,13 @@
* Contributors:
* ArSysOp - initial API and implementation
*******************************************************************************/
-package org.eclipse.passage.lbc.internal.jetty;
+package org.eclipse.passage.lic.internal.jetty;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.Charset;
+import java.util.Objects;
+import java.util.function.Function;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -22,10 +24,7 @@
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
-import org.eclipse.passage.lbc.internal.base.BaseFlotingRequestHandled;
-import org.eclipse.passage.lbc.internal.base.EagerFloatingState;
-import org.eclipse.passage.lbc.internal.base.api.FloatingState;
-import org.eclipse.passage.lic.internal.api.conditions.mining.ContentType;
+import org.eclipse.passage.lic.internal.net.handle.NetRequest;
import org.eclipse.passage.lic.internal.net.handle.NetResponse;
/**
@@ -35,9 +34,14 @@
* Thus, it's the only place to keep server's {@code state}. Which, for the
* floating server, is a persistent grant acquisition ledger.
*/
-final class JettyHandler extends AbstractHandler {
+public final class JettyHandler extends AbstractHandler {
- private final FloatingState state = new EagerFloatingState();
+ private final Function handler;
+
+ public JettyHandler(Function handler) {
+ Objects.requireNonNull(handler, "JettyHandler::handler"); //$NON-NLS-1$
+ this.handler = handler;
+ }
@Override
public void handle(String target, Request request, HttpServletRequest wrapper, HttpServletResponse envelope)
@@ -47,11 +51,11 @@ public void handle(String target, Request request, HttpServletRequest wrapper, H
}
private NetResponse response(HttpServletRequest request) {
- return new BaseFlotingRequestHandled(new JettyRequest(request, state)).get();
+ return handler.apply(new JettyRequest(request));
}
private void write(NetResponse response, HttpServletResponse envelope) throws IOException {
- envelope.setContentType(new ContentType.Xml().contentType());
+ envelope.setContentType(response.contentType().contentType());
envelope.setCharacterEncoding("UTF-8"); //$NON-NLS-1$
if (response.failed()) {
envelope.sendError(response.error().code(), response.error().message());
diff --git a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyRequest.java b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyRequest.java
similarity index 68%
rename from bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyRequest.java
rename to bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyRequest.java
index 775c17c5f..9568c1949 100644
--- a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyRequest.java
+++ b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyRequest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2020 ArSysOp
+ * Copyright (c) 2021 ArSysOp
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -10,24 +10,23 @@
* Contributors:
* ArSysOp - initial API and implementation
*******************************************************************************/
-package org.eclipse.passage.lbc.internal.jetty;
+package org.eclipse.passage.lic.internal.jetty;
import java.io.IOException;
import java.io.InputStream;
+import java.util.Objects;
import javax.servlet.http.HttpServletRequest;
-import org.eclipse.passage.lbc.internal.base.api.FloatingState;
-import org.eclipse.passage.lbc.internal.base.api.RawRequest;
+import org.eclipse.passage.lic.internal.net.handle.NetRequest;
-final class JettyRequest implements RawRequest {
+public final class JettyRequest implements NetRequest {
private final HttpServletRequest origin;
- private final FloatingState state;
- JettyRequest(HttpServletRequest origin, FloatingState state) {
+ public JettyRequest(HttpServletRequest origin) {
+ Objects.requireNonNull(origin, "JettyRequest::origin"); //$NON-NLS-1$
this.origin = origin;
- this.state = state;
}
@Override
@@ -44,9 +43,4 @@ public byte[] content() throws IOException {
return content;
}
- @Override
- public FloatingState state() {
- return state;
- }
-
}
diff --git a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyServer.java b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyServer.java
similarity index 66%
rename from bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyServer.java
rename to bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyServer.java
index 78d46e1ce..fae66d52b 100644
--- a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/JettyServer.java
+++ b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/JettyServer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2020 ArSysOp
+ * Copyright (c) 2021 ArSysOp
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -10,24 +10,32 @@
* Contributors:
* ArSysOp - initial API and implementation
*******************************************************************************/
-package org.eclipse.passage.lbc.internal.jetty;
+package org.eclipse.passage.lic.internal.jetty;
+
+import java.util.Objects;
+import java.util.function.Supplier;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
-import org.eclipse.passage.lbc.internal.base.Port;
-import org.eclipse.passage.lbc.internal.jetty.i18n.Messages;
+import org.eclipse.passage.lic.internal.jetty.i18n.Messages;
+import org.eclipse.passage.lic.internal.net.connect.Port;
-final class JettyServer {
+public final class JettyServer {
private final Logger logger = Log.getLogger(JettyServer.class);
-
+ private final Supplier handler;
private Server server;
- void launch(Port port) throws JettyException {
+ public JettyServer(Supplier handler) {
+ Objects.requireNonNull(handler, "JettyServer::handler"); //$NON-NLS-1$
+ this.handler = handler;
+ }
+
+ public void launch(Port port) throws JettyException {
try {
server = new Server(port.get().get());
- server.setHandler(new JettyHandler());
+ server.setHandler(handler.get());
server.start();
logger.info(String.format(Messages.started, port.get()));
} catch (Exception exception) {
@@ -37,7 +45,7 @@ void launch(Port port) throws JettyException {
}
}
- void terminate() throws JettyException {
+ public void terminate() throws JettyException {
try {
server.stop();
logger.info(String.format(Messages.stopped));
diff --git a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/i18n/Messages.java b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/i18n/Messages.java
similarity index 91%
rename from bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/i18n/Messages.java
rename to bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/i18n/Messages.java
index 51a0279cb..e4d2c8249 100644
--- a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/i18n/Messages.java
+++ b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/i18n/Messages.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2019, 2020 ArSysOp
+ * Copyright (c) 2021 ArSysOp
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -10,7 +10,7 @@
* Contributors:
* ArSysOp - initial API and implementation
*******************************************************************************/
-package org.eclipse.passage.lbc.internal.jetty.i18n;
+package org.eclipse.passage.lic.internal.jetty.i18n;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
@@ -19,7 +19,8 @@
* @since 0.1
*/
public final class Messages {
- private static final String BUNDLE_NAME = "org.eclipse.passage.lbc.internal.jetty.i18n.Messages"; //$NON-NLS-1$
+
+ private static final String BUNDLE_NAME = "org.eclipse.passage.lic.internal.jetty.i18n.Messages"; //$NON-NLS-1$
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);
diff --git a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/i18n/Messages.properties b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/i18n/Messages.properties
similarity index 94%
rename from bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/i18n/Messages.properties
rename to bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/i18n/Messages.properties
index 169cfc7c7..bd9ae06b6 100644
--- a/bundles/org.eclipse.passage.lbc.jetty/src/org/eclipse/passage/lbc/internal/jetty/i18n/Messages.properties
+++ b/bundles/org.eclipse.passage.lic.jetty/src/org/eclipse/passage/lic/internal/jetty/i18n/Messages.properties
@@ -1,5 +1,5 @@
###############################################################################
-# Copyright (c) 2020 ArSysOp and others
+# Copyright (c) 2021 ArSysOp and others
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
diff --git a/bundles/org.eclipse.passage.lic.net/.settings/.api_filters b/bundles/org.eclipse.passage.lic.net/.settings/.api_filters
new file mode 100644
index 000000000..8b54a69f8
--- /dev/null
+++ b/bundles/org.eclipse.passage.lic.net/.settings/.api_filters
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/bundles/org.eclipse.passage.lic.net/META-INF/MANIFEST.MF b/bundles/org.eclipse.passage.lic.net/META-INF/MANIFEST.MF
index db0070a74..bff7db64c 100644
--- a/bundles/org.eclipse.passage.lic.net/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.passage.lic.net/META-INF/MANIFEST.MF
@@ -2,18 +2,24 @@ Manifest-Version: 1.0
Automatic-Module-Name: org.eclipse.passage.lic.net
Bundle-ManifestVersion: 2
Bundle-SymbolicName: org.eclipse.passage.lic.net
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.1.0.qualifier
Bundle-Name: %Bundle-Name
Bundle-Vendor: %Bundle-Vendor
Bundle-Copyright: %Bundle-Copyright
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.emf.ecore.xmi;bundle-version="0.0.0",
org.eclipse.passage.lic.floating.model;bundle-version="0.1.0",
- org.eclipse.passage.lic.base;bundle-version="1.0.101"
+ org.eclipse.passage.lic.base;bundle-version="1.0.101";visibility:=reexport,
+ org.apache.logging.log4j;bundle-version="2.8.2"
Export-Package: org.eclipse.passage.lic.internal.net;
x-friends:="org.eclipse.passage.lbc.base,
org.eclipse.passage.lic.hc,
org.eclipse.passage.lbc.jetty,
org.eclipse.passage.lbc.base.tests",
- org.eclipse.passage.lic.internal.net.handle;x-friends:="org.eclipse.passage.lbc.base,org.eclipse.passage.lbc.jetty"
+ org.eclipse.passage.lic.internal.net.connect,
+ org.eclipse.passage.lic.internal.net.handle;
+ x-friends:="org.eclipse.passage.lac,
+ org.eclipse.passage.lbc.base,
+ org.eclipse.passage.lic.jetty,
+ org.eclipse.passage.lbc.jetty"
Bundle-ActivationPolicy: lazy
diff --git a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/Port.java b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/connect/Port.java
similarity index 87%
rename from bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/Port.java
rename to bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/connect/Port.java
index 86e86212e..f7cf58ec7 100644
--- a/bundles/org.eclipse.passage.lbc.base/src/org/eclipse/passage/lbc/internal/base/Port.java
+++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/connect/Port.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2020 ArSysOp
+ * Copyright (c) 2020, 2021 ArSysOp
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -10,7 +10,7 @@
* Contributors:
* ArSysOp - initial API and implementation
*******************************************************************************/
-package org.eclipse.passage.lbc.internal.base;
+package org.eclipse.passage.lic.internal.net.connect;
import java.util.Arrays;
import java.util.Optional;
@@ -20,14 +20,16 @@
import org.eclipse.passage.lic.internal.base.NamedData;
/**
- * @since 1.0
+ * @since 1.1
*/
public final class Port implements NamedData {
private final Logger log = LogManager.getLogger(getClass());
private final Optional raw;
+ private final int lazy;
- public Port(String[] sources) {
+ public Port(String[] sources, int lazy) {
+ this.lazy = lazy;
String prefix = String.format("-%s=", key()); //$NON-NLS-1$
this.raw = Arrays.stream(sources)//
.map(String::toLowerCase)//
@@ -47,7 +49,7 @@ public Optional get() {
}
private Optional defaultPort() {
- return Optional.of(8090);
+ return Optional.of(lazy);
}
private Optional parse(String port) {
diff --git a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/handle/NetResponse.java b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/handle/NetResponse.java
index 44e6e74d4..b4e517bd7 100644
--- a/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/handle/NetResponse.java
+++ b/bundles/org.eclipse.passage.lic.net/src/org/eclipse/passage/lic/internal/net/handle/NetResponse.java
@@ -13,6 +13,7 @@
package org.eclipse.passage.lic.internal.net.handle;
import org.eclipse.passage.lic.internal.api.LicensingException;
+import org.eclipse.passage.lic.internal.api.conditions.mining.ContentType;
/**
* @since 1.0
@@ -33,4 +34,7 @@ public static interface Error {
String message();
}
+
+ ContentType contentType();
+
}
diff --git a/features/org.eclipse.passage.lac.execute.feature/feature.xml b/features/org.eclipse.passage.lac.execute.feature/feature.xml
index 8deaecb90..0bf11e594 100644
--- a/features/org.eclipse.passage.lac.execute.feature/feature.xml
+++ b/features/org.eclipse.passage.lac.execute.feature/feature.xml
@@ -38,6 +38,7 @@
+
-
+ -->
- -->
+
diff --git a/features/org.eclipse.passage.lbc.execute.feature/feature.xml b/features/org.eclipse.passage.lbc.execute.feature/feature.xml
index 779b670e1..be89f21c5 100644
--- a/features/org.eclipse.passage.lbc.execute.feature/feature.xml
+++ b/features/org.eclipse.passage.lbc.execute.feature/feature.xml
@@ -38,6 +38,7 @@
+
+
+ org.eclipse.passage.lic.jetty.feature
+
+
+
+
+
+ org.eclipse.pde.FeatureBuilder
+
+
+
+
+
+ org.eclipse.pde.FeatureNature
+
+
diff --git a/features/org.eclipse.passage.lic.jetty.feature/build.properties b/features/org.eclipse.passage.lic.jetty.feature/build.properties
new file mode 100644
index 000000000..b591e74e2
--- /dev/null
+++ b/features/org.eclipse.passage.lic.jetty.feature/build.properties
@@ -0,0 +1,15 @@
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+
+bin.includes = feature.xml,\
+ feature.properties
diff --git a/features/org.eclipse.passage.lic.jetty.feature/feature.properties b/features/org.eclipse.passage.lic.jetty.feature/feature.properties
new file mode 100644
index 000000000..fd5d59a4c
--- /dev/null
+++ b/features/org.eclipse.passage.lic.jetty.feature/feature.properties
@@ -0,0 +1,25 @@
+#Properties file for org.eclipse.passage.lic.jetty.feature
+###############################################################################
+# Copyright (c) 2021 ArSysOp and others
+#
+# This program and the accompanying materials are made available under the
+# terms of the Eclipse Public License 2.0 which is available at
+# https://www.eclipse.org/legal/epl-2.0/.
+#
+# SPDX-License-Identifier: EPL-2.0
+#
+# Contributors:
+# ArSysOp - initial API and implementation
+###############################################################################
+
+featureName=Passage LIC Jetty
+providerName=Eclipse Passage
+description=Passage Licensing Jetty Integration Units.
+copyright=Copyright (c) 2021 ArSysOp and others.\n\
+\n\
+This program and the accompanying materials are made\n\
+available under the terms of the Eclipse Public License 2.0\n\
+which is available at https://www.eclipse.org/legal/epl-2.0/\n\
+\n\
+SPDX-License-Identifier: EPL-2.0\n\
+
diff --git a/features/org.eclipse.passage.lic.jetty.feature/feature.xml b/features/org.eclipse.passage.lic.jetty.feature/feature.xml
new file mode 100644
index 000000000..47a2627af
--- /dev/null
+++ b/features/org.eclipse.passage.lic.jetty.feature/feature.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+ %description
+
+
+
+ %copyright
+
+
+
+ %license
+
+
+
+
+
+
+
+
+
diff --git a/releng/org.eclipse.passage.lac.aggregator/pom.xml b/releng/org.eclipse.passage.lac.aggregator/pom.xml
index 89b1c03b4..b116f41f7 100644
--- a/releng/org.eclipse.passage.lac.aggregator/pom.xml
+++ b/releng/org.eclipse.passage.lac.aggregator/pom.xml
@@ -28,6 +28,7 @@
../../bundles/org.eclipse.passage.lac
+ ../../bundles/org.eclipse.passage.lac.jetty
../../features/org.eclipse.passage.lac.target.feature
../../features/org.eclipse.passage.lac.execute.feature
../../releng/org.eclipse.passage.lac.repository
diff --git a/releng/org.eclipse.passage.lic.aggregator/pom.xml b/releng/org.eclipse.passage.lic.aggregator/pom.xml
index 0828876fd..454831f01 100644
--- a/releng/org.eclipse.passage.lic.aggregator/pom.xml
+++ b/releng/org.eclipse.passage.lic.aggregator/pom.xml
@@ -45,8 +45,10 @@
../../tests/org.eclipse.passage.lic.bc.tests
../../bundles/org.eclipse.passage.lic.net
+ ../../bundles/org.eclipse.passage.lic.jetty
../../bundles/org.eclipse.passage.lic.email
../../features/org.eclipse.passage.lic.net.feature
+ ../../features/org.eclipse.passage.lic.jetty.feature
../../tests/org.eclipse.passage.lic.net.tests
../../bundles/org.eclipse.passage.lic.mail