//
// 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.
//

Apache Karaf Container 4.x - Documentation
=========================================
Apache Software Foundation
:doctype: article
:toc: left
:toclevels: 3
:toc-position: left
:toc-title: Apache Karaf Container 4.x - Documentation
:numbered:

include::overview.adoc[]

include::quick-start.adoc[]

include::update-notes.adoc[]

== User Guide

include::user-guide/installation.adoc[]

include::user-guide/directory-structure.adoc[]

include::user-guide/start-stop.adoc[]

include::user-guide/os-integration.adoc[]

include::user-guide/console.adoc[]

include::user-guide/remote.adoc[]

include::user-guide/log.adoc[]

include::user-guide/configuration.adoc[]

include::user-guide/urls.adoc[]

include::user-guide/provisioning.adoc[]

include::user-guide/deployers.adoc[]

include::user-guide/kar.adoc[]

include::user-guide/instances.adoc[]

include::user-guide/security.adoc[]

include::user-guide/docker.adoc[]

include::user-guide/obr.adoc[]

=== Enterprise

include::user-guide/http.adoc[]

include::user-guide/webcontainer.adoc[]

include::user-guide/jndi.adoc[]

include::user-guide/jta.adoc[]

include::user-guide/jdbc.adoc[]

include::user-guide/jms.adoc[]

include::user-guide/jpa.adoc[]

include::user-guide/ejb.adoc[]

include::user-guide/cdi.adoc[]

include::user-guide/failover.adoc[]

include::user-guide/monitoring.adoc[]

include::user-guide/webconsole.adoc[]

include::user-guide/scheduler.adoc[]

include::user-guide/tuning.adoc[]

== Developer Guide

include::developer-guide/developer-commands.adoc[]

include::developer-guide/scripting.adoc[]

include::developer-guide/connect.adoc[]

include::developer-guide/branding.adoc[]

include::developer-guide/extending.adoc[]

include::developer-guide/karaf-maven-plugin.adoc[]

include::developer-guide/custom-distribution.adoc[]

include::developer-guide/creating-bundles.adoc[]

==== Blueprint

See https://github.com/apache/example/karaf-blueprint-example/README.md

==== SCR

See https://github.com/apache/example/karaf-scr-example/README.md

include::developer-guide/archetypes.adoc[]

include::developer-guide/security-framework.adoc[]

include::developer-guide/debugging.adoc[]

include::developer-guide/writing-tests.adoc[]

=== Dump extender

See https://github.com/apache/karaf/examples/karaf-dump-example/README.md

==== JDBC & JPA

See https://github.com/apache/karaf/examples/karaf-jdbc-example/README.md

See https://github.com/apache/karaf/examples/karaf-jpa-example/README.md

==== JMS

See https://github.com/apache/karaf/examples/karaf-jms-example/README.md

==== Custom log appender

See https://github.com/apache/karaf/examples/karaf-log-appender-example/README.md

==== Custom JMX MBean

See https://github.com/apache/karaf/examples/karaf-mbean-example/README.md

==== Working with profiles

See https://github.com/apache/karaf/examples/karaf-profile-example/README.md

==== Servlet

See https://github.com/apache/karaf/examples/karaf-servlet-example/README.md

==== WAR

See https://github.com/apache/karaf/examples/karaf-war-example/README.md

==== REST service

See https://github.com/apache/karaf/examples/karaf-rest-example/README.md

==== SOAP service

See https://github.com/apache/karaf/examples/karaf-soap-example/README.md

==== Scheduling jobs

See https://github.com/apache/karaf/examples/karaf-scheduler-example/README.md

==== Custom URL handler

See https://github.com/apache/karaf/examples/karaf-url-namespace-handler-example/README.md

include::developer-guide/github-contributions.adoc[]
