forked from ariel-bentu/java-buildpack
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Previously, all Tomcat Sessions existed only in memory. In the case that a specific instance failed, the data in the Sessions hosted by that instance would be lost. In some circumstances this isn't ideal, so Sessions should be replicated to an external repository. This change adds support for persisting Sessions to a Redis instance. It does this by using the RedisStore Tomcat PersistentManager Store implementation. As part of this effort the Tomcat container was refactored (it was already too complicated) and a ModularComponent base type was created. The ModularComponent allows enables a component to be composed of multiple "sub-components" and coordinates the component lifecycle across all of them. [#66942528]
- Loading branch information
Showing
40 changed files
with
1,261 additions
and
442 deletions.
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# `JavaBuildpack::Component::ModularComponent` | ||
This base class is recommended for use by any component that is sufficiently complex to need modularization. It enables a component to be composed of multiple "sub-components" and coordinates the component lifecycle across all of them. | ||
|
||
## Required Method Implementations | ||
|
||
```ruby | ||
# The command for this component | ||
# | ||
# @return [void, String] components other than containers are not expected to return any value. Container | ||
# components are expected to return the command required to run the application. | ||
def command | ||
|
||
# The modules that make up this component | ||
# | ||
# @param [Hash] context the context of the component | ||
# @return [Array<BaseComponent>] a collection of +BaseComponent+s that make up the modules of this component | ||
def modules(context) | ||
|
||
# Whether or not this component supports this application | ||
# | ||
# @return [Boolean] whether or not this component supports this application | ||
def supports? | ||
``` | ||
|
||
## Exposed Instance Variables | ||
|
||
| Name | Type | ||
| ---- | ---- | ||
| `@modules` | [`Array<JavaBuildpack::Component::BaseComponent>`][] | ||
|
||
|
||
## Helper Methods | ||
|
||
```ruby | ||
# Returns a copy of the context, but with a subset of the original configuration | ||
# | ||
# @param [Hash] context the original context of the component | ||
# @param [String] key the key to get a subset of the context from | ||
# @return [Hash] context a copy of the original context, but with a subset of the original configuration | ||
def sub_configuration_context(context, key) | ||
``` | ||
|
||
[`Array<JavaBuildpack::Component::BaseComponent>`]: extending-base_component.md |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
# Encoding: utf-8 | ||
# Cloud Foundry Java Buildpack | ||
# Copyright 2013 the original author or authors. | ||
# | ||
# 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. | ||
|
||
require 'fileutils' | ||
require 'java_buildpack/component' | ||
require 'java_buildpack/component/base_component' | ||
require 'java_buildpack/repository/configured_item' | ||
require 'java_buildpack/util/dash_case' | ||
require 'tmpdir' | ||
|
||
module JavaBuildpack::Component | ||
|
||
# A convenience base class for all components that are built modularly. In addition to the functionality inherited | ||
# from +BaseComponent+ this class also ensures that the collection of modules are iterated over for each lifecycle | ||
# event. | ||
class ModularComponent < BaseComponent | ||
|
||
# Creates an instance. In addition to the functionality inherited from +BaseComponent+, a +@sub_components+ | ||
# instance variable is exposed. | ||
# | ||
# @param [Hash] context a collection of utilities used by components | ||
# @param [Block, nil] version_validator an optional version validation block | ||
def initialize(context, &version_validator) | ||
super(context) | ||
@sub_components = supports? ? sub_components(context) : [] | ||
end | ||
|
||
# @macro base_component_detect | ||
def detect | ||
supports? ? @sub_components.map { |m| m.detect }.flatten.compact : nil | ||
end | ||
|
||
# @macro base_component_compile | ||
def compile | ||
@sub_components.each { |m| m.compile } | ||
end | ||
|
||
# @macro base_component_release | ||
def release | ||
@sub_components.map { |m| m.release } | ||
command | ||
end | ||
|
||
protected | ||
|
||
# @!macro [new] modular_component_command | ||
# The command for this component | ||
# | ||
# @return [void, String] components other than containers are not expected to return any value. Container | ||
# components are expected to return the command required to run the application. | ||
def command | ||
fail "Method 'command' must be defined" | ||
end | ||
|
||
# @!macro [new] modular_component_sub_components | ||
# The sub_components that make up this component | ||
# | ||
# @param [Hash] context the context of the component | ||
# @return [Array<BaseComponent>] a collection of +BaseComponent+s that make up the sub_components of this | ||
# component | ||
def sub_components(context) | ||
fail "Method 'sub_components' must be defined" | ||
end | ||
|
||
# Returns a copy of the context, but with a subset of the original configuration | ||
# | ||
# @param [Hash] context the original context of the component | ||
# @param [String] key the key to get a subset of the context from | ||
# @return [Hash] context a copy of the original context, but with a subset of the original configuration | ||
def sub_configuration_context(context, key) | ||
c = context.clone | ||
c[:configuration] = context[:configuration][key] | ||
c | ||
end | ||
|
||
# @!macro [new] modular_component_supports | ||
# Whether or not this component supports this application | ||
# | ||
# @return [Boolean] whether or not this component supports this application | ||
def supports? | ||
fail "Method 'supports?' must be defined" | ||
end | ||
|
||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.