Hi,

> Hi Mark,
>
> <snipe/>

:)
I think you meant snip rather than snipe.

> Try addURL().
> Sorry for the inconvenience.
> As I understand addURL() method is defined in WebAppClassLoaderBase. So
> should I obtain the WebAppClassLoaderBase using getClassLoader() method
and
> use reflections to call the addURL() method?

>>No need for reflection. Cast to URLClassloader.

>>Note the cast *should* always work but if someone is using a strange
>>custom class loader it will fail. Note that Tomcat 7 required the class
>>loader to be an instance of WebappClassLoader.
Thanks for quick explanation Mark.
But still addURL() method is defined as protected. So it is not possible to
call that method by casting right?


>
>
> Thanks
> Best Regards
>
> On Tue, Apr 7, 2015 at 1:19 PM, Mark Thomas <ma...@apache.org> wrote:
>
>> On 07/04/2015 07:51, Thusitha Thilina Dayaratne wrote:
>>> Hi All,
>>>
>>> I'm having the same issue. We have extend the WebAppLoader as follows in
>>> the Tomcat 7
>>>
>>> public class CarbonWebappLoader extends WebappLoader {
>>>     @Override
>>>     protected void startInternal() throws LifecycleException {
>>>         WebappClassloadingContext webappClassloadingContext;
>>>         try {
>>>             webappClassloadingContext =
>>> ClassloadingContextBuilder.buildClassloadingContext(
getWebappFilePath());
>>>         } catch (Exception e) {
>>>             throw new LifecycleException(e.getMessage(), e);
>>>         }
>>>
>>>         //Adding provided classpath entries, if any
>>>         for (String repository :
>>> webappClassloadingContext.getProvidedRepositories()) {
>>>             addRepository(repository);
>>>         }
>>>
>>>         super.startInternal();
>>>
>>>         //Adding the WebappClassloadingContext to the WebappClassloader
>>>         ((CarbonWebappClassLoader)
>>> getClassLoader()).setWebappCC(webappClassloadingContext);
>>>     }
>>> }
>>>
>>> Since addRepository method have been removed, what could I do?
>>
>> Don't top-post.
>>
>> Read the thread history. The answer has already been provided by Chris.
>>
>> Mark
>>
>>
>>>
>>>
>>> Thanks
>>> Best Regards
>>> /Thusitha
>>>
>>> On Wed, Mar 18, 2015 at 12:25 AM, Mark Thomas <ma...@apache.org> wrote:
>>>
>>>> On 17/03/2015 18:30, Ed Rouse wrote:
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Pilkington, Simon [mailto:simo...@amazon.com]
>>>>>> Sent: Tuesday, March 17, 2015 12:45 PM
>>>>>> To: users@tomcat.apache.org
>>>>>> Subject: [Tomcat8] What happened to WebappLoader.addRepository()?
>>>>>>
>>>>>> Hey tomcat users,
>>>>>>
>>>>>> The javadoc for WebappLoader still tells me to use addRepository(),
>> but
>>>>>> that method no longer exists. My team has implemented an extension of
>>>>>> WebappLoader that looked like this:
>>>>>>
>>>>>>
>> http://cp.mcafee.com/d/1jWVIq3zqb2rzydPhOCYrKrhKCqenTzhOe7cCQrFCzBZUQsL
>>>>>>
>> 9ICQrFCzBZUQszxP1J6WpEVvd7aabPxLURrFUalAv3UYKrlAv3UYKrKXHXRTT-LPz5TCnA-
>>>>>>
>> LsKyev7szsQsIFICzBzBHEShhlKYPOEuvkzaT0QSyrjdTdTdAVPmEBCjGHrpZGSS9_M079R
>>>>>>
>> lJIOUXHBQaSPlFo01PlJIj_brfjVgT3WWxYs0nO6Hb1mKEv7wsrrFYq5U_dKc2WrWr9EVjb
>>>>>> _6HtfelAv3UYK2FRlJI-
>>>>>>
>> Rrr4_U02rs7e3zpFr1dlrrdUQKCy01iuPd41flBLxW1EwDkQg0bV3lBwHnkfzSE80LRGQBe
>>>>>> IiNEEd598S-UrI1Lf5-sL
>>>>>> http://cp.mcafee.com/d/2DRPoAd3hJ5xdNN6VEVjudTdETjd7bXNEV73CjqdQPhO-
>>>>>> YqenASjqdQPhO-
>>>>>>
>> YqehMVwSztcQsLCzB55VMTYqJQY5aOfxYundGOfxYundTtRZWXX_nVNyXPbOvnKnh7fzKhK
>>>>>> qemkSjhONORQr8EGTupVkffGhBrwqrjdFCXCXCOsVHkiP9RlJI-
>>>>>>
>> Rrr4_U03AWGSSptXHBQaSPlFo01PlJIj_brfjVgT3WWxYs0nO6Hb1mKEv7wsrrFYq5U_dKc
>>>>>> 2WrWr9EVjb_6HtfelAv3UYK2FRlJI-
>>>>>>
>> Rrr4_U02rs7e3zpFr1dlrrdUQKCy01iuPd41flBLxW1EwDkQg0bV3lBwHnkfzSE80LRGQBe
>>>>>> IiNEEd598S-UrHrI5
>>>>>>
>>>>>>    @Override
>>>>>>    protected void startInternal() throws LifecycleException {
>>>>>>        // validate the context, which is used for debugging messages
>>>>>>        Context context;
>>>>>>        {
>>>>>>            Container container = getContainer();
>>>>>>            if (container == null) {
>>>>>>                throw new LifecycleException("Container is null?!");
>>>>>>            }
>>>>>>            if (!(container instanceof Context)) {
>>>>>>                throw new LifecycleException("Container is not an
>>>>>> instance of Context?!");
>>>>>>            }
>>>>>>            context = (Context) container;
>>>>>>        }
>>>>>>
>>>>>>        if (ENVIRONMENT_ROOT != null && ENVIRONMENT_ROOT.length() > 0)
>> {
>>>>>>            // validate targetPackage
>>>>>>            if (null == targetPackage) {
>>>>>>                throw new LifecycleException(
>>>>>>                        "Missing required Loader attribute
>>>>>> \"targetPackage\" in Context configuration " +
>>>>>>                                context.getConfigFile());
>>>>>>            }
>>>>>>
>>>>>>            try {
>>>>>>                // Excluded jars are those already pulled in by
tomcat.
>>>>>>                Set<String> allExcludedJars = getAllExcludedJars();
>>>>>>                Set<String> reallyExcludedJars = new
HashSet<String>();
>>>>>>                // add JARs from target package as "repositories"
>>>>>>                // getPackageClasspath finds the list of jars I want
to
>>>>>> include for this webapp.
>>>>>>                for (String jar : getPackageClasspath(targetPackage))
{
>>>>>>                    File file = new File(ENVIRONMENT_ROOT, jar);
>>>>>>                    // skip bad and unwanted JARs
>>>>>>                    if (allExcludedJars.contains(jar) ||
>> isBadJar(file))
>>>>>> {
>>>>>>                        reallyExcludedJars.add(jar);
>>>>>>                    } else {
>>>>>>                        // TODO: HOW TO FIX ME??
>>>>>>                        addRepository(file.toURI().toString());
>>>>>>                    }
>>>>>>                }
>>>>>>                log.info("Context path \"" + context.getPath() + "\"
>>>>>> excluding JARs: " + reallyExcludedJars);
>>>>>>            } catch (IOException e) {
>>>>>>                throw new LifecycleException(
>>>>>>                        "Problem setting classpath for context path
\""
>>>>>> + context.getPath() + "\"",
>>>>>>                        e);
>>>>>>            }
>>>>>>
>>>>>>            // getRepositoriesString() has been renamed to
>>>>>> getLoaderRepositoriesString()...
>>>>>>            log.info("Context path \"" + context.getPath() + "\" using
>>>>>> classpath: " + getRepositoriesString());
>>>>>>        } else {
>>>>>>            log.warning("MyWebappLoader seems to be used outside of my
>>>>>> environment. Delegating to parent.");
>>>>>>        }
>>>>>>
>>>>>>        super.startInternal();
>>>>>>    }
>>>>>>
>>>>>> Can the community help me figure out how to upgrade this for tomcat
8?
>>>>>
>>>>> JarResourceSet jrs = new JarResourceSet(Context.getResources(), "/",
>>>> file.getAbsolutePath(), "/");
>>>>> Context.getResources().addPostResources(jrs);
>>>>
>>>> Bad idea. That will mount the contents of the JAR at the root of the
web
>>>> application.
>>>>
>>>> Mark

Thanks
Best regards


2015-04-07 15:46 GMT+05:30 Mark Thomas <ma...@apache.org>:

> On 07/04/2015 09:27, Thusitha Thilina Dayaratne wrote:
> > Hi Mark,
> >
> > <snipe/>
>
> :)
> I think you meant snip rather than snipe.
>
> > Try addURL().
> > Sorry for the inconvenience.
> > As I understand addURL() method is defined in WebAppClassLoaderBase. So
> > should I obtain the WebAppClassLoaderBase using getClassLoader() method
> and
> > use reflections to call the addURL() method?
>
> No need for reflection. Cast to URLClassloader.
>
> Note the cast *should* always work but if someone is using a strange
> custom class loader it will fail. Note that Tomcat 7 required the class
> loader to be an instance of WebappClassLoader.
>
> Mark
>
>
> >
> >
> > Thanks
> > Best Regards
> >
> > On Tue, Apr 7, 2015 at 1:19 PM, Mark Thomas <ma...@apache.org> wrote:
> >
> >> On 07/04/2015 07:51, Thusitha Thilina Dayaratne wrote:
> >>> Hi All,
> >>>
> >>> I'm having the same issue. We have extend the WebAppLoader as follows
> in
> >>> the Tomcat 7
> >>>
> >>> public class CarbonWebappLoader extends WebappLoader {
> >>>     @Override
> >>>     protected void startInternal() throws LifecycleException {
> >>>         WebappClassloadingContext webappClassloadingContext;
> >>>         try {
> >>>             webappClassloadingContext =
> >>>
> ClassloadingContextBuilder.buildClassloadingContext(getWebappFilePath());
> >>>         } catch (Exception e) {
> >>>             throw new LifecycleException(e.getMessage(), e);
> >>>         }
> >>>
> >>>         //Adding provided classpath entries, if any
> >>>         for (String repository :
> >>> webappClassloadingContext.getProvidedRepositories()) {
> >>>             addRepository(repository);
> >>>         }
> >>>
> >>>         super.startInternal();
> >>>
> >>>         //Adding the WebappClassloadingContext to the WebappClassloader
> >>>         ((CarbonWebappClassLoader)
> >>> getClassLoader()).setWebappCC(webappClassloadingContext);
> >>>     }
> >>> }
> >>>
> >>> Since addRepository method have been removed, what could I do?
> >>
> >> Don't top-post.
> >>
> >> Read the thread history. The answer has already been provided by Chris.
> >>
> >> Mark
> >>
> >>
> >>>
> >>>
> >>> Thanks
> >>> Best Regards
> >>> /Thusitha
> >>>
> >>> On Wed, Mar 18, 2015 at 12:25 AM, Mark Thomas <ma...@apache.org>
> wrote:
> >>>
> >>>> On 17/03/2015 18:30, Ed Rouse wrote:
> >>>>>
> >>>>>
> >>>>>> -----Original Message-----
> >>>>>> From: Pilkington, Simon [mailto:simo...@amazon.com]
> >>>>>> Sent: Tuesday, March 17, 2015 12:45 PM
> >>>>>> To: users@tomcat.apache.org
> >>>>>> Subject: [Tomcat8] What happened to WebappLoader.addRepository()?
> >>>>>>
> >>>>>> Hey tomcat users,
> >>>>>>
> >>>>>> The javadoc for WebappLoader still tells me to use addRepository(),
> >> but
> >>>>>> that method no longer exists. My team has implemented an extension
> of
> >>>>>> WebappLoader that looked like this:
> >>>>>>
> >>>>>>
> >> http://cp.mcafee.com/d/1jWVIq3zqb2rzydPhOCYrKrhKCqenTzhOe7cCQrFCzBZUQsL
> >>>>>>
> >> 9ICQrFCzBZUQszxP1J6WpEVvd7aabPxLURrFUalAv3UYKrlAv3UYKrKXHXRTT-LPz5TCnA-
> >>>>>>
> >> LsKyev7szsQsIFICzBzBHEShhlKYPOEuvkzaT0QSyrjdTdTdAVPmEBCjGHrpZGSS9_M079R
> >>>>>>
> >> lJIOUXHBQaSPlFo01PlJIj_brfjVgT3WWxYs0nO6Hb1mKEv7wsrrFYq5U_dKc2WrWr9EVjb
> >>>>>> _6HtfelAv3UYK2FRlJI-
> >>>>>>
> >> Rrr4_U02rs7e3zpFr1dlrrdUQKCy01iuPd41flBLxW1EwDkQg0bV3lBwHnkfzSE80LRGQBe
> >>>>>> IiNEEd598S-UrI1Lf5-sL
> >>>>>>
> http://cp.mcafee.com/d/2DRPoAd3hJ5xdNN6VEVjudTdETjd7bXNEV73CjqdQPhO-
> >>>>>> YqenASjqdQPhO-
> >>>>>>
> >> YqehMVwSztcQsLCzB55VMTYqJQY5aOfxYundGOfxYundTtRZWXX_nVNyXPbOvnKnh7fzKhK
> >>>>>> qemkSjhONORQr8EGTupVkffGhBrwqrjdFCXCXCOsVHkiP9RlJI-
> >>>>>>
> >> Rrr4_U03AWGSSptXHBQaSPlFo01PlJIj_brfjVgT3WWxYs0nO6Hb1mKEv7wsrrFYq5U_dKc
> >>>>>> 2WrWr9EVjb_6HtfelAv3UYK2FRlJI-
> >>>>>>
> >> Rrr4_U02rs7e3zpFr1dlrrdUQKCy01iuPd41flBLxW1EwDkQg0bV3lBwHnkfzSE80LRGQBe
> >>>>>> IiNEEd598S-UrHrI5
> >>>>>>
> >>>>>>    @Override
> >>>>>>    protected void startInternal() throws LifecycleException {
> >>>>>>        // validate the context, which is used for debugging messages
> >>>>>>        Context context;
> >>>>>>        {
> >>>>>>            Container container = getContainer();
> >>>>>>            if (container == null) {
> >>>>>>                throw new LifecycleException("Container is null?!");
> >>>>>>            }
> >>>>>>            if (!(container instanceof Context)) {
> >>>>>>                throw new LifecycleException("Container is not an
> >>>>>> instance of Context?!");
> >>>>>>            }
> >>>>>>            context = (Context) container;
> >>>>>>        }
> >>>>>>
> >>>>>>        if (ENVIRONMENT_ROOT != null && ENVIRONMENT_ROOT.length() >
> 0)
> >> {
> >>>>>>            // validate targetPackage
> >>>>>>            if (null == targetPackage) {
> >>>>>>                throw new LifecycleException(
> >>>>>>                        "Missing required Loader attribute
> >>>>>> \"targetPackage\" in Context configuration " +
> >>>>>>                                context.getConfigFile());
> >>>>>>            }
> >>>>>>
> >>>>>>            try {
> >>>>>>                // Excluded jars are those already pulled in by
> tomcat.
> >>>>>>                Set<String> allExcludedJars = getAllExcludedJars();
> >>>>>>                Set<String> reallyExcludedJars = new
> HashSet<String>();
> >>>>>>                // add JARs from target package as "repositories"
> >>>>>>                // getPackageClasspath finds the list of jars I want
> to
> >>>>>> include for this webapp.
> >>>>>>                for (String jar :
> getPackageClasspath(targetPackage)) {
> >>>>>>                    File file = new File(ENVIRONMENT_ROOT, jar);
> >>>>>>                    // skip bad and unwanted JARs
> >>>>>>                    if (allExcludedJars.contains(jar) ||
> >> isBadJar(file))
> >>>>>> {
> >>>>>>                        reallyExcludedJars.add(jar);
> >>>>>>                    } else {
> >>>>>>                        // TODO: HOW TO FIX ME??
> >>>>>>                        addRepository(file.toURI().toString());
> >>>>>>                    }
> >>>>>>                }
> >>>>>>                log.info("Context path \"" + context.getPath() + "\"
> >>>>>> excluding JARs: " + reallyExcludedJars);
> >>>>>>            } catch (IOException e) {
> >>>>>>                throw new LifecycleException(
> >>>>>>                        "Problem setting classpath for context path
> \""
> >>>>>> + context.getPath() + "\"",
> >>>>>>                        e);
> >>>>>>            }
> >>>>>>
> >>>>>>            // getRepositoriesString() has been renamed to
> >>>>>> getLoaderRepositoriesString()...
> >>>>>>            log.info("Context path \"" + context.getPath() + "\"
> using
> >>>>>> classpath: " + getRepositoriesString());
> >>>>>>        } else {
> >>>>>>            log.warning("MyWebappLoader seems to be used outside of
> my
> >>>>>> environment. Delegating to parent.");
> >>>>>>        }
> >>>>>>
> >>>>>>        super.startInternal();
> >>>>>>    }
> >>>>>>
> >>>>>> Can the community help me figure out how to upgrade this for tomcat
> 8?
> >>>>>
> >>>>> JarResourceSet jrs = new JarResourceSet(Context.getResources(), "/",
> >>>> file.getAbsolutePath(), "/");
> >>>>> Context.getResources().addPostResources(jrs);
> >>>>
> >>>> Bad idea. That will mount the contents of the JAR at the root of the
> web
> >>>> application.
> >>>>
> >>>> Mark
> >>>>
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >>>> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>>>
> >>>>
> >>>
> >>>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> >> For additional commands, e-mail: users-h...@tomcat.apache.org
> >>
> >>
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: users-h...@tomcat.apache.org
>
>


--

Reply via email to