You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2026/05/29 17:49:57 UTC
(logging-flume) branch trunk updated: Remove Log4j 1 appender (#434)
This is an automated email from the ASF dual-hosted git repository.
ppkarwasz pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/logging-flume.git
The following commit(s) were added to refs/heads/trunk by this push:
new 576cf26cc Remove Log4j 1 appender (#434)
576cf26cc is described below
commit 576cf26cc1808cebc8e4c2efa4f48311486b0cbb
Author: Piotr P. Karwasz <pk...@apache.org>
AuthorDate: Fri May 29 19:49:51 2026 +0200
Remove Log4j 1 appender (#434)
The appender was moved to https://github.com/apache/logging-flume-legacy
---
flume-ng-clients/flume-ng-log4jappender/pom.xml | 103 --
.../src/main/assembly/descriptor.xml | 46 -
.../log4jappender/LoadBalancingLog4jAppender.java | 180 --
.../flume/clients/log4jappender/Log4jAppender.java | 391 ----
.../clients/log4jappender/Log4jAvroHeaders.java | 56 -
.../resources-for-jar-with-deps/META-INF/LICENSE | 1893 --------------------
.../resources-for-jar-with-deps/META-INF/NOTICE | 148 --
.../TestLoadBalancingLog4jAppender.java | 351 ----
.../clients/log4jappender/TestLog4jAppender.java | 344 ----
.../log4jappender/TestLog4jAppenderWithAvro.java | 294 ---
...lume-loadbalancing-backoff-log4jtest.properties | 21 -
.../flume-loadbalancing-rnd-log4jtest.properties | 20 -
.../flume-loadbalancinglog4jtest.properties | 19 -
.../flume-log4jtest-avro-generic.properties | 21 -
.../flume-log4jtest-avro-reflect.properties | 21 -
.../src/test/resources/flume-log4jtest.properties | 20 -
.../src/test/resources/myrecord.avsc | 1 -
flume-ng-clients/pom.xml | 33 -
18 files changed, 3962 deletions(-)
diff --git a/flume-ng-clients/flume-ng-log4jappender/pom.xml b/flume-ng-clients/flume-ng-log4jappender/pom.xml
deleted file mode 100644
index 6e751849a..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/pom.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
- http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>flume-ng-clients</artifactId>
- <groupId>org.apache.flume</groupId>
- <version>2.0.0-SNAPSHOT</version>
- <relativePath>..</relativePath>
- </parent>
-
- <groupId>org.apache.flume.flume-ng-clients</groupId>
- <artifactId>flume-ng-log4jappender</artifactId>
- <name>Flume NG Log4j Appender</name>
-
- <properties>
- <!-- TODO fix spotbugs/pmd violations -->
- <spotbugs.maxAllowedViolations>2</spotbugs.maxAllowedViolations>
- <pmd.maxAllowedViolations>1</pmd.maxAllowedViolations>
- <module.name>org.apache.flume.clients.log4jappender</module.name>
- </properties>
-
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <descriptors>
- <descriptor>src/main/assembly/descriptor.xml</descriptor>
- </descriptors>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
- <dependencies>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.17</version>
- <scope>compile</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-sdk</artifactId>
- </dependency>
-
- <!-- pull in flume core only for unit tests. TODO: not ideal -->
- <dependency>
- <groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-core</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.flume</groupId>
- <artifactId>flume-ng-configuration</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
- </dependency>
-
- </dependencies>
-
-
-</project>
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/main/assembly/descriptor.xml b/flume-ng-clients/flume-ng-log4jappender/src/main/assembly/descriptor.xml
deleted file mode 100644
index ed1f75d64..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/main/assembly/descriptor.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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.
--->
-<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
- <!-- Use this ID so that we get the same output artifact name as when we used the built in descriptorRef -->
- <id>jar-with-dependencies</id>
- <formats>
- <format>jar</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
- <fileSets>
- <fileSet>
- <directory>src/main/resources-for-jar-with-deps/META-INF</directory>
- <outputDirectory>META-INF</outputDirectory>
- </fileSet>
- </fileSets>
- <dependencySets>
- <dependencySet>
- <outputDirectory>/</outputDirectory>
- <unpack>true</unpack>
- <unpackOptions>
- <excludes>
- <!-- Rely on our curated aggregate LICENSE/NOTICE rather than one from some particular dependency -->
- <exclude>META-INF/LICENSE*</exclude>
- <exclude>META-INF/NOTICE*</exclude>
- </excludes>
- </unpackOptions>
- <scope>runtime</scope>
- </dependencySet>
- </dependencySets>
-</assembly>
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/LoadBalancingLog4jAppender.java b/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/LoadBalancingLog4jAppender.java
deleted file mode 100644
index a82330bca..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/LoadBalancingLog4jAppender.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.flume.clients.log4jappender;
-
-import java.util.Properties;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.flume.FlumeException;
-import org.apache.flume.api.RpcClientConfigurationConstants;
-import org.apache.flume.api.RpcClientFactory;
-import org.apache.flume.api.RpcClientFactory.ClientType;
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.spi.LoggingEvent;
-
-/**
- *
- * Appends Log4j Events to an external Flume client which is decribed by the
- * Log4j configuration file. The appender takes the following required
- * parameters:
- * <p>
- * <strong>Hosts</strong> : A space separated list of host:port of the first hop
- * at which Flume (through an AvroSource) is listening for events.
- * </p>
- * <p>
- * <strong>Selector</strong> : Selection mechanism. Must be either ROUND_ROBIN,
- * RANDOM or custom FQDN to class that inherits from LoadBalancingSelector. If
- * empty defaults to ROUND_ROBIN
- * </p>
- * The appender also takes the following optional parameters:
- * <p>
- * <strong>MaxBackoff</strong> : A long value representing the maximum amount of
- * time in milliseconds the Load balancing client will backoff from a node that
- * has failed to consume an event
- * </p>
- * A sample log4j properties file which appends to a source would look like:
- *
- * <pre>
- * <p>
- * log4j.appender.out2 = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender
- * log4j.appender.out2.Hosts = fooflumesource.com:25430 barflumesource.com:25430
- * log4j.appender.out2.Selector = RANDOM
- * log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2</p>
- * </pre>
- * <p>
- * <pre>
- * <p>
- * log4j.appender.out2 = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender
- * log4j.appender.out2.Hosts = fooflumesource.com:25430 barflumesource.com:25430
- * log4j.appender.out2.Selector = ROUND_ROBIN
- * log4j.appender.out2.MaxBackoff = 60000
- * log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2</p>
- * </pre>
- * <p>
- * <i>Note: Change the last line to the package of the class(es), that will do
- * the appending.For example if classes from the package com.bar.foo are
- * appending, the last line would be:</i>
- * </p>
- *
- * <pre>
- * <p>log4j.logger.com.bar.foo = DEBUG,out2</p>
- * </pre>
- *
- *
- */
-public class LoadBalancingLog4jAppender extends Log4jAppender {
-
- private String hosts;
- private String selector;
- private String maxBackoff;
- private boolean configured = false;
-
- public void setHosts(String hostNames) {
- this.hosts = hostNames;
- }
-
- public void setSelector(String selector) {
- this.selector = selector;
- }
-
- public void setMaxBackoff(String maxBackoff) {
- this.maxBackoff = maxBackoff;
- }
-
- @Override
- public synchronized void append(LoggingEvent event) {
- if (!configured) {
- String errorMsg = "Flume Log4jAppender not configured correctly! Cannot" +
- " send events to Flume.";
- LogLog.error(errorMsg);
- if (getUnsafeMode()) {
- return;
- }
- throw new FlumeException(errorMsg);
- }
- super.append(event);
- }
-
- /**
- * Activate the options set using <tt>setHosts()</tt>, <tt>setSelector</tt>
- * and <tt>setMaxBackoff</tt>
- *
- * @throws FlumeException
- * if the LoadBalancingRpcClient cannot be instantiated.
- */
- @Override
- public void activateOptions() throws FlumeException {
- try {
- final Properties properties = getProperties(hosts, selector, maxBackoff, getTimeout());
- rpcClient = RpcClientFactory.getInstance(properties);
- if (layout != null) {
- layout.activateOptions();
- }
- configured = true;
- } catch (Exception e) {
- String errormsg = "RPC client creation failed! " + e.getMessage();
- LogLog.error(errormsg);
- if (getUnsafeMode()) {
- return;
- }
- throw new FlumeException(e);
- }
- initializeClientAddress();
- }
-
- private Properties getProperties(String hosts, String selector,
- String maxBackoff, long timeout) throws FlumeException {
-
- if (StringUtils.isEmpty(hosts)) {
- throw new FlumeException("hosts must not be null");
- }
-
- Properties props = new Properties();
- String[] hostsAndPorts = hosts.split("\\s+");
- StringBuilder names = new StringBuilder();
- for (int i = 0; i < hostsAndPorts.length; i++) {
- String hostAndPort = hostsAndPorts[i];
- String name = "h" + i;
- props.setProperty(RpcClientConfigurationConstants.CONFIG_HOSTS_PREFIX + name,
- hostAndPort);
- names.append(name).append(" ");
- }
- props.put(RpcClientConfigurationConstants.CONFIG_HOSTS, names.toString());
- props.put(RpcClientConfigurationConstants.CONFIG_CLIENT_TYPE,
- ClientType.DEFAULT_LOADBALANCE.toString());
- if (!StringUtils.isEmpty(selector)) {
- props.put(RpcClientConfigurationConstants.CONFIG_HOST_SELECTOR, selector);
- }
-
- if (!StringUtils.isEmpty(maxBackoff)) {
- long millis = Long.parseLong(maxBackoff.trim());
- if (millis <= 0) {
- throw new FlumeException(
- "Misconfigured max backoff, value must be greater than 0");
- }
- props.put(RpcClientConfigurationConstants.CONFIG_BACKOFF, String.valueOf(true));
- props.put(RpcClientConfigurationConstants.CONFIG_MAX_BACKOFF, maxBackoff);
- }
- props.setProperty(RpcClientConfigurationConstants.CONFIG_CONNECT_TIMEOUT,
- String.valueOf(timeout));
- props.setProperty(RpcClientConfigurationConstants.CONFIG_REQUEST_TIMEOUT,
- String.valueOf(timeout));
- return props;
- }
-}
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/Log4jAppender.java b/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/Log4jAppender.java
deleted file mode 100644
index 631326906..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/Log4jAppender.java
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.flume.clients.log4jappender;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.nio.charset.Charset;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.avro.Schema;
-import org.apache.avro.generic.GenericRecord;
-import org.apache.avro.io.BinaryEncoder;
-import org.apache.avro.io.DatumWriter;
-import org.apache.avro.io.EncoderFactory;
-import org.apache.avro.reflect.ReflectData;
-import org.apache.avro.reflect.ReflectDatumWriter;
-import org.apache.avro.specific.SpecificRecord;
-import org.apache.flume.Event;
-import org.apache.flume.EventDeliveryException;
-import org.apache.flume.FlumeException;
-import org.apache.flume.api.RpcClient;
-import org.apache.flume.api.RpcClientConfigurationConstants;
-import org.apache.flume.api.RpcClientFactory;
-import org.apache.flume.event.EventBuilder;
-
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.spi.LoggingEvent;
-
-/**
- *
- * Appends Log4j Events to an external Flume client which is described by
- * the Log4j configuration file. The appender takes two required parameters:
- *<p>
- *<strong>Hostname</strong> : This is the hostname of the first hop
- *at which Flume (through an AvroSource) is listening for events.
- *</p>
- *<p>
- *<strong>Port</strong> : This the port on the above host where the Flume
- *Source is listening for events.
- *</p>
- *A sample log4j properties file which appends to a source would look like:
- *<pre><p>
- *log4j.appender.out2 = org.apache.flume.clients.log4jappender.Log4jAppender
- *log4j.appender.out2.Port = 25430
- *log4j.appender.out2.Hostname = foobarflumesource.com
- *log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2</p></pre>
- *<p><i>Note: Change the last line to the package of the class(es), that will
- *do the appending.For example if classes from the package
- *com.bar.foo are appending, the last line would be:</i></p>
- *<pre><p>log4j.logger.com.bar.foo = DEBUG,out2</p></pre>
- *
- *
- */
-public class Log4jAppender extends AppenderSkeleton {
-
- private String hostname;
- private int port;
- private boolean unsafeMode = false;
- private long timeout = RpcClientConfigurationConstants.DEFAULT_REQUEST_TIMEOUT_MILLIS;
- private boolean avroReflectionEnabled;
- private String avroSchemaUrl;
- private String clientAddress = "";
-
- RpcClient rpcClient = null;
-
- /**
- * If this constructor is used programmatically rather than from a log4j conf
- * you must set the <tt>port</tt> and <tt>hostname</tt> and then call
- * <tt>activateOptions()</tt> before calling <tt>append()</tt>.
- */
- public Log4jAppender() {
- }
-
- /**
- * Sets the hostname and port. Even if these are passed the
- * <tt>activateOptions()</tt> function must be called before calling
- * <tt>append()</tt>, else <tt>append()</tt> will throw an Exception.
- * @param hostname The first hop where the client should connect to.
- * @param port The port to connect on the host.
- *
- */
- public Log4jAppender(String hostname, int port) {
- this.hostname = hostname;
- this.port = port;
- }
-
- /**
- * Append the LoggingEvent, to send to the first Flume hop.
- * @param event The LoggingEvent to be appended to the flume.
- * @throws FlumeException if the appender was closed,
- * or the hostname and port were not setup, there was a timeout, or there
- * was a connection error.
- */
- @Override
- public synchronized void append(LoggingEvent event) throws FlumeException {
- //If rpcClient is null, it means either this appender object was never
- //setup by setting hostname and port and then calling activateOptions
- //or this appender object was closed by calling close(), so we throw an
- //exception to show the appender is no longer accessible.
- if (rpcClient == null) {
- String errorMsg = "Cannot Append to Appender! Appender either closed or" +
- " not setup correctly!";
- LogLog.error(errorMsg);
- if (unsafeMode) {
- return;
- }
- throw new FlumeException(errorMsg);
- }
-
- if (!rpcClient.isActive()) {
- reconnect();
- }
-
- List<Event> flumeEvents = parseEvents(event);
- try {
- switch (flumeEvents.size()) {
- case 0:
- break;
- case 1:
- rpcClient.append(flumeEvents.get(0));
- break;
- default:
- rpcClient.appendBatch(flumeEvents);
- }
- } catch (EventDeliveryException e) {
- String msg = "Flume append() failed.";
- LogLog.error(msg);
- if (unsafeMode) {
- return;
- }
- throw new FlumeException(msg + " Exception follows.", e);
- }
- }
-
- private List<Event> parseEvents(LoggingEvent loggingEvent) {
- Map<String, String> headers = new HashMap<>();
- headers.put(Log4jAvroHeaders.LOGGER_NAME.toString(), loggingEvent.getLoggerName());
- headers.put(Log4jAvroHeaders.TIMESTAMP.toString(), String.valueOf(loggingEvent.timeStamp));
- headers.put(Log4jAvroHeaders.ADDRESS.toString(), clientAddress);
-
- //To get the level back simply use
- //LoggerEvent.toLevel(hdrs.get(Integer.parseInt(
- //Log4jAvroHeaders.LOG_LEVEL.toString()))
- headers.put(Log4jAvroHeaders.LOG_LEVEL.toString(),
- String.valueOf(loggingEvent.getLevel().toInt()));
-
- Map<String, String> headersWithEncoding = null;
-
- Collection<?> messages;
- if (loggingEvent.getMessage() instanceof Collection) {
- messages = (Collection) loggingEvent.getMessage();
- } else {
- messages = Collections.singleton(loggingEvent.getMessage());
- }
-
- List<Event> events = new LinkedList<>();
- for (Object message : messages) {
- if (message instanceof GenericRecord) {
- GenericRecord record = (GenericRecord) message;
- populateAvroHeaders(headers, record.getSchema());
- events.add(EventBuilder.withBody(serialize(record, record.getSchema()), headers));
-
- } else if (message instanceof SpecificRecord || avroReflectionEnabled) {
- Schema schema = ReflectData.get().getSchema(message.getClass());
- populateAvroHeaders(headers, schema);
- events.add(EventBuilder.withBody(serialize(message, schema), headers));
-
- } else {
- String msg;
- if (layout != null) {
- LoggingEvent singleLoggingEvent = new LoggingEvent(loggingEvent.getFQNOfLoggerClass(),
- loggingEvent.getLogger(), loggingEvent.getTimeStamp(), loggingEvent.getLevel(),
- message, loggingEvent.getThreadName(), loggingEvent.getThrowableInformation(),
- loggingEvent.getNDC(), loggingEvent.getLocationInformation(),
- loggingEvent.getProperties());
- msg = layout.format(singleLoggingEvent);
- } else {
- msg = message.toString();
- }
-
- if (headersWithEncoding == null) {
- headersWithEncoding = new HashMap<>(headers);
- headersWithEncoding.put(Log4jAvroHeaders.MESSAGE_ENCODING.toString(), "UTF8");
- }
- events.add(EventBuilder.withBody(msg, Charset.forName("UTF8"), headersWithEncoding));
- }
- }
-
- return events;
- }
-
- private Schema schema;
- private ByteArrayOutputStream out;
- private DatumWriter<Object> writer;
- private BinaryEncoder encoder;
-
- protected void populateAvroHeaders(Map<String, String> hdrs, Schema schema) {
- if (avroSchemaUrl != null) {
- hdrs.put(Log4jAvroHeaders.AVRO_SCHEMA_URL.toString(), avroSchemaUrl);
- return;
- }
- LogLog.warn("Cannot find ID for schema. Adding header for schema, " +
- "which may be inefficient. Consider setting up an Avro Schema Cache.");
- hdrs.put(Log4jAvroHeaders.AVRO_SCHEMA_LITERAL.toString(), schema.toString());
- }
-
- private byte[] serialize(Object datum, Schema datumSchema) throws FlumeException {
- if (schema == null || !datumSchema.equals(schema)) {
- schema = datumSchema;
- out = new ByteArrayOutputStream();
- writer = new ReflectDatumWriter<>(schema);
- encoder = EncoderFactory.get().binaryEncoder(out, null);
- }
- out.reset();
- try {
- writer.write(datum, encoder);
- encoder.flush();
- return out.toByteArray();
- } catch (IOException e) {
- throw new FlumeException(e);
- }
- }
-
- //This function should be synchronized to make sure one thread
- //does not close an appender another thread is using, and hence risking
- //a null pointer exception.
- /**
- * Closes underlying client.
- * If <tt>append()</tt> is called after this function is called,
- * it will throw an exception.
- * @throws FlumeException if errors occur during close
- */
- @Override
- public synchronized void close() throws FlumeException {
- // Any append calls after this will result in an Exception.
- if (rpcClient != null) {
- try {
- rpcClient.close();
- } catch (FlumeException ex) {
- LogLog.error("Error while trying to close RpcClient.", ex);
- if (unsafeMode) {
- return;
- }
- throw ex;
- } finally {
- rpcClient = null;
- }
- } else {
- String errorMsg = "Flume log4jappender already closed!";
- LogLog.error(errorMsg);
- if (unsafeMode) {
- return;
- }
- throw new FlumeException(errorMsg);
- }
- }
-
- @Override
- public boolean requiresLayout() {
- // This method is named quite incorrectly in the interface. It should
- // probably be called canUseLayout or something. According to the docs,
- // even if the appender can work without a layout, if it can work with one,
- // this method must return true.
- return true;
- }
-
- /**
- * Set the first flume hop hostname.
- * @param hostname The first hop where the client should connect to.
- */
- public void setHostname(String hostname) {
- this.hostname = hostname;
- }
-
- /**
- * Set the port on the hostname to connect to.
- * @param port The port to connect on the host.
- */
- public void setPort(int port) {
- this.port = port;
- }
-
- public void setUnsafeMode(boolean unsafeMode) {
- this.unsafeMode = unsafeMode;
- }
-
- public boolean getUnsafeMode() {
- return unsafeMode;
- }
-
- public void setTimeout(long timeout) {
- this.timeout = timeout;
- }
-
- public long getTimeout() {
- return this.timeout;
- }
-
- public void setAvroReflectionEnabled(boolean avroReflectionEnabled) {
- this.avroReflectionEnabled = avroReflectionEnabled;
- }
-
- public void setAvroSchemaUrl(String avroSchemaUrl) {
- this.avroSchemaUrl = avroSchemaUrl;
- }
-
- /**
- * Activate the options set using <tt>setPort()</tt>
- * and <tt>setHostname()</tt>
- *
- * @throws FlumeException if the <tt>hostname</tt> and
- * <tt>port</tt> combination is invalid.
- */
- @Override
- public void activateOptions() throws FlumeException {
- Properties props = new Properties();
- props.setProperty(RpcClientConfigurationConstants.CONFIG_HOSTS, "h1");
- props.setProperty(RpcClientConfigurationConstants.CONFIG_HOSTS_PREFIX + "h1",
- hostname + ":" + port);
- props.setProperty(RpcClientConfigurationConstants.CONFIG_CONNECT_TIMEOUT,
- String.valueOf(timeout));
- props.setProperty(RpcClientConfigurationConstants.CONFIG_REQUEST_TIMEOUT,
- String.valueOf(timeout));
- try {
- rpcClient = RpcClientFactory.getInstance(props);
- if (layout != null) {
- layout.activateOptions();
- }
- } catch (FlumeException e) {
- String errormsg = "RPC client creation failed! " + e.getMessage();
- LogLog.error(errormsg);
- if (unsafeMode) {
- return;
- }
- throw e;
- }
- initializeClientAddress();
- }
-
- /**
- * Resolves local host address so it can be included in event headers.
- * @throws FlumeException if local host address can not be resolved.
- */
- protected void initializeClientAddress() throws FlumeException {
- try {
- clientAddress = InetAddress.getLocalHost().getHostAddress();
- } catch (UnknownHostException e) {
- String errormsg = "Failed to resolve local host address! " + e.getMessage();
- LogLog.error(errormsg);
- if (unsafeMode) {
- return;
- }
- throw new FlumeException(e);
- }
- }
-
- /**
- * Make it easy to reconnect on failure
- * @throws FlumeException
- */
- private void reconnect() throws FlumeException {
- close();
- activateOptions();
- }
-}
-
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/Log4jAvroHeaders.java b/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/Log4jAvroHeaders.java
deleted file mode 100644
index dfb6b5e8a..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/main/java/org/apache/flume/clients/log4jappender/Log4jAvroHeaders.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.flume.clients.log4jappender;
-
-import java.util.Locale;
-
-public enum Log4jAvroHeaders {
- OTHER("flume.client.log4j.logger.other"),
- LOGGER_NAME("flume.client.log4j.logger.name"),
- LOG_LEVEL("flume.client.log4j.log.level"),
- MESSAGE_ENCODING("flume.client.log4j.message.encoding"),
- ADDRESS("flume.client.log4j.address"),
- TIMESTAMP("flume.client.log4j.timestamp"),
- AVRO_SCHEMA_LITERAL("flume.avro.schema.literal"),
- AVRO_SCHEMA_URL("flume.avro.schema.url");
-
- private String headerName;
- private Log4jAvroHeaders(String headerName) {
- this.headerName = headerName;
- }
-
- public String getName() {
- return headerName;
- }
-
- public String toString() {
- return getName();
- }
-
- public static Log4jAvroHeaders getByName(String headerName) {
- Log4jAvroHeaders hdrs = null;
- try {
- hdrs = Log4jAvroHeaders.valueOf(headerName.toLowerCase(Locale.ENGLISH).trim());
- } catch (IllegalArgumentException e) {
- hdrs = Log4jAvroHeaders.OTHER;
- }
- return hdrs;
- }
-
-}
\ No newline at end of file
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/main/resources-for-jar-with-deps/META-INF/LICENSE b/flume-ng-clients/flume-ng-log4jappender/src/main/resources-for-jar-with-deps/META-INF/LICENSE
deleted file mode 100644
index 95f6bc090..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/main/resources-for-jar-with-deps/META-INF/LICENSE
+++ /dev/null
@@ -1,1893 +0,0 @@
-
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "[]"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright [yyyy] [name of copyright owner]
-
- 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.
-
-----
-Bundled third-party works licensed other than under the Apache License, Version 2.0:
-
-This product contains the following works avaialble under the MIT License:
-
-* a modified portion of 'SLF4J' Copyright (c) 2004-2011 QOS.ch. All rights reserved.
-* a modified portion of 'jbzip2' Copyright (c) 2010-2011 Matthew J. Francis and
- Contributors of the jbzip2 Project
-* a modified portion of 'libdivsufsort' Copyright (c) 2003-2008 Yuta Mori All Rights Reserved.
-* a modified portion of 'jfastlz' Copyright (c) 2009 William Kinney
-* a modified portion of 'Hyper HPACK' Copyright (c) 2014 Cory Benfield
-* a modified portion of 'nghttp2 HPACK'
- Copyright (c) 2012, 2014, 2015, 2016 Tatsuhiro Tsujikawa
- Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors
-* jquery.tipsy.js, tipsy.js, and tipsy.css used by the Apache Avro Java IPC implementation
- Copyright (c) 2008 Jason Frame (jason@onehackoranother.com)
-* g.Raphael 0.4.1 used by the Apache Avro Java IPC implementation
- Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
-* jQuery v1.4.2 used by the Apache Avro Java IPC implementation
- Copyright 2010, John Resig
-* Sizzle.js included via jQuery used by the Apache Avro Java IPC implementation
- Copyright 2010, The Dojo Foundation
-* SLF4J API Copyright (c) 2004-2007 QOS.ch. All rights reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-----
-
-Zstd-jni: JNI bindings to Zstd Library
-
-Copyright (c) 2015-present, Luben Karavelov/ All rights reserved.
-
-2-Clause BSD License
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright notice, this
- list of conditions and the following disclaimer in the documentation and/or
- other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-----
-Available under the terms of the BSD 3-Clause License:
-
-* JZLib Copyright (c) 2000-2011 ymnk, JCraft,Inc. All rights reserved.
-* a modified portion of 'Webbit', an event based WebSocket and HTTP server.
- Copyright (c) 2011, Joe Walnes, Aslak Hellesøy and contributor. All rights
- reserved.
-* a modified portion of 'Protocol Buffers' Copyright 2013 Google Inc. All rights reserved.
-* protovis-r3.2.js used by the Apache Avro Java IPC implementation.
- Copyright (c) 2010, Stanford Visualization Group. All rights reserved.
-* Snappy Copyright 2011, Google Inc. All rights reserved (via Snappy Java)
-
-
-3-Clause BSD License
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the distribution.
-
- 3. The names of the authors may not be used to endorse or promote products
- derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
-INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-----
-
-This product contains the following works available in the Public Domain:
-
-* the extensions to Java Collections Framework which has been derived from
- the works by JSR-166 EG, Doug Lea, and Jason T. Greene
- http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/
- http://viewvc.jboss.org/cgi-bin/viewvc.cgi/jbosscache/experimental/jsr166/
-* a modified version of Robert Harder's Public Domain Base64 Encoder and Decoder
- http://iharder.sourceforge.net/current/java/base64/
-
-Public Domain attestation:
-
-The person or persons who have associated work with this document (the
-"Dedicator" or "Certifier") hereby either (a) certifies that, to the best of
-his knowledge, the work of authorship identified is in the public domain of
-the country from which the work is published, or (b) hereby dedicates whatever
-copyright the dedicators holds in the work of authorship identified below (the
-"Work") to the public domain. A certifier, moreover, dedicates any copyright
-interest he may have in the associated work, and for these purposes, is
-described as a "dedicator" below.
-
-A certifier has taken reasonable steps to verify the copyright status of this
-work. Certifier recognizes that his good faith efforts may not shield him from
-liability if in fact the work certified is not in the public domain.
-
-Dedicator makes this dedication for the benefit of the public at large and to
-the detriment of the Dedicator's heirs and successors. Dedicator intends this
-dedication to be an overt act of relinquishment in perpetuate of all present
-and future rights under copyright law, whether vested or contingent, in the
-Work. Dedicator understands that such relinquishment of all rights includes
-the relinquishment of all rights to enforce (by lawsuit or otherwise) those
-copyrights in the Work.
-
-Dedicator recognizes that, once placed in the public domain, the Work may be
-freely reproduced, distributed, transmitted, used, modified, built upon, or
-otherwise exploited by anyone for any purpose, commercial or non-commercial,
-and in any way, including by methods that have not yet been invented or
-conceived.
-
-----
-
-The files in the package org.apache.commons.compress.archivers.sevenz
-were derived from the LZMA SDK, version 9.20 (C/ and CPP/7zip/),
-which has been placed in the public domain:
-
-LZMA SDK is placed in the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or distribute the
-original LZMA SDK code, either in source code form or as a compiled binary, for
-any purpose, commercial or non-commercial, and by any means.
-
-----
-
-This product contains XZ for Java
-
-All the files in this package have been written by Lasse Collin,
-Igor Pavlov, and/or Brett Okken. All these files have been put into
-the public domain. You can do whatever you want with these files.
-
-This software is provided "as is", without any warranty.
-
-----
-
-This product contains the dnsinfo.h header file,
-Copyright (c) 2004-2006, 2008, 2009, 2011 Apple Inc. All rights reserved.
-
-APPLE PUBLIC SOURCE LICENSE
-Version 2.0 - August 6, 2003
-
-Please read this License carefully before downloading this software. By
-downloading or using this software, you are agreeing to be bound by the terms of
-this License. If you do not or cannot agree to the terms of this License,
-please do not download or use the software.
-
-Apple Note: In January 2007, Apple changed its corporate name from "Apple
-Computer, Inc." to "Apple Inc." This change has been reflected below and
-copyright years updated, but no other changes have been made to the APSL 2.0.
-
-1. General; Definitions. This License applies to any program or other work
-which Apple Inc. ("Apple") makes publicly available and which contains a notice
-placed by Apple identifying such program or work as "Original Code" and stating
-that it is subject to the terms of this Apple Public Source License version 2.0
-("License"). As used in this License:
-
-1.1 "Applicable Patent Rights" mean: (a) in the case where Apple is the
-grantor of rights, (i) claims of patents that are now or hereafter acquired,
-owned by or assigned to Apple and (ii) that cover subject matter contained in
-the Original Code, but only to the extent necessary to use, reproduce and/or
-distribute the Original Code without infringement; and (b) in the case where You
-are the grantor of rights, (i) claims of patents that are now or hereafter
-acquired, owned by or assigned to You and (ii) that cover subject matter in Your
-Modifications, taken alone or in combination with Original Code.
-
-1.2 "Contributor" means any person or entity that creates or contributes to
-the creation of Modifications.
-
-1.3 "Covered Code" means the Original Code, Modifications, the combination
-of Original Code and any Modifications, and/or any respective portions thereof.
-
-1.4 "Externally Deploy" means: (a) to sublicense, distribute or otherwise
-make Covered Code available, directly or indirectly, to anyone other than You;
-and/or (b) to use Covered Code, alone or as part of a Larger Work, in any way to
-provide a service, including but not limited to delivery of content, through
-electronic communication with a client other than You.
-
-1.5 "Larger Work" means a work which combines Covered Code or portions
-thereof with code not governed by the terms of this License.
-
-1.6 "Modifications" mean any addition to, deletion from, and/or change to,
-the substance and/or structure of the Original Code, any previous Modifications,
-the combination of Original Code and any previous Modifications, and/or any
-respective portions thereof. When code is released as a series of files, a
-Modification is: (a) any addition to or deletion from the contents of a file
-containing Covered Code; and/or (b) any new file or other representation of
-computer program statements that contains any part of Covered Code.
-
-1.7 "Original Code" means (a) the Source Code of a program or other work as
-originally made available by Apple under this License, including the Source Code
-of any updates or upgrades to such programs or works made available by Apple
-under this License, and that has been expressly identified by Apple as such in
-the header file(s) of such work; and (b) the object code compiled from such
-Source Code and originally made available by Apple under this License
-
-1.8 "Source Code" means the human readable form of a program or other work
-that is suitable for making modifications to it, including all modules it
-contains, plus any associated interface definition files, scripts used to
-control compilation and installation of an executable (object code).
-
-1.9 "You" or "Your" means an individual or a legal entity exercising rights
-under this License. For legal entities, "You" or "Your" includes any entity
-which controls, is controlled by, or is under common control with, You, where
-"control" means (a) the power, direct or indirect, to cause the direction or
-management of such entity, whether by contract or otherwise, or (b) ownership of
-fifty percent (50%) or more of the outstanding shares or beneficial ownership of
-such entity.
-
-2. Permitted Uses; Conditions & Restrictions. Subject to the terms and
-conditions of this License, Apple hereby grants You, effective on the date You
-accept this License and download the Original Code, a world-wide, royalty-free,
-non-exclusive license, to the extent of Apple's Applicable Patent Rights and
-copyrights covering the Original Code, to do the following:
-
-2.1 Unmodified Code. You may use, reproduce, display, perform, internally
-distribute within Your organization, and Externally Deploy verbatim, unmodified
-copies of the Original Code, for commercial or non-commercial purposes, provided
-that in each instance:
-
-(a) You must retain and reproduce in all copies of Original Code the
-copyright and other proprietary notices and disclaimers of Apple as they appear
-in the Original Code, and keep intact all notices in the Original Code that
-refer to this License; and
-
-(b) You must include a copy of this License with every copy of Source Code
-of Covered Code and documentation You distribute or Externally Deploy, and You
-may not offer or impose any terms on such Source Code that alter or restrict
-this License or the recipients' rights hereunder, except as permitted under
-Section 6.
-
-2.2 Modified Code. You may modify Covered Code and use, reproduce, display,
-perform, internally distribute within Your organization, and Externally Deploy
-Your Modifications and Covered Code, for commercial or non-commercial purposes,
-provided that in each instance You also meet all of these conditions:
-
-(a) You must satisfy all the conditions of Section 2.1 with respect to the
-Source Code of the Covered Code;
-
-(b) You must duplicate, to the extent it does not already exist, the notice
-in Exhibit A in each file of the Source Code of all Your Modifications, and
-cause the modified files to carry prominent notices stating that You changed the
-files and the date of any change; and
-
-(c) If You Externally Deploy Your Modifications, You must make Source Code
-of all Your Externally Deployed Modifications either available to those to whom
-You have Externally Deployed Your Modifications, or publicly available. Source
-Code of Your Externally Deployed Modifications must be released under the terms
-set forth in this License, including the license grants set forth in Section 3
-below, for as long as you Externally Deploy the Covered Code or twelve (12)
-months from the date of initial External Deployment, whichever is longer. You
-should preferably distribute the Source Code of Your Externally Deployed
-Modifications electronically (e.g. download from a web site).
-
-2.3 Distribution of Executable Versions. In addition, if You Externally
-Deploy Covered Code (Original Code and/or Modifications) in object code,
-executable form only, You must include a prominent notice, in the code itself as
-well as in related documentation, stating that Source Code of the Covered Code
-is available under the terms of this License with information on how and where
-to obtain such Source Code.
-
-2.4 Third Party Rights. You expressly acknowledge and agree that although
-Apple and each Contributor grants the licenses to their respective portions of
-the Covered Code set forth herein, no assurances are provided by Apple or any
-Contributor that the Covered Code does not infringe the patent or other
-intellectual property rights of any other entity. Apple and each Contributor
-disclaim any liability to You for claims brought by any other entity based on
-infringement of intellectual property rights or otherwise. As a condition to
-exercising the rights and licenses granted hereunder, You hereby assume sole
-responsibility to secure any other intellectual property rights needed, if any.
-For example, if a third party patent license is required to allow You to
-distribute the Covered Code, it is Your responsibility to acquire that license
-before distributing the Covered Code.
-
-3. Your Grants. In consideration of, and as a condition to, the licenses
-granted to You under this License, You hereby grant to any person or entity
-receiving or distributing Covered Code under this License a non-exclusive,
-royalty-free, perpetual, irrevocable license, under Your Applicable Patent
-Rights and other intellectual property rights (other than patent) owned or
-controlled by You, to use, reproduce, display, perform, modify, sublicense,
-distribute and Externally Deploy Your Modifications of the same scope and extent
-as Apple's licenses under Sections 2.1 and 2.2 above.
-
-4. Larger Works. You may create a Larger Work by combining Covered Code
-with other code not governed by the terms of this License and distribute the
-Larger Work as a single product. In each such instance, You must make sure the
-requirements of this License are fulfilled for the Covered Code or any portion
-thereof.
-
-5. Limitations on Patent License. Except as expressly stated in Section
-2, no other patent rights, express or implied, are granted by Apple herein.
-Modifications and/or Larger Works may require additional patent licenses from
-Apple which Apple may grant in its sole discretion.
-
-6. Additional Terms. You may choose to offer, and to charge a fee for,
-warranty, support, indemnity or liability obligations and/or other rights
-consistent with the scope of the license granted herein ("Additional Terms") to
-one or more recipients of Covered Code. However, You may do so only on Your own
-behalf and as Your sole responsibility, and not on behalf of Apple or any
-Contributor. You must obtain the recipient's agreement that any such Additional
-Terms are offered by You alone, and You hereby agree to indemnify, defend and
-hold Apple and every Contributor harmless for any liability incurred by or
-claims asserted against Apple or such Contributor by reason of any such
-Additional Terms.
-
-7. Versions of the License. Apple may publish revised and/or new versions
-of this License from time to time. Each version will be given a distinguishing
-version number. Once Original Code has been published under a particular
-version of this License, You may continue to use it under the terms of that
-version. You may also choose to use such Original Code under the terms of any
-subsequent version of this License published by Apple. No one other than Apple
-has the right to modify the terms applicable to Covered Code created under this
-License.
-
-8. NO WARRANTY OR SUPPORT. The Covered Code may contain in whole or in
-part pre-release, untested, or not fully tested works. The Covered Code may
-contain errors that could cause failures or loss of data, and may be incomplete
-or contain inaccuracies. You expressly acknowledge and agree that use of the
-Covered Code, or any portion thereof, is at Your sole and entire risk. THE
-COVERED CODE IS PROVIDED "AS IS" AND WITHOUT WARRANTY, UPGRADES OR SUPPORT OF
-ANY KIND AND APPLE AND APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE"
-FOR THE PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM
-ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED
-TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF MERCHANTABILITY, OF SATISFACTORY
-QUALITY, OF FITNESS FOR A PARTICULAR PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT,
-AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. APPLE AND EACH CONTRIBUTOR DOES NOT
-WARRANT AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE
-FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, THAT THE
-OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT
-DEFECTS IN THE COVERED CODE WILL BE CORRECTED. NO ORAL OR WRITTEN INFORMATION
-OR ADVICE GIVEN BY APPLE, AN APPLE AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR
-SHALL CREATE A WARRANTY. You acknowledge that the Covered Code is not intended
-for use in the operation of nuclear facilities, aircraft navigation,
-communication systems, or air traffic control machines in which case the failure
-of the Covered Code could lead to death, personal injury, or severe physical or
-environmental damage.
-
-9. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO
-EVENT SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, SPECIAL,
-INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING TO THIS LICENSE OR
-YOUR USE OR INABILITY TO USE THE COVERED CODE, OR ANY PORTION THEREOF, WHETHER
-UNDER A THEORY OF CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), PRODUCTS
-LIABILITY OR OTHERWISE, EVEN IF APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL
-PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF
-LIABILITY OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT
-APPLY TO YOU. In no event shall Apple's total liability to You for all damages
-(other than as may be required by applicable law) under this License exceed the
-amount of fifty dollars ($50.00).
-
-10. Trademarks. This License does not grant any rights to use the
-trademarks or trade names "Apple", "Mac", "Mac OS", "QuickTime", "QuickTime
-Streaming Server" or any other trademarks, service marks, logos or trade names
-belonging to Apple (collectively "Apple Marks") or to any trademark, service
-mark, logo or trade name belonging to any Contributor. You agree not to use any
-Apple Marks in or as part of the name of products derived from the Original Code
-or to endorse or promote products derived from the Original Code other than as
-expressly permitted by and in strict compliance at all times with Apple's third
-party trademark usage guidelines which are posted at
-http://www.apple.com/legal/guidelinesfor3rdparties.html.
-
-11. Ownership. Subject to the licenses granted under this License, each
-Contributor retains all rights, title and interest in and to any Modifications
-made by such Contributor. Apple retains all rights, title and interest in and
-to the Original Code and any Modifications made by or on behalf of Apple ("Apple
-Modifications"), and such Apple Modifications will not be automatically subject
-to this License. Apple may, at its sole discretion, choose to license such
-Apple Modifications under this License, or on different terms from those
-contained in this License or may choose not to license them at all.
-
-12. Termination.
-
-12.1 Termination. This License and the rights granted hereunder will
-terminate:
-
-(a) automatically without notice from Apple if You fail to comply with any
-term(s) of this License and fail to cure such breach within 30 days of becoming
-aware of such breach; (b) immediately in the event of the circumstances
-described in Section 13.5(b); or (c) automatically without notice from Apple
-if You, at any time during the term of this License, commence an action for
-patent infringement against Apple; provided that Apple did not first commence an
-action for patent infringement against You in that instance.
-
-12.2 Effect of Termination. Upon termination, You agree to immediately stop
-any further use, reproduction, modification, sublicensing and distribution of
-the Covered Code. All sublicenses to the Covered Code which have been properly
-granted prior to termination shall survive any termination of this License.
-Provisions which, by their nature, should remain in effect beyond the
-termination of this License shall survive, including but not limited to Sections
-3, 5, 8, 9, 10, 11, 12.2 and 13. No party will be liable to any other for
-compensation, indemnity or damages of any sort solely as a result of terminating
-this License in accordance with its terms, and termination of this License will
-be without prejudice to any other right or remedy of any party.
-
-13. Miscellaneous.
-
-13.1 Government End Users. The Covered Code is a "commercial item" as
-defined in FAR 2.101. Government software and technical data rights in the
-Covered Code include only those rights customarily provided to the public as
-defined in this License. This customary commercial license in technical data and
-software is provided in accordance with FAR 12.211 (Technical Data) and 12.212
-(Computer Software) and, for Department of Defense purchases, DFAR 252.227-7015
-(Technical Data -- Commercial Items) and 227.7202-3 (Rights in Commercial
-Computer Software or Computer Software Documentation). Accordingly, all U.S.
-Government End Users acquire Covered Code with only those rights set forth
-herein.
-
-13.2 Relationship of Parties. This License will not be construed as creating
-an agency, partnership, joint venture or any other form of legal association
-between or among You, Apple or any Contributor, and You will not represent to
-the contrary, whether expressly, by implication, appearance or otherwise.
-
-13.3 Independent Development. Nothing in this License will impair Apple's
-right to acquire, license, develop, have others develop for it, market and/or
-distribute technology or products that perform the same or similar functions as,
-or otherwise compete with, Modifications, Larger Works, technology or products
-that You may develop, produce, market or distribute.
-
-13.4 Waiver; Construction. Failure by Apple or any Contributor to enforce
-any provision of this License will not be deemed a waiver of future enforcement
-of that or any other provision. Any law or regulation which provides that the
-language of a contract shall be construed against the drafter will not apply to
-this License.
-
-13.5 Severability. (a) If for any reason a court of competent jurisdiction
-finds any provision of this License, or portion thereof, to be unenforceable,
-that provision of the License will be enforced to the maximum extent permissible
-so as to effect the economic benefits and intent of the parties, and the
-remainder of this License will continue in full force and effect. (b)
-Notwithstanding the foregoing, if applicable law prohibits or restricts You from
-fully and/or specifically complying with Sections 2 and/or 3 or prevents the
-enforceability of either of those Sections, this License will immediately
-terminate and You must immediately discontinue any use of the Covered Code and
-destroy all copies of it that are in your possession or control.
-
-13.6 Dispute Resolution. Any litigation or other dispute resolution between
-You and Apple relating to this License shall take place in the Northern District
-of California, and You and Apple hereby consent to the personal jurisdiction of,
-and venue in, the state and federal courts within that District with respect to
-this License. The application of the United Nations Convention on Contracts for
-the International Sale of Goods is expressly excluded.
-
-13.7 Entire Agreement; Governing Law. This License constitutes the entire
-agreement between the parties with respect to the subject matter hereof. This
-License shall be governed by the laws of the United States and the State of
-California, except that body of California law concerning conflicts of law.
-
-Where You are located in the province of Quebec, Canada, the following clause
-applies: The parties hereby confirm that they have requested that this License
-and all related documents be drafted in English. Les parties ont exigé que le
-présent contrat et tous les documents connexes soient rédigés en anglais.
-
-EXHIBIT A.
-
-"Portions Copyright (c) 1999-2007 Apple Inc. All Rights Reserved.
-
-This file contains Original Code and/or Modifications of Original Code as
-defined in and that are subject to the Apple Public Source License Version 2.0
-(the 'License'). You may not use this file except in compliance with the
-License. Please obtain a copy of the License at
-http://www.opensource.apple.com/apsl/ and read it before using this file.
-
-The Original Code and all software distributed under the License are distributed
-on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
-AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION,
-ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET
-ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the specific language
-governing rights and limitations under the License."
-
-----
-
-This product includes the Public Suffix List
-licensed under the terms of the Mozilla Public License, v. 2.0
-
-Mozilla Public License Version 2.0
-==================================
-
-1. Definitions
---------------
-
-1.1. "Contributor"
- means each individual or legal entity that creates, contributes to
- the creation of, or owns Covered Software.
-
-1.2. "Contributor Version"
- means the combination of the Contributions of others (if any) used
- by a Contributor and that particular Contributor's Contribution.
-
-1.3. "Contribution"
- means Covered Software of a particular Contributor.
-
-1.4. "Covered Software"
- means Source Code Form to which the initial Contributor has attached
- the notice in Exhibit A, the Executable Form of such Source Code
- Form, and Modifications of such Source Code Form, in each case
- including portions thereof.
-
-1.5. "Incompatible With Secondary Licenses"
- means
-
- (a) that the initial Contributor has attached the notice described
- in Exhibit B to the Covered Software; or
-
- (b) that the Covered Software was made available under the terms of
- version 1.1 or earlier of the License, but not also under the
- terms of a Secondary License.
-
-1.6. "Executable Form"
- means any form of the work other than Source Code Form.
-
-1.7. "Larger Work"
- means a work that combines Covered Software with other material, in
- a separate file or files, that is not Covered Software.
-
-1.8. "License"
- means this document.
-
-1.9. "Licensable"
- means having the right to grant, to the maximum extent possible,
- whether at the time of the initial grant or subsequently, any and
- all of the rights conveyed by this License.
-
-1.10. "Modifications"
- means any of the following:
-
- (a) any file in Source Code Form that results from an addition to,
- deletion from, or modification of the contents of Covered
- Software; or
-
- (b) any new file in Source Code Form that contains any Covered
- Software.
-
-1.11. "Patent Claims" of a Contributor
- means any patent claim(s), including without limitation, method,
- process, and apparatus claims, in any patent Licensable by such
- Contributor that would be infringed, but for the grant of the
- License, by the making, using, selling, offering for sale, having
- made, import, or transfer of either its Contributions or its
- Contributor Version.
-
-1.12. "Secondary License"
- means either the GNU General Public License, Version 2.0, the GNU
- Lesser General Public License, Version 2.1, the GNU Affero General
- Public License, Version 3.0, or any later versions of those
- licenses.
-
-1.13. "Source Code Form"
- means the form of the work preferred for making modifications.
-
-1.14. "You" (or "Your")
- means an individual or a legal entity exercising rights under this
- License. For legal entities, "You" includes any entity that
- controls, is controlled by, or is under common control with You. For
- purposes of this definition, "control" means (a) the power, direct
- or indirect, to cause the direction or management of such entity,
- whether by contract or otherwise, or (b) ownership of more than
- fifty percent (50%) of the outstanding shares or beneficial
- ownership of such entity.
-
-2. License Grants and Conditions
---------------------------------
-
-2.1. Grants
-
-Each Contributor hereby grants You a world-wide, royalty-free,
-non-exclusive license:
-
-(a) under intellectual property rights (other than patent or trademark)
- Licensable by such Contributor to use, reproduce, make available,
- modify, display, perform, distribute, and otherwise exploit its
- Contributions, either on an unmodified basis, with Modifications, or
- as part of a Larger Work; and
-
-(b) under Patent Claims of such Contributor to make, use, sell, offer
- for sale, have made, import, and otherwise transfer either its
- Contributions or its Contributor Version.
-
-2.2. Effective Date
-
-The licenses granted in Section 2.1 with respect to any Contribution
-become effective for each Contribution on the date the Contributor first
-distributes such Contribution.
-
-2.3. Limitations on Grant Scope
-
-The licenses granted in this Section 2 are the only rights granted under
-this License. No additional rights or licenses will be implied from the
-distribution or licensing of Covered Software under this License.
-Notwithstanding Section 2.1(b) above, no patent license is granted by a
-Contributor:
-
-(a) for any code that a Contributor has removed from Covered Software;
- or
-
-(b) for infringements caused by: (i) Your and any other third party's
- modifications of Covered Software, or (ii) the combination of its
- Contributions with other software (except as part of its Contributor
- Version); or
-
-(c) under Patent Claims infringed by Covered Software in the absence of
- its Contributions.
-
-This License does not grant any rights in the trademarks, service marks,
-or logos of any Contributor (except as may be necessary to comply with
-the notice requirements in Section 3.4).
-
-2.4. Subsequent Licenses
-
-No Contributor makes additional grants as a result of Your choice to
-distribute the Covered Software under a subsequent version of this
-License (see Section 10.2) or under the terms of a Secondary License (if
-permitted under the terms of Section 3.3).
-
-2.5. Representation
-
-Each Contributor represents that the Contributor believes its
-Contributions are its original creation(s) or it has sufficient rights
-to grant the rights to its Contributions conveyed by this License.
-
-2.6. Fair Use
-
-This License is not intended to limit any rights You have under
-applicable copyright doctrines of fair use, fair dealing, or other
-equivalents.
-
-2.7. Conditions
-
-Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
-in Section 2.1.
-
-3. Responsibilities
--------------------
-
-3.1. Distribution of Source Form
-
-All distribution of Covered Software in Source Code Form, including any
-Modifications that You create or to which You contribute, must be under
-the terms of this License. You must inform recipients that the Source
-Code Form of the Covered Software is governed by the terms of this
-License, and how they can obtain a copy of this License. You may not
-attempt to alter or restrict the recipients' rights in the Source Code
-Form.
-
-3.2. Distribution of Executable Form
-
-If You distribute Covered Software in Executable Form then:
-
-(a) such Covered Software must also be made available in Source Code
- Form, as described in Section 3.1, and You must inform recipients of
- the Executable Form how they can obtain a copy of such Source Code
- Form by reasonable means in a timely manner, at a charge no more
- than the cost of distribution to the recipient; and
-
-(b) You may distribute such Executable Form under the terms of this
- License, or sublicense it under different terms, provided that the
- license for the Executable Form does not attempt to limit or alter
- the recipients' rights in the Source Code Form under this License.
-
-3.3. Distribution of a Larger Work
-
-You may create and distribute a Larger Work under terms of Your choice,
-provided that You also comply with the requirements of this License for
-the Covered Software. If the Larger Work is a combination of Covered
-Software with a work governed by one or more Secondary Licenses, and the
-Covered Software is not Incompatible With Secondary Licenses, this
-License permits You to additionally distribute such Covered Software
-under the terms of such Secondary License(s), so that the recipient of
-the Larger Work may, at their option, further distribute the Covered
-Software under the terms of either this License or such Secondary
-License(s).
-
-3.4. Notices
-
-You may not remove or alter the substance of any license notices
-(including copyright notices, patent notices, disclaimers of warranty,
-or limitations of liability) contained within the Source Code Form of
-the Covered Software, except that You may alter any license notices to
-the extent required to remedy known factual inaccuracies.
-
-3.5. Application of Additional Terms
-
-You may choose to offer, and to charge a fee for, warranty, support,
-indemnity or liability obligations to one or more recipients of Covered
-Software. However, You may do so only on Your own behalf, and not on
-behalf of any Contributor. You must make it absolutely clear that any
-such warranty, support, indemnity, or liability obligation is offered by
-You alone, and You hereby agree to indemnify every Contributor for any
-liability incurred by such Contributor as a result of warranty, support,
-indemnity or liability terms You offer. You may include additional
-disclaimers of warranty and limitations of liability specific to any
-jurisdiction.
-
-4. Inability to Comply Due to Statute or Regulation
----------------------------------------------------
-
-If it is impossible for You to comply with any of the terms of this
-License with respect to some or all of the Covered Software due to
-statute, judicial order, or regulation then You must: (a) comply with
-the terms of this License to the maximum extent possible; and (b)
-describe the limitations and the code they affect. Such description must
-be placed in a text file included with all distributions of the Covered
-Software under this License. Except to the extent prohibited by statute
-or regulation, such description must be sufficiently detailed for a
-recipient of ordinary skill to be able to understand it.
-
-5. Termination
---------------
-
-5.1. The rights granted under this License will terminate automatically
-if You fail to comply with any of its terms. However, if You become
-compliant, then the rights granted under this License from a particular
-Contributor are reinstated (a) provisionally, unless and until such
-Contributor explicitly and finally terminates Your grants, and (b) on an
-ongoing basis, if such Contributor fails to notify You of the
-non-compliance by some reasonable means prior to 60 days after You have
-come back into compliance. Moreover, Your grants from a particular
-Contributor are reinstated on an ongoing basis if such Contributor
-notifies You of the non-compliance by some reasonable means, this is the
-first time You have received notice of non-compliance with this License
-from such Contributor, and You become compliant prior to 30 days after
-Your receipt of the notice.
-
-5.2. If You initiate litigation against any entity by asserting a patent
-infringement claim (excluding declaratory judgment actions,
-counter-claims, and cross-claims) alleging that a Contributor Version
-directly or indirectly infringes any patent, then the rights granted to
-You by any and all Contributors for the Covered Software under Section
-2.1 of this License shall terminate.
-
-5.3. In the event of termination under Sections 5.1 or 5.2 above, all
-end user license agreements (excluding distributors and resellers) which
-have been validly granted by You or Your distributors under this License
-prior to termination shall survive termination.
-
-************************************************************************
-* *
-* 6. Disclaimer of Warranty *
-* ------------------------- *
-* *
-* Covered Software is provided under this License on an "as is" *
-* basis, without warranty of any kind, either expressed, implied, or *
-* statutory, including, without limitation, warranties that the *
-* Covered Software is free of defects, merchantable, fit for a *
-* particular purpose or non-infringing. The entire risk as to the *
-* quality and performance of the Covered Software is with You. *
-* Should any Covered Software prove defective in any respect, You *
-* (not any Contributor) assume the cost of any necessary servicing, *
-* repair, or correction. This disclaimer of warranty constitutes an *
-* essential part of this License. No use of any Covered Software is *
-* authorized under this License except under this disclaimer. *
-* *
-************************************************************************
-
-************************************************************************
-* *
-* 7. Limitation of Liability *
-* -------------------------- *
-* *
-* Under no circumstances and under no legal theory, whether tort *
-* (including negligence), contract, or otherwise, shall any *
-* Contributor, or anyone who distributes Covered Software as *
-* permitted above, be liable to You for any direct, indirect, *
-* special, incidental, or consequential damages of any character *
-* including, without limitation, damages for lost profits, loss of *
-* goodwill, work stoppage, computer failure or malfunction, or any *
-* and all other commercial damages or losses, even if such party *
-* shall have been informed of the possibility of such damages. This *
-* limitation of liability shall not apply to liability for death or *
-* personal injury resulting from such party's negligence to the *
-* extent applicable law prohibits such limitation. Some *
-* jurisdictions do not allow the exclusion or limitation of *
-* incidental or consequential damages, so this exclusion and *
-* limitation may not apply to You. *
-* *
-************************************************************************
-
-8. Litigation
--------------
-
-Any litigation relating to this License may be brought only in the
-courts of a jurisdiction where the defendant maintains its principal
-place of business and such litigation shall be governed by laws of that
-jurisdiction, without reference to its conflict-of-law provisions.
-Nothing in this Section shall prevent a party's ability to bring
-cross-claims or counter-claims.
-
-9. Miscellaneous
-----------------
-
-This License represents the complete agreement concerning the subject
-matter hereof. If any provision of this License is held to be
-unenforceable, such provision shall be reformed only to the extent
-necessary to make it enforceable. Any law or regulation which provides
-that the language of a contract shall be construed against the drafter
-shall not be used to construe this License against a Contributor.
-
-10. Versions of the License
----------------------------
-
-10.1. New Versions
-
-Mozilla Foundation is the license steward. Except as provided in Section
-10.3, no one other than the license steward has the right to modify or
-publish new versions of this License. Each version will be given a
-distinguishing version number.
-
-10.2. Effect of New Versions
-
-You may distribute the Covered Software under the terms of the version
-of the License under which You originally received the Covered Software,
-or under the terms of any subsequent version published by the license
-steward.
-
-10.3. Modified Versions
-
-If you create software not governed by this License, and you want to
-create a new license for such software, you may create and use a
-modified version of this License if you rename the license and remove
-any references to the name of the license steward (except to note that
-such modified license differs from this License).
-
-10.4. Distributing Source Code Form that is Incompatible With Secondary
-Licenses
-
-If You choose to distribute Source Code Form that is Incompatible With
-Secondary Licenses under the terms of this version of the License, the
-notice described in Exhibit B of this License must be attached.
-
-Exhibit A - Source Code Form License Notice
--------------------------------------------
-
- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-If it is not possible or desirable to put the notice in a particular
-file, then You may include the notice in a location (such as a LICENSE
-file in a relevant directory) where a recipient would be likely to look
-for such a notice.
-
-You may add additional accurate notices of copyright ownership.
-
-Exhibit B - "Incompatible With Secondary Licenses" Notice
----------------------------------------------------------
-
- This Source Code Form is "Incompatible With Secondary Licenses", as
- defined by the Mozilla Public License, v. 2.0.
-
-----
-
-This product contains the following XML Schemas for Java EE Deployment Descriptors:
- - javaee_5.xsd
- - javaee_web_services_1_2.xsd
- - javaee_web_services_client_1_2.xsd
- - javaee_6.xsd
- - javaee_web_services_1_3.xsd
- - javaee_web_services_client_1_3.xsd
- - jsp_2_2.xsd
- - web-app_3_0.xsd
- - web-common_3_0.xsd
- - web-fragment_3_0.xsd
- - javaee_7.xsd
- - javaee_web_services_1_4.xsd
- - javaee_web_services_client_1_4.xsd
- - jsp_2_3.xsd
- - web-app_3_1.xsd
- - web-common_3_1.xsd
- - web-fragment_3_1.xsd
-
-Licensed under the terms of the CDDL v1.0.
-
-COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
-
-1. Definitions.
-
- 1.1. Contributor. means each individual or entity that creates or contributes
- to the creation of Modifications.
-
- 1.2. Contributor Version. means the combination of the Original Software,
- prior Modifications used by a Contributor (if any), and the
- Modifications made by that particular Contributor.
-
- 1.3. Covered Software. means (a) the Original Software, or (b) Modifications,
- or (c) the combination of files containing Original Software with files
- containing Modifications, in each case including portions thereof.
-
- 1.4. Executable. means the Covered Software in any form other than Source
- Code.
-
- 1.5. Initial Developer. means the individual or entity that first makes
- Original Software available under this License.
-
- 1.6. Larger Work. means a work which combines Covered Software or portions
- thereof with code not governed by the terms of this License.
-
- 1.7. License. means this document.
-
- 1.8. Licensable. means having the right to grant, to the maximum extent
- possible, whether at the time of the initial grant or subsequently
- acquired, any and all of the rights conveyed herein.
-
- 1.9. Modifications. means the Source Code and Executable form of any of the
- following:
-
- A. Any file that results from an addition to, deletion from or
- modification of the contents of a file containing Original Software
- or previous Modifications;
-
- B. Any new file that contains any part of the Original Software or
- previous Modification; or
-
- C. Any new file that is contributed or otherwise made available under
- the terms of this License.
-
- 1.10. Original Software. means the Source Code and Executable form of
- computer software code that is originally released under this License.
-
- 1.11. Patent Claims. means any patent claim(s), now owned or hereafter
- acquired, including without limitation, method, process, and apparatus
- claims, in any patent Licensable by grantor.
-
- 1.12. Source Code. means (a) the common form of computer software code in
- which modifications are made and (b) associated documentation included
- in or with such code.
-
- 1.13. You. (or .Your.) means an individual or a legal entity exercising
- rights under, and complying with all of the terms of, this License. For
- legal entities, .You. includes any entity which controls, is controlled
- by, or is under common control with You. For purposes of this
- definition, .control. means (a) the power, direct or indirect, to cause
- the direction or management of such entity, whether by contract or
- otherwise, or (b) ownership of more than fifty percent (50%) of the
- outstanding shares or beneficial ownership of such entity.
-
-2. License Grants.
-
- 2.1. The Initial Developer Grant.
-
- Conditioned upon Your compliance with Section 3.1 below and subject to
- third party intellectual property claims, the Initial Developer hereby
- grants You a world-wide, royalty-free, non-exclusive license:
-
- (a) under intellectual property rights (other than patent or trademark)
- Licensable by Initial Developer, to use, reproduce, modify, display,
- perform, sublicense and distribute the Original Software (or
- portions thereof), with or without Modifications, and/or as part of
- a Larger Work; and
-
- (b) under Patent Claims infringed by the making, using or selling of
- Original Software, to make, have made, use, practice, sell, and
- offer for sale, and/or otherwise dispose of the Original Software
- (or portions thereof).
-
- (c) The licenses granted in Sections 2.1(a) and (b) are effective on the
- date Initial Developer first distributes or otherwise makes the
- Original Software available to a third party under the terms of this
- License.
-
- (d) Notwithstanding Section 2.1(b) above, no patent license is granted:
- (1) for code that You delete from the Original Software, or (2) for
- infringements caused by: (i) the modification of the Original
- Software, or (ii) the combination of the Original Software with
- other software or devices.
-
- 2.2. Contributor Grant.
-
- Conditioned upon Your compliance with Section 3.1 below and subject to third
- party intellectual property claims, each Contributor hereby grants You a
- world-wide, royalty-free, non-exclusive license:
-
- (a) under intellectual property rights (other than patent or trademark)
- Licensable by Contributor to use, reproduce, modify, display,
- perform, sublicense and distribute the Modifications created by such
- Contributor (or portions thereof), either on an unmodified basis,
- with other Modifications, as Covered Software and/or as part of a
- Larger Work; and
-
- (b) under Patent Claims infringed by the making, using, or selling of
- Modifications made by that Contributor either alone and/or in
- combination with its Contributor Version (or portions of such
- combination), to make, use, sell, offer for sale, have made, and/or
- otherwise dispose of: (1) Modifications made by that Contributor (or
- portions thereof); and (2) the combination of Modifications made by
- that Contributor with its Contributor Version (or portions of such
- combination).
-
- (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on
- the date Contributor first distributes or otherwise makes the
- Modifications available to a third party.
-
- (d) Notwithstanding Section 2.2(b) above, no patent license is granted:
- (1) for any code that Contributor has deleted from the Contributor
- Version; (2) for infringements caused by: (i) third party
- modifications of Contributor Version, or (ii) the combination of
- Modifications made by that Contributor with other software (except
- as part of the Contributor Version) or other devices; or (3) under
- Patent Claims infringed by Covered Software in the absence of
- Modifications made by that Contributor.
-
-3. Distribution Obligations.
-
- 3.1. Availability of Source Code.
- Any Covered Software that You distribute or otherwise make available in
- Executable form must also be made available in Source Code form and that
- Source Code form must be distributed only under the terms of this License.
- You must include a copy of this License with every copy of the Source Code
- form of the Covered Software You distribute or otherwise make available.
- You must inform recipients of any such Covered Software in Executable form
- as to how they can obtain such Covered Software in Source Code form in a
- reasonable manner on or through a medium customarily used for software
- exchange.
-
- 3.2. Modifications.
- The Modifications that You create or to which You contribute are governed
- by the terms of this License. You represent that You believe Your
- Modifications are Your original creation(s) and/or You have sufficient
- rights to grant the rights conveyed by this License.
-
- 3.3. Required Notices.
- You must include a notice in each of Your Modifications that identifies
- You as the Contributor of the Modification. You may not remove or alter
- any copyright, patent or trademark notices contained within the Covered
- Software, or any notices of licensing or any descriptive text giving
- attribution to any Contributor or the Initial Developer.
-
- 3.4. Application of Additional Terms.
- You may not offer or impose any terms on any Covered Software in Source
- Code form that alters or restricts the applicable version of this License
- or the recipients. rights hereunder. You may choose to offer, and to
- charge a fee for, warranty, support, indemnity or liability obligations to
- one or more recipients of Covered Software. However, you may do so only on
- Your own behalf, and not on behalf of the Initial Developer or any
- Contributor. You must make it absolutely clear that any such warranty,
- support, indemnity or liability obligation is offered by You alone, and
- You hereby agree to indemnify the Initial Developer and every Contributor
- for any liability incurred by the Initial Developer or such Contributor as
- a result of warranty, support, indemnity or liability terms You offer.
-
- 3.5. Distribution of Executable Versions.
- You may distribute the Executable form of the Covered Software under the
- terms of this License or under the terms of a license of Your choice,
- which may contain terms different from this License, provided that You are
- in compliance with the terms of this License and that the license for the
- Executable form does not attempt to limit or alter the recipient.s rights
- in the Source Code form from the rights set forth in this License. If You
- distribute the Covered Software in Executable form under a different
- license, You must make it absolutely clear that any terms which differ
- from this License are offered by You alone, not by the Initial Developer
- or Contributor. You hereby agree to indemnify the Initial Developer and
- every Contributor for any liability incurred by the Initial Developer or
- such Contributor as a result of any such terms You offer.
-
- 3.6. Larger Works.
- You may create a Larger Work by combining Covered Software with other code
- not governed by the terms of this License and distribute the Larger Work
- as a single product. In such a case, You must make sure the requirements
- of this License are fulfilled for the Covered Software.
-
-4. Versions of the License.
-
- 4.1. New Versions.
- Sun Microsystems, Inc. is the initial license steward and may publish
- revised and/or new versions of this License from time to time. Each
- version will be given a distinguishing version number. Except as provided
- in Section 4.3, no one other than the license steward has the right to
- modify this License.
-
- 4.2. Effect of New Versions.
- You may always continue to use, distribute or otherwise make the Covered
- Software available under the terms of the version of the License under
- which You originally received the Covered Software. If the Initial
- Developer includes a notice in the Original Software prohibiting it from
- being distributed or otherwise made available under any subsequent version
- of the License, You must distribute and make the Covered Software
- available under the terms of the version of the License under which You
- originally received the Covered Software. Otherwise, You may also choose
- to use, distribute or otherwise make the Covered Software available under
- the terms of any subsequent version of the License published by the
- license steward.
-
- 4.3. Modified Versions.
- When You are an Initial Developer and You want to create a new license for
- Your Original Software, You may create and use a modified version of this
- License if You: (a) rename the license and remove any references to the
- name of the license steward (except to note that the license differs from
- this License); and (b) otherwise make it clear that the license contains
- terms which differ from this License.
-
-5. DISCLAIMER OF WARRANTY.
-
- COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT
- WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT
- LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS,
- MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK
- AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD
- ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL
- DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
- SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN
- ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED
- HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-6. TERMINATION.
-
- 6.1. This License and the rights granted hereunder will terminate
- automatically if You fail to comply with terms herein and fail to
- cure such breach within 30 days of becoming aware of the breach.
- Provisions which, by their nature, must remain in effect beyond the
- termination of this License shall survive.
-
- 6.2. If You assert a patent infringement claim (excluding declaratory
- judgment actions) against Initial Developer or a Contributor (the
- Initial Developer or Contributor against whom You assert such claim
- is referred to as .Participant.) alleging that the Participant
- Software (meaning the Contributor Version where the Participant is a
- Contributor or the Original Software where the Participant is the
- Initial Developer) directly or indirectly infringes any patent, then
- any and all rights granted directly or indirectly to You by such
- Participant, the Initial Developer (if the Initial Developer is not
- the Participant) and all Contributors under Sections 2.1 and/or 2.2
- of this License shall, upon 60 days notice from Participant terminate
- prospectively and automatically at the expiration of such 60 day
- notice period, unless if within such 60 day period You withdraw Your
- claim with respect to the Participant Software against such
- Participant either unilaterally or pursuant to a written agreement
- with Participant.
-
- 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end
- user licenses that have been validly granted by You or any
- distributor hereunder prior to termination (excluding licenses
- granted to You by any distributor) shall survive termination.
-
-7. LIMITATION OF LIABILITY.
-
- UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING
- NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY
- OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF
- ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL,
- INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
- LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE,
- COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR
- LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
- SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR
- DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT
- APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
- EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS
- EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-8. U.S. GOVERNMENT END USERS.
-
- The Covered Software is a .commercial item,. as that term is defined in 48
- C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as
- that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and commercial
- computer software documentation. as such terms are used in 48 C.F.R. 12.212
- (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
- through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered
- Software with only those rights set forth herein. This U.S. Government Rights
- clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or
- provision that addresses Government rights in computer software under this
- License.
-
-9. MISCELLANEOUS.
-
- This License represents the complete agreement concerning subject matter
- hereof. If any provision of this License is held to be unenforceable, such
- provision shall be reformed only to the extent necessary to make it
- enforceable. This License shall be governed by the law of the jurisdiction
- specified in a notice contained within the Original Software (except to the
- extent applicable law, if any, provides otherwise), excluding such
- jurisdiction's conflict-of-law provisions. Any litigation relating to this
- License shall be subject to the jurisdiction of the courts located in the
- jurisdiction and venue specified in a notice contained within the Original
- Software, with the losing party responsible for costs, including, without
- limitation, court costs and reasonable attorneys. fees and expenses. The
- application of the United Nations Convention on Contracts for the
- International Sale of Goods is expressly excluded. Any law or regulation
- which provides that the language of a contract shall be construed against
- the drafter shall not apply to this License. You agree that You alone are
- responsible for compliance with the United States export administration
- regulations (and the export control laws and regulation of any other
- countries) when You use, distribute or otherwise make available any Covered
- Software.
-
-10. RESPONSIBILITY FOR CLAIMS.
-
- As between Initial Developer and the Contributors, each party is responsible
- for claims and damages arising, directly or indirectly, out of its
- utilization of rights under this License and You agree to work with Initial
- Developer and Contributors to distribute such responsibility on an equitable
- basis. Nothing herein is intended or shall be deemed to constitute any
- admission of liability.
-
- NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION
- LICENSE (CDDL)
-
- The code released under the CDDL shall be governed by the laws of the State
- of California (excluding conflict-of-law provisions). Any litigation relating
- to this License shall be subject to the jurisdiction of the Federal Courts of
- the Northern District of California and the state courts of the State of
- California, with venue lying in Santa Clara County, California.
-
-----
-
-This product contains the javax.annotation API 1.3.2
-Licensed under CDDL v1.1
-
-Copyright (c) 2012-2017 Oracle and/or its affiliates. All rights reserved.
-
-COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1
-
-1. Definitions.
-
- 1.1. "Contributor" means each individual or entity that creates or
- contributes to the creation of Modifications.
-
- 1.2. "Contributor Version" means the combination of the Original
- Software, prior Modifications used by a Contributor (if any), and
- the Modifications made by that particular Contributor.
-
- 1.3. "Covered Software" means (a) the Original Software, or (b)
- Modifications, or (c) the combination of files containing Original
- Software with files containing Modifications, in each case including
- portions thereof.
-
- 1.4. "Executable" means the Covered Software in any form other than
- Source Code.
-
- 1.5. "Initial Developer" means the individual or entity that first
- makes Original Software available under this License.
-
- 1.6. "Larger Work" means a work which combines Covered Software or
- portions thereof with code not governed by the terms of this License.
-
- 1.7. "License" means this document.
-
- 1.8. "Licensable" means having the right to grant, to the maximum
- extent possible, whether at the time of the initial grant or
- subsequently acquired, any and all of the rights conveyed herein.
-
- 1.9. "Modifications" means the Source Code and Executable form of
- any of the following:
-
- A. Any file that results from an addition to, deletion from or
- modification of the contents of a file containing Original Software
- or previous Modifications;
-
- B. Any new file that contains any part of the Original Software or
- previous Modification; or
-
- C. Any new file that is contributed or otherwise made available
- under the terms of this License.
-
- 1.10. "Original Software" means the Source Code and Executable form
- of computer software code that is originally released under this
- License.
-
- 1.11. "Patent Claims" means any patent claim(s), now owned or
- hereafter acquired, including without limitation, method, process,
- and apparatus claims, in any patent Licensable by grantor.
-
- 1.12. "Source Code" means (a) the common form of computer software
- code in which modifications are made and (b) associated
- documentation included in or with such code.
-
- 1.13. "You" (or "Your") means an individual or a legal entity
- exercising rights under, and complying with all of the terms of,
- this License. For legal entities, "You" includes any entity which
- controls, is controlled by, or is under common control with You. For
- purposes of this definition, "control" means (a) the power, direct
- or indirect, to cause the direction or management of such entity,
- whether by contract or otherwise, or (b) ownership of more than
- fifty percent (50%) of the outstanding shares or beneficial
- ownership of such entity.
-
-2. License Grants.
-
- 2.1. The Initial Developer Grant.
-
- Conditioned upon Your compliance with Section 3.1 below and subject
- to third party intellectual property claims, the Initial Developer
- hereby grants You a world-wide, royalty-free, non-exclusive license:
-
- (a) under intellectual property rights (other than patent or
- trademark) Licensable by Initial Developer, to use, reproduce,
- modify, display, perform, sublicense and distribute the Original
- Software (or portions thereof), with or without Modifications,
- and/or as part of a Larger Work; and
-
- (b) under Patent Claims infringed by the making, using or selling of
- Original Software, to make, have made, use, practice, sell, and
- offer for sale, and/or otherwise dispose of the Original Software
- (or portions thereof).
-
- (c) The licenses granted in Sections 2.1(a) and (b) are effective on
- the date Initial Developer first distributes or otherwise makes the
- Original Software available to a third party under the terms of this
- License.
-
- (d) Notwithstanding Section 2.1(b) above, no patent license is
- granted: (1) for code that You delete from the Original Software, or
- (2) for infringements caused by: (i) the modification of the
- Original Software, or (ii) the combination of the Original Software
- with other software or devices.
-
- 2.2. Contributor Grant.
-
- Conditioned upon Your compliance with Section 3.1 below and subject
- to third party intellectual property claims, each Contributor hereby
- grants You a world-wide, royalty-free, non-exclusive license:
-
- (a) under intellectual property rights (other than patent or
- trademark) Licensable by Contributor to use, reproduce, modify,
- display, perform, sublicense and distribute the Modifications
- created by such Contributor (or portions thereof), either on an
- unmodified basis, with other Modifications, as Covered Software
- and/or as part of a Larger Work; and
-
- (b) under Patent Claims infringed by the making, using, or selling
- of Modifications made by that Contributor either alone and/or in
- combination with its Contributor Version (or portions of such
- combination), to make, use, sell, offer for sale, have made, and/or
- otherwise dispose of: (1) Modifications made by that Contributor (or
- portions thereof); and (2) the combination of Modifications made by
- that Contributor with its Contributor Version (or portions of such
- combination).
-
- (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective
- on the date Contributor first distributes or otherwise makes the
- Modifications available to a third party.
-
- (d) Notwithstanding Section 2.2(b) above, no patent license is
- granted: (1) for any code that Contributor has deleted from the
- Contributor Version; (2) for infringements caused by: (i) third
- party modifications of Contributor Version, or (ii) the combination
- of Modifications made by that Contributor with other software
- (except as part of the Contributor Version) or other devices; or (3)
- under Patent Claims infringed by Covered Software in the absence of
- Modifications made by that Contributor.
-
-3. Distribution Obligations.
-
- 3.1. Availability of Source Code.
-
- Any Covered Software that You distribute or otherwise make available
- in Executable form must also be made available in Source Code form
- and that Source Code form must be distributed only under the terms
- of this License. You must include a copy of this License with every
- copy of the Source Code form of the Covered Software You distribute
- or otherwise make available. You must inform recipients of any such
- Covered Software in Executable form as to how they can obtain such
- Covered Software in Source Code form in a reasonable manner on or
- through a medium customarily used for software exchange.
-
- 3.2. Modifications.
-
- The Modifications that You create or to which You contribute are
- governed by the terms of this License. You represent that You
- believe Your Modifications are Your original creation(s) and/or You
- have sufficient rights to grant the rights conveyed by this License.
-
- 3.3. Required Notices.
-
- You must include a notice in each of Your Modifications that
- identifies You as the Contributor of the Modification. You may not
- remove or alter any copyright, patent or trademark notices contained
- within the Covered Software, or any notices of licensing or any
- descriptive text giving attribution to any Contributor or the
- Initial Developer.
-
- 3.4. Application of Additional Terms.
-
- You may not offer or impose any terms on any Covered Software in
- Source Code form that alters or restricts the applicable version of
- this License or the recipients' rights hereunder. You may choose to
- offer, and to charge a fee for, warranty, support, indemnity or
- liability obligations to one or more recipients of Covered Software.
- However, you may do so only on Your own behalf, and not on behalf of
- the Initial Developer or any Contributor. You must make it
- absolutely clear that any such warranty, support, indemnity or
- liability obligation is offered by You alone, and You hereby agree
- to indemnify the Initial Developer and every Contributor for any
- liability incurred by the Initial Developer or such Contributor as a
- result of warranty, support, indemnity or liability terms You offer.
-
- 3.5. Distribution of Executable Versions.
-
- You may distribute the Executable form of the Covered Software under
- the terms of this License or under the terms of a license of Your
- choice, which may contain terms different from this License,
- provided that You are in compliance with the terms of this License
- and that the license for the Executable form does not attempt to
- limit or alter the recipient's rights in the Source Code form from
- the rights set forth in this License. If You distribute the Covered
- Software in Executable form under a different license, You must make
- it absolutely clear that any terms which differ from this License
- are offered by You alone, not by the Initial Developer or
- Contributor. You hereby agree to indemnify the Initial Developer and
- every Contributor for any liability incurred by the Initial
- Developer or such Contributor as a result of any such terms You offer.
-
- 3.6. Larger Works.
-
- You may create a Larger Work by combining Covered Software with
- other code not governed by the terms of this License and distribute
- the Larger Work as a single product. In such a case, You must make
- sure the requirements of this License are fulfilled for the Covered
- Software.
-
-4. Versions of the License.
-
- 4.1. New Versions.
-
- Oracle is the initial license steward and may publish revised and/or
- new versions of this License from time to time. Each version will be
- given a distinguishing version number. Except as provided in Section
- 4.3, no one other than the license steward has the right to modify
- this License.
-
- 4.2. Effect of New Versions.
-
- You may always continue to use, distribute or otherwise make the
- Covered Software available under the terms of the version of the
- License under which You originally received the Covered Software. If
- the Initial Developer includes a notice in the Original Software
- prohibiting it from being distributed or otherwise made available
- under any subsequent version of the License, You must distribute and
- make the Covered Software available under the terms of the version
- of the License under which You originally received the Covered
- Software. Otherwise, You may also choose to use, distribute or
- otherwise make the Covered Software available under the terms of any
- subsequent version of the License published by the license steward.
-
- 4.3. Modified Versions.
-
- When You are an Initial Developer and You want to create a new
- license for Your Original Software, You may create and use a
- modified version of this License if You: (a) rename the license and
- remove any references to the name of the license steward (except to
- note that the license differs from this License); and (b) otherwise
- make it clear that the license contains terms which differ from this
- License.
-
-5. DISCLAIMER OF WARRANTY.
-
- COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
- INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE
- IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR
- NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
- THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE
- DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY
- OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING,
- REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN
- ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS
- AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-6. TERMINATION.
-
- 6.1. This License and the rights granted hereunder will terminate
- automatically if You fail to comply with terms herein and fail to
- cure such breach within 30 days of becoming aware of the breach.
- Provisions which, by their nature, must remain in effect beyond the
- termination of this License shall survive.
-
- 6.2. If You assert a patent infringement claim (excluding
- declaratory judgment actions) against Initial Developer or a
- Contributor (the Initial Developer or Contributor against whom You
- assert such claim is referred to as "Participant") alleging that the
- Participant Software (meaning the Contributor Version where the
- Participant is a Contributor or the Original Software where the
- Participant is the Initial Developer) directly or indirectly
- infringes any patent, then any and all rights granted directly or
- indirectly to You by such Participant, the Initial Developer (if the
- Initial Developer is not the Participant) and all Contributors under
- Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice
- from Participant terminate prospectively and automatically at the
- expiration of such 60 day notice period, unless if within such 60
- day period You withdraw Your claim with respect to the Participant
- Software against such Participant either unilaterally or pursuant to
- a written agreement with Participant.
-
- 6.3. If You assert a patent infringement claim against Participant
- alleging that the Participant Software directly or indirectly
- infringes any patent where such claim is resolved (such as by
- license or settlement) prior to the initiation of patent
- infringement litigation, then the reasonable value of the licenses
- granted by such Participant under Sections 2.1 or 2.2 shall be taken
- into account in determining the amount or value of any payment or
- license.
-
- 6.4. In the event of termination under Sections 6.1 or 6.2 above,
- all end user licenses that have been validly granted by You or any
- distributor hereunder prior to termination (excluding licenses
- granted to You by any distributor) shall survive termination.
-
-7. LIMITATION OF LIABILITY.
-
- UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
- (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
- INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
- COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE
- TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
- CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
- LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER
- FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR
- LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE
- POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT
- APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH
- PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH
- LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR
- LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION
- AND LIMITATION MAY NOT APPLY TO YOU.
-
-8. U.S. GOVERNMENT END USERS.
-
- The Covered Software is a "commercial item," as that term is defined
- in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
- software" (as that term is defined at 48 C.F.R. §
- 252.227-7014(a)(1)) and "commercial computer software documentation"
- as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent
- with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4
- (June 1995), all U.S. Government End Users acquire Covered Software
- with only those rights set forth herein. This U.S. Government Rights
- clause is in lieu of, and supersedes, any other FAR, DFAR, or other
- clause or provision that addresses Government rights in computer
- software under this License.
-
-9. MISCELLANEOUS.
-
- This License represents the complete agreement concerning subject
- matter hereof. If any provision of this License is held to be
- unenforceable, such provision shall be reformed only to the extent
- necessary to make it enforceable. This License shall be governed by
- the law of the jurisdiction specified in a notice contained within
- the Original Software (except to the extent applicable law, if any,
- provides otherwise), excluding such jurisdiction's conflict-of-law
- provisions. Any litigation relating to this License shall be subject
- to the jurisdiction of the courts located in the jurisdiction and
- venue specified in a notice contained within the Original Software,
- with the losing party responsible for costs, including, without
- limitation, court costs and reasonable attorneys' fees and expenses.
- The application of the United Nations Convention on Contracts for
- the International Sale of Goods is expressly excluded. Any law or
- regulation which provides that the language of a contract shall be
- construed against the drafter shall not apply to this License. You
- agree that You alone are responsible for compliance with the United
- States export administration regulations (and the export control
- laws and regulation of any other countries) when You use, distribute
- or otherwise make available any Covered Software.
-
-10. RESPONSIBILITY FOR CLAIMS.
-
- As between Initial Developer and the Contributors, each party is
- responsible for claims and damages arising, directly or indirectly,
- out of its utilization of rights under this License and You agree to
- work with Initial Developer and Contributors to distribute such
- responsibility on an equitable basis. Nothing herein is intended or
- shall be deemed to constitute any admission of liability.
-
-------------------------------------------------------------------------
-
-NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION
-LICENSE (CDDL)
-
-The code released under the CDDL shall be governed by the laws of the
-State of California (excluding conflict-of-law provisions). Any
-litigation relating to this License shall be subject to the jurisdiction
-of the Federal Courts of the Northern District of California and the
-state courts of the State of California, with venue lying in Santa Clara
-County, California.
-
-----
-
-This product includes (via Snappy Java) a statically linked libstdc++. This
-inclusion is allowed by "GCC RUntime Library Exception"
-
-
-GCC RUNTIME LIBRARY EXCEPTION
-
-Version 3.1, 31 March 2009
-
-Copyright (C) 2009 Free Software Foundation, Inc.
-
-Everyone is permitted to copy and distribute verbatim copies of this
-license document, but changing it is not allowed.
-
-This GCC Runtime Library Exception ("Exception") is an additional
-permission under section 7 of the GNU General Public License, version
-3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
-bears a notice placed by the copyright holder of the file stating that
-the file is governed by GPLv3 along with this Exception.
-
-When you use GCC to compile a program, GCC may combine portions of
-certain GCC header files and runtime libraries with the compiled
-program. The purpose of this Exception is to allow compilation of
-non-GPL (including proprietary) programs to use, in this way, the
-header files and runtime libraries covered by this Exception.
-
-0. Definitions.
-
-A file is an "Independent Module" if it either requires the Runtime
-Library for execution after a Compilation Process, or makes use of an
-interface provided by the Runtime Library, but is not otherwise based
-on the Runtime Library.
-
-"GCC" means a version of the GNU Compiler Collection, with or without
-modifications, governed by version 3 (or a specified later version) of
-the GNU General Public License (GPL) with the option of using any
-subsequent versions published by the FSF.
-
-"GPL-compatible Software" is software whose conditions of propagation,
-modification and use would permit combination with GCC in accord with
-the license of GCC.
-
-"Target Code" refers to output from any compiler for a real or virtual
-target processor architecture, in executable form or suitable for
-input to an assembler, loader, linker and/or execution
-phase. Notwithstanding that, Target Code does not include data in any
-format that is used as a compiler intermediate representation, or used
-for producing a compiler intermediate representation.
-
-The "Compilation Process" transforms code entirely represented in
-non-intermediate languages designed for human-written code, and/or in
-Java Virtual Machine byte code, into Target Code. Thus, for example,
-use of source code generators and preprocessors need not be considered
-part of the Compilation Process, since the Compilation Process can be
-understood as starting with the output of the generators or
-preprocessors.
-
-A Compilation Process is "Eligible" if it is done using GCC, alone or
-with other GPL-compatible software, or if it is done without using any
-work based on GCC. For example, using non-GPL-compatible Software to
-optimize any GCC intermediate representations would not qualify as an
-Eligible Compilation Process.
-
-1. Grant of Additional Permission.
-
-You have permission to propagate a work of Target Code formed by
-combining the Runtime Library with Independent Modules, even if such
-propagation would otherwise violate the terms of GPLv3, provided that
-all Target Code was generated by Eligible Compilation Processes. You
-may then convey such a combination under terms of your choice,
-consistent with the licensing of the Independent Modules.
-
-2. No Weakening of GCC Copyleft.
-
-The availability of this Exception does not imply any general
-presumption that third-party software is unaffected by the copyleft
-requirements of the license of GCC.
-
-
-Hopefully that text is self-explanatory. If it isn't, you need to speak to your lawyer, or the Free Software Foundation.
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/main/resources-for-jar-with-deps/META-INF/NOTICE b/flume-ng-clients/flume-ng-log4jappender/src/main/resources-for-jar-with-deps/META-INF/NOTICE
deleted file mode 100644
index 50b3db814..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/main/resources-for-jar-with-deps/META-INF/NOTICE
+++ /dev/null
@@ -1,148 +0,0 @@
-Flume NG Log4j Appender
-Copyright 2009-2022 Apache Software Foundation
-
-This product includes software developed at
-The Apache Software Foundation (http://www.apache.org/).
-
-
-Portions of this software were developed at
-Cloudera, Inc. (http://www.cloudera.com/), copyright 2009-2011.
-
----
-Notices from bundled third party works. Unless otherwise noted these are
-licensed under the Apache License, version 2.0.
-
-Apache Avro 1.11
-Copyright 2010-2019 The Apache Software Foundation
-
-Apache Commons Codec
-Copyright 2002-2020 The Apache Software Foundation
-
-The content of package org.apache.commons.codec.language.bm has been translated
-from the original php source code available at http://stevemorse.org/phoneticinfo.htm
-with permission from the original authors.
-Original source copyright:
-Copyright (c) 2008 Alexander Beider & Stephen P. Morse.
-
-Apache Commons Compress 1.21
-Copyright 2002-2021 The Apache Software Foundation
-
-Apache Commons Lang 3.11
-Copyright 2001-2020 The Apache Software Foundation
-
-Apache Commons Lang 2.6
-Copyright 2001-2011 The Apache Software Foundation
-
-Apache Commons Logging 1.2
-Copyright 2003-2014 The Apache Software Foundation
-
-Apache HttpClient
-Copyright 1999-2020 The Apache Software Foundation
-
-This project includes Public Suffix List copied from
-<https://publicsuffix.org/list/effective_tld_names.dat>
-licensed under the terms of the Mozilla Public License, v. 2.0 see LICENSE for details.
-
-Apache HttpCore
-Copyright 2005-2021 The Apache Software Foundation
-
-# Jackson JSON processor
-
-Jackson is a high-performance, Free/Open Source JSON processing library.
-It was originally written by Tatu Saloranta (tatu.saloranta@iki.fi), and has
-been in development since 2007.
-It is currently developed by a community of developers.
-
-## Licensing
-
-Jackson 2.x core and extension components are licensed under Apache License 2.0
-To find the details that apply to this artifact see the accompanying LICENSE file.
-
-## Credits
-
-A list of contributors may be found from CREDITS(-2.x) file, which is included
-in some artifacts (usually source distributions); but is always available
-from the source code management (SCM) system project uses.
-
---
-This product includes the javax.annotation API 1.3.2 licensed under the CDDL v1.1, see LICENSE for details.
-for source see https://github.com/javaee/javax.annotation/tree/1.3.2/
-
-Apache Thrift
-Copyright (C) 2006 - 2019, The Apache Software Foundation
-
-Apache log4j 1.2.17
-Copyright 2010 The Apache Software Foundation
-
---
-Copyright 2014 The Netty Project
-
-Please visit the Netty web site for more information:
- https://netty.io/
-
-This product contains a modified portion of 'Apache Harmony'
-copyright 2006, 2010 The Apache Software Foundation.
-
-This product contains a modified portion of Nitsan Wakart's 'JCTools'
-
-This product contains a modified version of 'HPACK' Copyright 2013 Twitter, Inc.
-
-This product contains a modified portion of 'Apache Commons Lang'
-Copyright 2001-2015 The Apache Software Foundation
-
-This product contains the dnsinfo.h header file, that provides a way to retrieve the system DNS configuration on MacOS.
-Licensed under the Apple Public Source License 2.0
-
-source: https://www.opensource.apple.com/source/configd/configd-453.19/dnsinfo/dnsinfo.h
-
---
-
-Snappy Java developed by Taro L. Saito.
-
-This product includes software developed by Apache
- PureJavaCrc32C from apache-hadoop-common http://hadoop.apache.org/
- (Apache 2.0 license)
-
-This library containd statically linked libstdc++. This inclusion is allowed by
-"GCC Runtime Library Exception" see LICENSE for details.
-
-== Contributors ==
- * Tatu Saloranta
- * Providing benchmark suite
- * Alec Wysoker
- * Performance and memory usage improvement
-
---
-
-Apache Tomcat
-Copyright 1999-2019 The Apache Software Foundation
-
-Thie product includes the original XML Schemas for Java EE Deployment Descriptors:
- - javaee_5.xsd
- - javaee_web_services_1_2.xsd
- - javaee_web_services_client_1_2.xsd
- - javaee_6.xsd
- - javaee_web_services_1_3.xsd
- - javaee_web_services_client_1_3.xsd
- - jsp_2_2.xsd
- - web-app_3_0.xsd
- - web-common_3_0.xsd
- - web-fragment_3_0.xsd
- - javaee_7.xsd
- - javaee_web_services_1_4.xsd
- - javaee_web_services_client_1_4.xsd
- - jsp_2_3.xsd
- - web-app_3_1.xsd
- - web-common_3_1.xsd
- - web-fragment_3_1.xsd
-
-may be obtained from:
-http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html
-
-Licensed under CDDL 1.0 see LICENSE for details.
-
-Apache Velocity - Engine
-Copyright 2000-2020 The Apache Software Foundation
-
-Apache Commons IO
-Copyright 2002-2020 The Apache Software Foundation
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLoadBalancingLog4jAppender.java b/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLoadBalancingLog4jAppender.java
deleted file mode 100644
index cd8b42327..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLoadBalancingLog4jAppender.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.flume.clients.log4jappender;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.ServerSocket;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import junit.framework.Assert;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.flume.Channel;
-import org.apache.flume.ChannelSelector;
-import org.apache.flume.Context;
-import org.apache.flume.Event;
-import org.apache.flume.EventDeliveryException;
-import org.apache.flume.FlumeException;
-import org.apache.flume.Source;
-import org.apache.flume.Transaction;
-import org.apache.flume.channel.ChannelProcessor;
-import org.apache.flume.channel.MemoryChannel;
-import org.apache.flume.channel.ReplicatingChannelSelector;
-import org.apache.flume.conf.Configurables;
-import org.apache.flume.source.avro.AvroFlumeEvent;
-import org.apache.flume.source.avro.Status;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PropertyConfigurator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.collect.Lists;
-
-public class TestLoadBalancingLog4jAppender {
-
- private final List<CountingAvroSource> sources = Lists.newArrayList();
- private Channel ch;
- private ChannelSelector rcs;
- private Logger fixture;
- private boolean slowDown = false;
-
- private static List<Integer> getFreePorts(int numberOfPorts) throws IOException {
- List<Integer> ports = new ArrayList<>(numberOfPorts);
- for (int index = 0; index < numberOfPorts; ++index) {
- try (ServerSocket socket = new ServerSocket(0)) {
- ports.add(socket.getLocalPort());
- }
- }
- return ports;
- }
-
- private static String toHostList(List<Integer> ports) {
- List<String> addresses = new ArrayList<String>(ports.size());
- for (Integer port : ports) {
- addresses.add("localhost:" + port);
- }
- String hostList = StringUtils.join(addresses, " ");
- return hostList;
- }
-
- @Before
- public void initiate() throws InterruptedException {
- ch = new MemoryChannel();
- configureChannel();
-
- }
-
- private void configureChannel() {
- Configurables.configure(ch, new Context());
-
- List<Channel> channels = new ArrayList<Channel>();
- channels.add(ch);
-
- rcs = new ReplicatingChannelSelector();
- rcs.setChannels(channels);
- }
-
- @After
- public void cleanUp() {
- for (Source source : sources) {
- source.stop();
- }
- }
-
- @Test
- public void testLog4jAppenderRoundRobin() throws IOException {
- int numberOfMsgs = 1000;
- int expectedPerSource = 500;
- String propertiesFile = "flume-loadbalancinglog4jtest.properties";
- startSources(propertiesFile, false, getFreePorts(2));
-
- sendAndAssertMessages(numberOfMsgs);
-
- for (CountingAvroSource source : sources) {
- Assert.assertEquals(expectedPerSource, source.appendCount.get());
- }
- }
-
- @Test
- public void testLog4jAppenderRandom() throws IOException {
- int numberOfMsgs = 1000;
- String propertiesFile = "flume-loadbalancing-rnd-log4jtest.properties";
- startSources(propertiesFile, false, getFreePorts(10));
-
- sendAndAssertMessages(numberOfMsgs);
-
- int total = 0;
- Set<Integer> counts = new HashSet<Integer>();
- for (CountingAvroSource source : sources) {
- total += source.appendCount.intValue();
- counts.add(source.appendCount.intValue());
- }
- // We are not testing distribution this is tested in the client
- Assert.assertTrue("Very unusual distribution " + counts.size(), counts.size() > 2);
- Assert.assertTrue("Missing events", total == numberOfMsgs);
- }
-
- @Test
- public void testRandomBackoff() throws Exception {
- String propertiesFile = "flume-loadbalancing-backoff-log4jtest.properties";
- startSources(propertiesFile, false, getFreePorts(3));
-
- sources.get(0).setFail();
- sources.get(2).setFail();
-
- sendAndAssertMessages(50);
-
- Assert.assertEquals(50, sources.get(1).appendCount.intValue());
- Assert.assertEquals(0, sources.get(0).appendCount.intValue());
- Assert.assertEquals(0, sources.get(2).appendCount.intValue());
- sources.get(0).setOk();
- sources.get(1).setFail(); // s0 should still be backed off
- try {
- send(1);
- // nothing should be able to process right now
- Assert.fail("Expected EventDeliveryException");
- } catch (FlumeException e) {
- Assert.assertTrue(e.getCause() instanceof EventDeliveryException);
- }
- Thread.sleep(2500); // wait for s0 to no longer be backed off
-
- sendAndAssertMessages(50);
-
- Assert.assertEquals(50, sources.get(0).appendCount.intValue());
- Assert.assertEquals(50, sources.get(1).appendCount.intValue());
- Assert.assertEquals(0, sources.get(2).appendCount.intValue());
- }
-
- @Test
- public void testRandomBackoffUnsafeMode() throws Exception {
- String propertiesFile = "flume-loadbalancing-backoff-log4jtest.properties";
- startSources(propertiesFile, true, getFreePorts(3));
-
- sources.get(0).setFail();
- sources.get(1).setFail();
- sources.get(2).setFail();
- sendAndAssertFail();
-
- }
-
- @Test (expected = EventDeliveryException.class)
- public void testTimeout() throws Throwable {
- String propertiesFile = "flume-loadbalancinglog4jtest.properties";
-
- ch = new TestLog4jAppender.SlowMemoryChannel(2000);
- configureChannel();
- slowDown = true;
- startSources(propertiesFile, false, getFreePorts(3));
- int level = 20000;
- String msg = "This is log message number" + String.valueOf(level);
- try {
- fixture.log(Level.toLevel(level), msg);
- } catch (FlumeException ex) {
- throw ex.getCause();
- }
- }
-
- @Test(expected = EventDeliveryException.class)
- public void testRandomBackoffNotUnsafeMode() throws Throwable {
- String propertiesFile = "flume-loadbalancing-backoff-log4jtest.properties";
- startSources(propertiesFile, false, getFreePorts(3));
-
- sources.get(0).setFail();
- sources.get(1).setFail();
- sources.get(2).setFail();
- try {
- sendAndAssertFail();
- } catch (FlumeException ex) {
- throw ex.getCause();
- }
- }
-
- private void send(int numberOfMsgs) throws EventDeliveryException {
- for (int count = 0; count < numberOfMsgs; count++) {
- int level = count % 5;
- String msg = "This is log message number" + String.valueOf(count);
- fixture.log(Level.toLevel(level), msg);
- }
- }
-
- private void sendAndAssertFail() throws IOException {
- int level = 20000;
- String msg = "This is log message number" + String.valueOf(level);
- fixture.log(Level.toLevel(level), msg);
-
- Transaction transaction = ch.getTransaction();
- transaction.begin();
- Event event = ch.take();
- Assert.assertNull(event);
-
- transaction.commit();
- transaction.close();
-
- }
-
- private void sendAndAssertMessages(int numberOfMsgs) throws IOException {
- for (int count = 0; count < numberOfMsgs; count++) {
- int level = count % 5;
- String msg = "This is log message number" + String.valueOf(count);
- fixture.log(Level.toLevel(level), msg);
-
- Transaction transaction = ch.getTransaction();
- transaction.begin();
- Event event = ch.take();
- Assert.assertNotNull(event);
- Assert.assertEquals(new String(event.getBody(), "UTF8"), msg);
-
- Map<String, String> hdrs = event.getHeaders();
-
- Assert.assertNotNull(hdrs.get(Log4jAvroHeaders.TIMESTAMP.toString()));
-
- Assert.assertNotNull(hdrs.get(Log4jAvroHeaders.ADDRESS.toString()));
-
- Assert.assertEquals(Level.toLevel(level),
- Level.toLevel(hdrs.get(Log4jAvroHeaders.LOG_LEVEL.toString())));
-
- Assert.assertEquals(fixture.getName(),
- hdrs.get(Log4jAvroHeaders.LOGGER_NAME.toString()));
-
- Assert.assertEquals("UTF8",
- hdrs.get(Log4jAvroHeaders.MESSAGE_ENCODING.toString()));
- // To confirm on console we actually got the body
- System.out.println("Got body: " + new String(event.getBody(), "UTF8"));
- transaction.commit();
- transaction.close();
- }
-
- }
-
- private void startSources(String log4jProps, boolean unsafeMode, List<Integer> ports)
- throws IOException {
- for (int port : ports) {
- CountingAvroSource source = new CountingAvroSource(port);
- Context context = new Context();
- context.put("port", String.valueOf(port));
- context.put("bind", "0.0.0.0");
- Configurables.configure(source, context);
- sources.add(source);
- source.setChannelProcessor(new ChannelProcessor(rcs));
- }
-
- for (Source source : sources) {
- source.start();
- }
-
- // The properties file having Avro port info should be loaded only
- // after the test begins, else log4j tries to connect to the source
- // before the source has started up in the above function, since
- // log4j setup is completed before the @Before calls also.
- // This will cause the test to fail even before it starts!
-
- Reader reader = new InputStreamReader(getClass().getResourceAsStream("/" + log4jProps));
- Properties props = new Properties();
- props.load(reader);
- props.setProperty("log4j.appender.out2.Hosts", toHostList(ports));
- props.setProperty("log4j.appender.out2.UnsafeMode",
- String.valueOf(unsafeMode));
- if (slowDown) {
- props.setProperty("log4j.appender.out2.Timeout", String.valueOf(1000));
- }
- PropertyConfigurator.configure(props);
- fixture = LogManager.getLogger(TestLoadBalancingLog4jAppender.class);
- }
-
- static class CountingAvroSource extends AvroSource {
- AtomicInteger appendCount = new AtomicInteger();
- volatile boolean isFail = false;
- private final int port2;
-
- public CountingAvroSource(int port) {
- port2 = port;
- }
-
- public void setOk() {
- this.isFail = false;
- }
-
- public void setFail() {
- this.isFail = true;
- }
-
- @Override
- public String getName() {
- return "testing..." + port2;
- }
-
- @Override
- public Status append(AvroFlumeEvent avroEvent) {
- if (isFail) {
- return Status.FAILED;
- }
- appendCount.incrementAndGet();
- return super.append(avroEvent);
- }
-
- @Override
- public Status appendBatch(List<AvroFlumeEvent> events) {
- if (isFail) {
- return Status.FAILED;
- }
- appendCount.addAndGet(events.size());
- return super.appendBatch(events);
- }
- }
-}
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLog4jAppender.java b/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLog4jAppender.java
deleted file mode 100644
index 960c73a2f..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLog4jAppender.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.flume.clients.log4jappender;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
-import junit.framework.Assert;
-
-import org.apache.flume.Channel;
-import org.apache.flume.ChannelSelector;
-import org.apache.flume.Context;
-import org.apache.flume.Event;
-import org.apache.flume.EventDeliveryException;
-import org.apache.flume.FlumeException;
-import org.apache.flume.Transaction;
-import org.apache.flume.channel.ChannelProcessor;
-import org.apache.flume.channel.MemoryChannel;
-import org.apache.flume.channel.ReplicatingChannelSelector;
-import org.apache.flume.conf.Configurables;
-import org.apache.flume.source.avro.AvroFlumeEvent;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PropertyConfigurator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-public class TestLog4jAppender {
- private AvroSource source;
- private Channel ch;
- private Properties props;
-
- private static int getFreePort() throws Exception {
- try (ServerSocket socket = new ServerSocket(0)) {
- return socket.getLocalPort();
- }
- }
-
- @Before
- public void initiate() throws Exception {
- int port = getFreePort();
- source = Mockito.spy(new AvroSource());
- ch = new MemoryChannel();
- Configurables.configure(ch, new Context());
-
- Context context = new Context();
- context.put("port", String.valueOf(port));
- context.put("bind", "localhost");
- Configurables.configure(source, context);
-
- File TESTFILE = new File(
- TestLog4jAppender.class.getClassLoader()
- .getResource("flume-log4jtest.properties").getFile());
- FileReader reader = new FileReader(TESTFILE);
- props = new Properties();
- props.load(reader);
- props.put("log4j.appender.out2.Port", String.valueOf(port));
- reader.close();
- }
-
- private void configureSource() {
- ChannelSelector rcs = new ReplicatingChannelSelector();
- rcs.setChannels(Collections.singletonList(ch));
- source.setChannelProcessor(new ChannelProcessor(rcs));
- source.start();
- }
-
- @Test
- public void testLog4jAppender() throws IOException {
- configureSource();
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(TestLog4jAppender.class);
- for (int count = 0; count <= 1000; count++) {
- /*
- * Log4j internally defines levels as multiples of 10000. So if we
- * create levels directly using count, the level will be set as the
- * default.
- */
- int level = ((count % 5) + 1) * 10000;
- String msg = "This is log message number" + String.valueOf(count);
-
- logger.log(Level.toLevel(level), msg);
- Transaction transaction = ch.getTransaction();
- transaction.begin();
- Event event = ch.take();
- Assert.assertNotNull(event);
- Assert.assertEquals(new String(event.getBody(), "UTF8"), msg);
-
- Map<String, String> hdrs = event.getHeaders();
-
- Assert.assertNotNull(hdrs.get(Log4jAvroHeaders.TIMESTAMP.toString()));
-
- Assert.assertEquals(Level.toLevel(level),
- Level.toLevel(Integer.valueOf(hdrs.get(Log4jAvroHeaders.LOG_LEVEL
- .toString()))
- ));
- Assert.assertNotNull(hdrs.get(Log4jAvroHeaders.ADDRESS.toString()));
-
- Assert.assertEquals(logger.getName(),
- hdrs.get(Log4jAvroHeaders.LOGGER_NAME.toString()));
-
- Assert.assertEquals("UTF8",
- hdrs.get(Log4jAvroHeaders.MESSAGE_ENCODING.toString()));
- transaction.commit();
- transaction.close();
- }
- }
-
- private void testBatchedSending(int numEvents) {
- configureSource();
- PropertyConfigurator.configure(props);
-
- Logger logger = LogManager.getLogger(getClass());
- List<String> events = IntStream.range(0, numEvents).mapToObj(String::valueOf)
- .collect(Collectors.toList());
- logger.info(events);
-
- Transaction tx = ch.getTransaction();
- tx.begin();
- for (String s : events) {
- Event e = ch.take();
- Assert.assertNotNull(e);
- Assert.assertEquals(s, new String(e.getBody()));
- }
- Assert.assertNull("There should be no more events in the channel", ch.take());
- }
-
- @Test
- public void testLogBatch() {
- testBatchedSending(5);
- Mockito.verify(source, Mockito.times(1)).appendBatch(Mockito.anyList());
- Mockito.verify(source, Mockito.times(0)).append(Mockito.any(AvroFlumeEvent.class));
- }
-
- @Test
- public void testLogSingleMessage() {
- configureSource();
- PropertyConfigurator.configure(props);
-
- Logger logger = LogManager.getLogger(getClass());
- logger.info("test");
-
- Transaction tx = ch.getTransaction();
- tx.begin();
- Event e = ch.take();
- Assert.assertNotNull(e);
- Assert.assertEquals("test", new String(e.getBody()));
-
- Mockito.verify(source, Mockito.times(0)).appendBatch(Mockito.anyList());
- Mockito.verify(source, Mockito.times(1)).append(Mockito.any(AvroFlumeEvent.class));
- }
-
- @Test
- public void testLogSingleMessageInCollection() {
- testBatchedSending(1);
- Mockito.verify(source, Mockito.times(0)).appendBatch(Mockito.anyList());
- Mockito.verify(source, Mockito.times(1)).append(Mockito.any(AvroFlumeEvent.class));
- }
-
- @Test
- public void testLogEmptyBatch() {
- testBatchedSending(0);
- Mockito.verify(source, Mockito.times(0)).appendBatch(Mockito.anyList());
- Mockito.verify(source, Mockito.times(0)).append(Mockito.any(AvroFlumeEvent.class));
- }
-
- @Test
- public void testLog4jAppenderFailureUnsafeMode() throws Throwable {
- configureSource();
- props.setProperty("log4j.appender.out2.UnsafeMode", String.valueOf(true));
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(TestLog4jAppender.class);
- source.stop();
- sendAndAssertFail(logger);
- }
-
- @Test(expected = EventDeliveryException.class)
- public void testLog4jAppenderFailureNotUnsafeMode() throws Throwable {
- configureSource();
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(TestLog4jAppender.class);
- source.stop();
- sendAndAssertFail(logger);
-
- }
-
- private void sendAndAssertFail(Logger logger) throws Throwable {
- /*
- * Log4j internally defines levels as multiples of 10000. So if we
- * create levels directly using count, the level will be set as the
- * default.
- */
- int level = 20000;
- try {
- logger.log(Level.toLevel(level), "Test Msg");
- } catch (FlumeException ex) {
- ex.printStackTrace();
- throw ex.getCause();
- }
- Transaction transaction = ch.getTransaction();
- transaction.begin();
- Event event = ch.take();
- Assert.assertNull(event);
- transaction.commit();
- transaction.close();
-
- }
-
-
- @Test
- public void testLayout() throws IOException {
- configureSource();
- props.put("log4j.appender.out2.layout", "org.apache.log4j.PatternLayout");
- props.put("log4j.appender.out2.layout.ConversionPattern",
- "%-5p [%t]: %m%n");
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(TestLog4jAppender.class);
- Thread.currentThread().setName("Log4jAppenderTest");
- for (int count = 0; count <= 100; count++) {
- /*
- * Log4j internally defines levels as multiples of 10000. So if we
- * create levels directly using count, the level will be set as the
- * default.
- */
- int level = ((count % 5) + 1) * 10000;
- String msg = "This is log message number" + String.valueOf(count);
-
- logger.log(Level.toLevel(level), msg);
- Transaction transaction = ch.getTransaction();
- transaction.begin();
- Event event = ch.take();
- Assert.assertNotNull(event);
- StringBuilder builder = new StringBuilder();
- builder.append("[").append("Log4jAppenderTest").append("]: ")
- .append(msg);
- //INFO seems to insert an extra space, so lets split the string.
- String eventBody = new String(event.getBody(), "UTF-8");
- String eventLevel = eventBody.split("\\s+")[0];
- Assert.assertEquals(Level.toLevel(level).toString(), eventLevel);
- Assert.assertEquals(
- new String(event.getBody(), "UTF8").trim()
- .substring(eventLevel.length()).trim(), builder.toString());
-
- Map<String, String> hdrs = event.getHeaders();
-
- Assert.assertNotNull(hdrs.get(Log4jAvroHeaders.TIMESTAMP.toString()));
-
- Assert.assertEquals(Level.toLevel(level),
- Level.toLevel(Integer.parseInt(hdrs.get(Log4jAvroHeaders.LOG_LEVEL
- .toString()))));
-
- Assert.assertEquals(logger.getName(),
- hdrs.get(Log4jAvroHeaders.LOGGER_NAME.toString()));
-
- Assert.assertEquals("UTF8",
- hdrs.get(Log4jAvroHeaders.MESSAGE_ENCODING.toString()));
- transaction.commit();
- transaction.close();
- }
-
-
- }
-
- @Test(expected = EventDeliveryException.class)
- public void testSlowness() throws Throwable {
- ch = new SlowMemoryChannel(2000);
- Configurables.configure(ch, new Context());
- configureSource();
- props.put("log4j.appender.out2.Timeout", "1000");
- props.put("log4j.appender.out2.layout", "org.apache.log4j.PatternLayout");
- props.put("log4j.appender.out2.layout.ConversionPattern",
- "%-5p [%t]: %m%n");
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(TestLog4jAppender.class);
- Thread.currentThread().setName("Log4jAppenderTest");
- int level = 10000;
- String msg = "This is log message number" + String.valueOf(1);
- try {
- logger.log(Level.toLevel(level), msg);
- } catch (FlumeException ex) {
- throw ex.getCause();
- }
- }
-
- @Test // Should not throw
- public void testSlownessUnsafeMode() throws Throwable {
- props.setProperty("log4j.appender.out2.UnsafeMode", String.valueOf(true));
- testSlowness();
- }
-
-
- @After
- public void cleanUp() {
- source.stop();
- ch.stop();
- props.clear();
- }
-
- static class SlowMemoryChannel extends MemoryChannel {
- private final int slowTime;
-
- public SlowMemoryChannel(int slowTime) {
- this.slowTime = slowTime;
- }
-
- public void put(Event e) {
- try {
- TimeUnit.MILLISECONDS.sleep(slowTime);
- } catch (Exception ex) {
- throw new RuntimeException(ex);
- }
- super.put(e);
- }
- }
-
-}
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLog4jAppenderWithAvro.java b/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLog4jAppenderWithAvro.java
deleted file mode 100644
index 25123aca6..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/java/org/apache/flume/clients/log4jappender/TestLog4jAppenderWithAvro.java
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-package org.apache.flume.clients.log4jappender;
-
-import com.google.common.io.Files;
-import com.google.common.io.Resources;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.net.ServerSocket;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import junit.framework.Assert;
-import org.apache.avro.Schema;
-import org.apache.avro.generic.GenericDatumReader;
-import org.apache.avro.generic.GenericRecord;
-import org.apache.avro.generic.GenericRecordBuilder;
-import org.apache.avro.io.BinaryDecoder;
-import org.apache.avro.io.DecoderFactory;
-import org.apache.avro.reflect.ReflectData;
-import org.apache.avro.reflect.ReflectDatumReader;
-import org.apache.flume.Channel;
-import org.apache.flume.ChannelSelector;
-import org.apache.flume.Context;
-import org.apache.flume.Event;
-import org.apache.flume.Transaction;
-import org.apache.flume.channel.ChannelProcessor;
-import org.apache.flume.channel.MemoryChannel;
-import org.apache.flume.channel.ReplicatingChannelSelector;
-import org.apache.flume.conf.Configurables;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PropertyConfigurator;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class TestLog4jAppenderWithAvro {
- private AvroSource source;
- private Channel ch;
- private Properties props;
- private int port;
-
- private static int getFreePort() throws Exception {
- try (ServerSocket socket = new ServerSocket(0)) {
- return socket.getLocalPort();
- }
- }
-
- @Before
- public void setUp() throws Exception {
- URL schemaUrl = getClass().getClassLoader().getResource("myrecord.avsc");
- Resources.asByteSource(schemaUrl).copyTo(Files.asByteSink(new File("/tmp/myrecord.avsc")));
-
- port = getFreePort();
- source = new AvroSource();
- ch = new MemoryChannel();
- Configurables.configure(ch, new Context());
-
- Context context = new Context();
- context.put("port", String.valueOf(port));
- context.put("bind", "localhost");
- Configurables.configure(source, context);
-
- List<Channel> channels = new ArrayList<>();
- channels.add(ch);
-
- ChannelSelector rcs = new ReplicatingChannelSelector();
- rcs.setChannels(channels);
-
- source.setChannelProcessor(new ChannelProcessor(rcs));
-
- source.start();
- }
-
- private void loadProperties(String file) throws IOException {
- File TESTFILE = new File(TestLog4jAppenderWithAvro.class.getClassLoader()
- .getResource(file).getFile());
- FileReader reader = new FileReader(TESTFILE);
- props = new Properties();
- props.load(reader);
- reader.close();
- }
-
- @Test
- public void testAvroGeneric() throws IOException {
- loadProperties("flume-log4jtest-avro-generic.properties");
- props.put("log4j.appender.out2.Port", String.valueOf(port));
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(TestLog4jAppenderWithAvro.class);
- String msg = "This is log message number " + String.valueOf(0);
-
- Schema schema = new Schema.Parser().parse(
- getClass().getClassLoader().getResource("myrecord.avsc").openStream());
- GenericRecordBuilder builder = new GenericRecordBuilder(schema);
- GenericRecord record = builder.set("message", msg).build();
-
- logger.info(record);
-
- Transaction transaction = ch.getTransaction();
- transaction.begin();
- Event event = ch.take();
- Assert.assertNotNull(event);
-
- GenericDatumReader<GenericRecord> reader = new GenericDatumReader<>(schema);
- BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(event.getBody(), null);
- GenericRecord recordFromEvent = reader.read(null, decoder);
- Assert.assertEquals(msg, recordFromEvent.get("message").toString());
-
- Map<String, String> hdrs = event.getHeaders();
-
- Assert.assertNull(hdrs.get(Log4jAvroHeaders.MESSAGE_ENCODING.toString()));
-
- Assert.assertEquals("Schema URL should be set",
- "file:///tmp/myrecord.avsc", hdrs.get(Log4jAvroHeaders.AVRO_SCHEMA_URL.toString()));
- Assert.assertNull("Schema string should not be set",
- hdrs.get(Log4jAvroHeaders.AVRO_SCHEMA_LITERAL.toString()));
-
- transaction.commit();
- transaction.close();
- }
-
- @Test
- public void testAvroReflect() throws IOException {
- loadProperties("flume-log4jtest-avro-reflect.properties");
- props.put("log4j.appender.out2.Port", String.valueOf(port));
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(TestLog4jAppenderWithAvro.class);
- String msg = "This is log message number " + String.valueOf(0);
-
- AppEvent appEvent = new AppEvent();
- appEvent.setMessage(msg);
-
- logger.info(appEvent);
-
- Transaction transaction = ch.getTransaction();
- transaction.begin();
- Event event = ch.take();
- Assert.assertNotNull(event);
-
- Schema schema = ReflectData.get().getSchema(appEvent.getClass());
-
- ReflectDatumReader<AppEvent> reader = new ReflectDatumReader<>(AppEvent.class);
- BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(event.getBody(), null);
- AppEvent recordFromEvent = reader.read(null, decoder);
- Assert.assertEquals(msg, recordFromEvent.getMessage());
-
- Map<String, String> hdrs = event.getHeaders();
-
- Assert.assertNull(hdrs.get(Log4jAvroHeaders.MESSAGE_ENCODING.toString()));
-
- Assert.assertNull("Schema URL should not be set",
- hdrs.get(Log4jAvroHeaders.AVRO_SCHEMA_URL.toString()));
- Assert.assertEquals("Schema string should be set", schema.toString(),
- hdrs.get(Log4jAvroHeaders.AVRO_SCHEMA_LITERAL.toString()));
-
- transaction.commit();
- transaction.close();
- }
-
- @Test
- public void testDifferentEventTypesInBatchWithAvroReflect() throws IOException {
- loadProperties("flume-log4jtest-avro-reflect.properties");
- props.put("log4j.appender.out2.Port", String.valueOf(port));
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(getClass());
- List<Object> events = Arrays.asList("string", new AppEvent("appEvent"));
- logger.info(events);
-
- Transaction transaction = ch.getTransaction();
- transaction.begin();
-
- for (Object o : events) {
- Event e = ch.take();
- Assert.assertNotNull(e);
- ReflectDatumReader<?> reader = new ReflectDatumReader<>(o.getClass());
- BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(e.getBody(), null);
- Object readObject = reader.read(null, decoder);
- Assert.assertEquals(o, readObject);
-
- Map<String, String> hdrs = e.getHeaders();
- Assert.assertNull(hdrs.get(Log4jAvroHeaders.MESSAGE_ENCODING.toString()));
- Assert.assertNull("Schema URL should not be set",
- hdrs.get(Log4jAvroHeaders.AVRO_SCHEMA_URL.toString()));
- Assert.assertEquals("Schema string should be set",
- ReflectData.get().getSchema(readObject.getClass()).toString(),
- hdrs.get(Log4jAvroHeaders.AVRO_SCHEMA_LITERAL.toString()));
- }
- Assert.assertNull("There should be no more events in the channel", ch.take());
- }
-
- @Test
- public void testDifferentEventTypesInBatchWithAvroGeneric() throws IOException {
- loadProperties("flume-log4jtest-avro-generic.properties");
- props.put("log4j.appender.out2.Port", String.valueOf(port));
- PropertyConfigurator.configure(props);
- Logger logger = LogManager.getLogger(getClass());
- String msg = "Avro log message";
-
- Schema schema = new Schema.Parser().parse(
- getClass().getClassLoader().getResource("myrecord.avsc").openStream());
- GenericRecordBuilder builder = new GenericRecordBuilder(schema);
- GenericRecord record = builder.set("message", msg).build();
-
- List<Object> events = Arrays.asList("string", record);
- logger.info(events);
-
- Transaction transaction = ch.getTransaction();
- transaction.begin();
-
- Event event = ch.take();
- Assert.assertNotNull(event);
- Assert.assertEquals("string", new String(event.getBody()));
-
- event = ch.take();
- Assert.assertNotNull(event);
- GenericDatumReader<GenericRecord> reader = new GenericDatumReader<>(schema);
- BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(event.getBody(), null);
- GenericRecord recordFromEvent = reader.read(null, decoder);
- Assert.assertEquals(msg, recordFromEvent.get("message").toString());
-
- Map<String, String> hdrs = event.getHeaders();
- Assert.assertNull(hdrs.get(Log4jAvroHeaders.MESSAGE_ENCODING.toString()));
-
- Assert.assertEquals("Schema URL should be set",
- "file:///tmp/myrecord.avsc", hdrs.get(Log4jAvroHeaders.AVRO_SCHEMA_URL.toString()));
- Assert.assertNull("Schema string should not be set",
- hdrs.get(Log4jAvroHeaders.AVRO_SCHEMA_LITERAL.toString()));
-
- transaction.commit();
- transaction.close();
- }
-
- @After
- public void cleanUp() {
- source.stop();
- ch.stop();
- props.clear();
- }
-
- public static class AppEvent {
- private String message;
-
- public AppEvent() {
- }
-
- public AppEvent(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- AppEvent appEvent = (AppEvent) o;
- return message != null ? message.equals(appEvent.message) : appEvent.message == null;
- }
-
- @Override
- public int hashCode() {
- return message != null ? message.hashCode() : 0;
- }
- }
-
-}
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancing-backoff-log4jtest.properties b/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancing-backoff-log4jtest.properties
deleted file mode 100644
index 6f11e17c8..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancing-backoff-log4jtest.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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.
-log4j.appender.out2 = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender
-#log4j.appender.out2.Hosts = Set from java source
-log4j.appender.out2.Selector = ROUND_ROBIN
-log4j.appender.out2.MaxBackoff = 30000
-log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2
\ No newline at end of file
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancing-rnd-log4jtest.properties b/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancing-rnd-log4jtest.properties
deleted file mode 100644
index 753feb673..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancing-rnd-log4jtest.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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.
-log4j.appender.out2 = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender
-#log4j.appender.out2.Hosts = Set from java source
-log4j.appender.out2.Selector = RANDOM
-log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2
\ No newline at end of file
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancinglog4jtest.properties b/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancinglog4jtest.properties
deleted file mode 100644
index cfa4e114f..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-loadbalancinglog4jtest.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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.
-log4j.appender.out2 = org.apache.flume.clients.log4jappender.LoadBalancingLog4jAppender
-#log4j.appender.out2.Hosts = Set from java source
-log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2
\ No newline at end of file
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest-avro-generic.properties b/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest-avro-generic.properties
deleted file mode 100644
index 92d7d16c4..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest-avro-generic.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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.
-log4j.appender.out2 = org.apache.flume.clients.log4jappender.Log4jAppender
-#log4j.appender.out2.Port = Set from java source
-log4j.appender.out2.Hostname = localhost
-log4j.appender.out2.AvroSchemaUrl = file:///tmp/myrecord.avsc
-log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2
\ No newline at end of file
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest-avro-reflect.properties b/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest-avro-reflect.properties
deleted file mode 100644
index 06a0c6876..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest-avro-reflect.properties
+++ /dev/null
@@ -1,21 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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.
-log4j.appender.out2 = org.apache.flume.clients.log4jappender.Log4jAppender
-#log4j.appender.out2.Port = Set from java source
-log4j.appender.out2.Hostname = localhost
-log4j.appender.out2.AvroReflectionEnabled = true
-log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2
\ No newline at end of file
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest.properties b/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest.properties
deleted file mode 100644
index 97dcab56e..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/flume-log4jtest.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you 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.
-log4j.appender.out2 = org.apache.flume.clients.log4jappender.Log4jAppender
-#log4j.appender.out2.Port = Set from java source
-log4j.appender.out2.Hostname = localhost
-log4j.logger.org.apache.flume.clients.log4jappender = DEBUG,out2
\ No newline at end of file
diff --git a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/myrecord.avsc b/flume-ng-clients/flume-ng-log4jappender/src/test/resources/myrecord.avsc
deleted file mode 100644
index 54130a33d..000000000
--- a/flume-ng-clients/flume-ng-log4jappender/src/test/resources/myrecord.avsc
+++ /dev/null
@@ -1 +0,0 @@
-{"type":"record","name":"myrecord","fields":[{"name":"message","type":"string"}]}
\ No newline at end of file
diff --git a/flume-ng-clients/pom.xml b/flume-ng-clients/pom.xml
deleted file mode 100644
index d54c46c5d..000000000
--- a/flume-ng-clients/pom.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements. See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <artifactId>flume-parent</artifactId>
- <groupId>org.apache.flume</groupId>
- <version>2.0.0-SNAPSHOT</version>
- <relativePath>../flume-parent/pom.xml</relativePath>
- </parent>
- <artifactId>flume-ng-clients</artifactId>
- <packaging>pom</packaging>
- <name>Flume NG Clients</name>
- <description>All flume NG clients will come under this module</description>
- <modules>
- <module>flume-ng-log4jappender</module>
- </modules>
-</project>