Uploaded image for project: 'Apache Twill'
  1. Apache Twill
  2. TWILL-179

Provides more flexibility in controlling the container classpath and classloader

    Details

    • Type: New Feature
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 0.11.0
    • Component/s: core
    • Labels:
      None

      Description

      Currently the user has little control on the classpath and classloader of the runnable container. E.g. in Java, one can control both through the -cp and -Djava.system.class.loader arguments.

        Issue Links

          Activity

          Hide
          githubbot ASF GitHub Bot added a comment -

          GitHub user chtyim opened a pull request:

          https://github.com/apache/twill/pull/51

          (TWILL-179) Added support for custom ClassLoader for containers

          • Added method TwillPreparer.setClassLoader
          • Use system property "twill.custom.class.loader" to pass the class name of the custom ClassLoader

          You can merge this pull request into a Git repository by running:

          $ git pull https://github.com/chtyim/twill feature/TWILL-179

          Alternatively you can review and apply these changes as the patch at:

          https://github.com/apache/twill/pull/51.patch

          To close this pull request, make a commit to your master/trunk branch
          with (at least) the following in the commit message:

          This closes #51


          commit 955156ee8b1cfb8e4072f77c9f83ee4ebce2e03b
          Author: Terence Yim <chtyim@apache.org>
          Date: 2017-04-03T19:34:14Z

          (TWILL-179) Added support for custom ClassLoader for containers

          • Added method TwillPreparer.setClassLoader
          • Use system property "twill.custom.class.loader" to pass the class name of the custom ClassLoader

          Show
          githubbot ASF GitHub Bot added a comment - GitHub user chtyim opened a pull request: https://github.com/apache/twill/pull/51 ( TWILL-179 ) Added support for custom ClassLoader for containers Added method TwillPreparer.setClassLoader Use system property "twill.custom.class.loader" to pass the class name of the custom ClassLoader You can merge this pull request into a Git repository by running: $ git pull https://github.com/chtyim/twill feature/ TWILL-179 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/twill/pull/51.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #51 commit 955156ee8b1cfb8e4072f77c9f83ee4ebce2e03b Author: Terence Yim <chtyim@apache.org> Date: 2017-04-03T19:34:14Z ( TWILL-179 ) Added support for custom ClassLoader for containers Added method TwillPreparer.setClassLoader Use system property "twill.custom.class.loader" to pass the class name of the custom ClassLoader
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user anwar6953 commented on a diff in the pull request:

          https://github.com/apache/twill/pull/51#discussion_r109510121

          — Diff: twill-yarn/src/test/java/org/apache/twill/yarn/CustomClassLoader.java —
          @@ -0,0 +1,87 @@
          +/*
          + * 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.twill.yarn;
          +
          +import org.apache.twill.api.ServiceAnnouncer;
          +import org.apache.twill.common.Cancellable;
          +import org.objectweb.asm.ClassWriter;
          +import org.objectweb.asm.Opcodes;
          +import org.objectweb.asm.Type;
          +import org.objectweb.asm.commons.GeneratorAdapter;
          +import org.objectweb.asm.commons.Method;
          +
          +import java.net.URL;
          +import java.net.URLClassLoader;
          +
          +/**
          + * ClassLoader that generates a new class for the

          {@link CustomClassLoaderTestRun}

          .
          + */
          +public final class CustomClassLoader extends URLClassLoader {
          +
          + public CustomClassLoader(URL[] urls, ClassLoader parent)

          { + super(urls, parent); + }

          +
          + @Override
          + protected Class<?> findClass(String name) throws ClassNotFoundException {
          + if (!CustomClassLoaderRunnable.GENERATED_CLASS_NAME.equals(name))

          { + return super.findClass(name); + }

          +
          + // Generate a class that look like this:
          + //
          + // public class Generated {
          + //
          + // public void announce(ServiceAnnouncer announcer, String serviceName, int port) {
          — End diff –

          Is the javadoc outdated/inconsistent?
          `Cancellable` is declared as the return type, below on line 76.

          Show
          githubbot ASF GitHub Bot added a comment - Github user anwar6953 commented on a diff in the pull request: https://github.com/apache/twill/pull/51#discussion_r109510121 — Diff: twill-yarn/src/test/java/org/apache/twill/yarn/CustomClassLoader.java — @@ -0,0 +1,87 @@ +/* + * 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.twill.yarn; + +import org.apache.twill.api.ServiceAnnouncer; +import org.apache.twill.common.Cancellable; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.commons.GeneratorAdapter; +import org.objectweb.asm.commons.Method; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * ClassLoader that generates a new class for the {@link CustomClassLoaderTestRun} . + */ +public final class CustomClassLoader extends URLClassLoader { + + public CustomClassLoader(URL[] urls, ClassLoader parent) { + super(urls, parent); + } + + @Override + protected Class<?> findClass(String name) throws ClassNotFoundException { + if (!CustomClassLoaderRunnable.GENERATED_CLASS_NAME.equals(name)) { + return super.findClass(name); + } + + // Generate a class that look like this: + // + // public class Generated { + // + // public void announce(ServiceAnnouncer announcer, String serviceName, int port) { — End diff – Is the javadoc outdated/inconsistent? `Cancellable` is declared as the return type, below on line 76.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user chtyim commented on a diff in the pull request:

          https://github.com/apache/twill/pull/51#discussion_r109510575

          — Diff: twill-yarn/src/test/java/org/apache/twill/yarn/CustomClassLoader.java —
          @@ -0,0 +1,87 @@
          +/*
          + * 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.twill.yarn;
          +
          +import org.apache.twill.api.ServiceAnnouncer;
          +import org.apache.twill.common.Cancellable;
          +import org.objectweb.asm.ClassWriter;
          +import org.objectweb.asm.Opcodes;
          +import org.objectweb.asm.Type;
          +import org.objectweb.asm.commons.GeneratorAdapter;
          +import org.objectweb.asm.commons.Method;
          +
          +import java.net.URL;
          +import java.net.URLClassLoader;
          +
          +/**
          + * ClassLoader that generates a new class for the

          {@link CustomClassLoaderTestRun}

          .
          + */
          +public final class CustomClassLoader extends URLClassLoader {
          +
          + public CustomClassLoader(URL[] urls, ClassLoader parent)

          { + super(urls, parent); + }

          +
          + @Override
          + protected Class<?> findClass(String name) throws ClassNotFoundException {
          + if (!CustomClassLoaderRunnable.GENERATED_CLASS_NAME.equals(name))

          { + return super.findClass(name); + }

          +
          + // Generate a class that look like this:
          + //
          + // public class Generated {
          + //
          + // public void announce(ServiceAnnouncer announcer, String serviceName, int port) {
          — End diff –

          Will update.

          Show
          githubbot ASF GitHub Bot added a comment - Github user chtyim commented on a diff in the pull request: https://github.com/apache/twill/pull/51#discussion_r109510575 — Diff: twill-yarn/src/test/java/org/apache/twill/yarn/CustomClassLoader.java — @@ -0,0 +1,87 @@ +/* + * 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.twill.yarn; + +import org.apache.twill.api.ServiceAnnouncer; +import org.apache.twill.common.Cancellable; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.commons.GeneratorAdapter; +import org.objectweb.asm.commons.Method; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * ClassLoader that generates a new class for the {@link CustomClassLoaderTestRun} . + */ +public final class CustomClassLoader extends URLClassLoader { + + public CustomClassLoader(URL[] urls, ClassLoader parent) { + super(urls, parent); + } + + @Override + protected Class<?> findClass(String name) throws ClassNotFoundException { + if (!CustomClassLoaderRunnable.GENERATED_CLASS_NAME.equals(name)) { + return super.findClass(name); + } + + // Generate a class that look like this: + // + // public class Generated { + // + // public void announce(ServiceAnnouncer announcer, String serviceName, int port) { — End diff – Will update.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user anwar6953 commented on the issue:

          https://github.com/apache/twill/pull/51

          1 minor comment; remainder LGTM.

          Show
          githubbot ASF GitHub Bot added a comment - Github user anwar6953 commented on the issue: https://github.com/apache/twill/pull/51 1 minor comment; remainder LGTM.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user chtyim commented on a diff in the pull request:

          https://github.com/apache/twill/pull/51#discussion_r109512583

          — Diff: twill-yarn/src/test/java/org/apache/twill/yarn/CustomClassLoader.java —
          @@ -0,0 +1,87 @@
          +/*
          + * 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.twill.yarn;
          +
          +import org.apache.twill.api.ServiceAnnouncer;
          +import org.apache.twill.common.Cancellable;
          +import org.objectweb.asm.ClassWriter;
          +import org.objectweb.asm.Opcodes;
          +import org.objectweb.asm.Type;
          +import org.objectweb.asm.commons.GeneratorAdapter;
          +import org.objectweb.asm.commons.Method;
          +
          +import java.net.URL;
          +import java.net.URLClassLoader;
          +
          +/**
          + * ClassLoader that generates a new class for the

          {@link CustomClassLoaderTestRun}

          .
          + */
          +public final class CustomClassLoader extends URLClassLoader {
          +
          + public CustomClassLoader(URL[] urls, ClassLoader parent)

          { + super(urls, parent); + }

          +
          + @Override
          + protected Class<?> findClass(String name) throws ClassNotFoundException {
          + if (!CustomClassLoaderRunnable.GENERATED_CLASS_NAME.equals(name))

          { + return super.findClass(name); + }

          +
          + // Generate a class that look like this:
          + //
          + // public class Generated {
          + //
          + // public void announce(ServiceAnnouncer announcer, String serviceName, int port) {
          — End diff –

          actually the comment is correct. The generated method has `void` return type. The `announcer.announce` method has `Cancellable` return type, but the result gets ignored (hence the `mg.pop()` code in line 79).

          Show
          githubbot ASF GitHub Bot added a comment - Github user chtyim commented on a diff in the pull request: https://github.com/apache/twill/pull/51#discussion_r109512583 — Diff: twill-yarn/src/test/java/org/apache/twill/yarn/CustomClassLoader.java — @@ -0,0 +1,87 @@ +/* + * 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.twill.yarn; + +import org.apache.twill.api.ServiceAnnouncer; +import org.apache.twill.common.Cancellable; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.commons.GeneratorAdapter; +import org.objectweb.asm.commons.Method; + +import java.net.URL; +import java.net.URLClassLoader; + +/** + * ClassLoader that generates a new class for the {@link CustomClassLoaderTestRun} . + */ +public final class CustomClassLoader extends URLClassLoader { + + public CustomClassLoader(URL[] urls, ClassLoader parent) { + super(urls, parent); + } + + @Override + protected Class<?> findClass(String name) throws ClassNotFoundException { + if (!CustomClassLoaderRunnable.GENERATED_CLASS_NAME.equals(name)) { + return super.findClass(name); + } + + // Generate a class that look like this: + // + // public class Generated { + // + // public void announce(ServiceAnnouncer announcer, String serviceName, int port) { — End diff – actually the comment is correct. The generated method has `void` return type. The `announcer.announce` method has `Cancellable` return type, but the result gets ignored (hence the `mg.pop()` code in line 79).
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user asfgit closed the pull request at:

          https://github.com/apache/twill/pull/51

          Show
          githubbot ASF GitHub Bot added a comment - Github user asfgit closed the pull request at: https://github.com/apache/twill/pull/51

            People

            • Assignee:
              chtyim Terence Yim
              Reporter:
              chtyim Terence Yim
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development