You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Thomas De Waelheyns (Jira)" <ji...@apache.org> on 2023/02/03 20:41:00 UTC

[jira] [Comment Edited] (DAEMON-453) Add support for wildcard classpath in java mode

    [ https://issues.apache.org/jira/browse/DAEMON-453?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17684023#comment-17684023 ] 

Thomas De Waelheyns edited comment on DAEMON-453 at 2/3/23 8:40 PM:
--------------------------------------------------------------------

Hey all,

 

I have been attempting to make an implementation for this issue. At least for windows at the moment. The branch can be found [here|https://github.com/thomasdewaelheyns/commons-daemon/tree/DAEMON-453-wilcard-param-java-mode]. I'm a bit stuck at the moment. Based on the implementation for the jvm mode I made one for java. I tried adding supports for quote rapping but haven't managed to test it thus far because of a different issue. Namely that the method FindFirstFileW always returns the INVALID_HANDLE_VALUE for relative paths. Absolute paths with a * wild card at the end seem to work fine. 

 
{noformat}
lstrcatW(szJars, L'.jar');
if ((hFind = FindFirstFileW(szJars, &stGlob)) == INVALID_HANDLE_VALUE) {
        /* Find failed
         */
         apxLogWrite(APXLOG_MARK_ERROR "Find file failed");
        return pStr;
    }{noformat}
In my test setup I have the following:

!image-2023-02-03-21-30-22-322.png!

With some logging libraries inside the lib directory.

For the following classpath

 
{noformat}
--Classpath="ServiceTest.jar;logback.xml;lib\*" ^{noformat}
szJars will be equal to a wide char string 'lib*.jar'. With this input the FindFirstFileW does not find anything.

Either I am providing a wrong format or the relative path does not go from the location of where prunsrv.exe is but somewhere else.

My knowledge of c++ is very limited and I'm at my wits end on how to further debug this issue since for jvm mode, relative paths work as expected.

 
{noformat}
if (GetModuleFileNameW(GetModuleHandle(NULL), mh, SIZ_HUGLEN)) {
        GetLongPathNameW(mh, mh, SIZ_HUGLEN);
        apxLogWrite(APXLOG_MARK_DEBUG "Location: '%S'", apxPoolStrdupW(hPool, mh));
    }{noformat}
prints 'C:\...\servicetest\prunsrv.exe' with ... a redacted path which is the correct location.

Thanks for any input.

 

 

 


was (Author: JIRAUSER298820):
Hey all,

 

I have been attempting to make an implementation for this issue. At least for windows at the moment. The branch can be found here. I'm a bit stuck at the moment. Based on the implementation for the jvm mode I made one for java. I tried adding supports for quote rapping but haven't managed to test it thus far because of a different issue. Namely that the method FindFirstFileW always returns the INVALID_HANDLE_VALUE for relative paths. Absolute paths with a * wild card at the end seem to work fine. 

 
{noformat}
lstrcatW(szJars, L'.jar');
if ((hFind = FindFirstFileW(szJars, &stGlob)) == INVALID_HANDLE_VALUE) {
        /* Find failed
         */
         apxLogWrite(APXLOG_MARK_ERROR "Find file failed");
        return pStr;
    }{noformat}
In my test setup I have the following:

!image-2023-02-03-21-30-22-322.png!

With some logging libraries inside the lib directory.

For the following classpath

 
{noformat}
--Classpath="ServiceTest.jar;logback.xml;lib\*" ^{noformat}
szJars will be equal to a wide char string 'lib\*.jar'. With this input the FindFirstFileW does not find anything.

Either I am providing a wrong format or the relative path does not go from the location of where prunsrv.exe is but somewhere else.

My knowledge of c++ is very limited and I'm at my wits end on how to further debug this issue since for jvm mode, relative paths work as expected.

 
{noformat}
if (GetModuleFileNameW(GetModuleHandle(NULL), mh, SIZ_HUGLEN)) {
        GetLongPathNameW(mh, mh, SIZ_HUGLEN);
        apxLogWrite(APXLOG_MARK_DEBUG "Location: '%S'", apxPoolStrdupW(hPool, mh));
    }{noformat}
prints 'C:\...\servicetest\prunsrv.exe' with ... a redacted path which is the correct location.

Thanks for any input.

 

 

 

> Add support for wildcard classpath in java mode
> -----------------------------------------------
>
>                 Key: DAEMON-453
>                 URL: https://issues.apache.org/jira/browse/DAEMON-453
>             Project: Commons Daemon
>          Issue Type: Improvement
>          Components: Procrun
>    Affects Versions: 1.3.3
>            Reporter: Thomas De Waelheyns
>            Priority: Minor
>         Attachments: image-2023-02-03-21-30-22-322.png
>
>
> Classpaths with wildcards are currently supported only in jvm mode of the launcher according to this [mail list|https://lists.apache.org/thread/xz3v6p6xcw8hcp0rm1yt9gd7xg9oryvf]. The jvm mode support was implemented in DAEMON-166.
> Since the code to expand the wildcard to actual references to jar files was already written, wouldn't it make sense to expand this to also include java mode?
>  
> Relevant commits:
> Windows: [https://github.com/apache/commons-daemon/commit/6c0758fc052188dead563e4ce776a5da6e34acb9]
> Unix: [https://github.com/apache/commons-daemon/commit/5997b1355ecc2fe0bcf3608e33195e5c2968931e]
>  
> For windows, in javajni.c, line 915-920 looks like a good place to call the __apxEvalClasspath which expands any wildcard paths into a complete list.
> {noformat}
> if (szClassPath) {
>     p = (LPWSTR)apxPoolAlloc(hPool, (lstrlenW(JAVA_CLASSPATH_W) + lstrlenW(szClassPath)) * sizeof(WCHAR));
>     lstrcpyW(p, JAVA_CLASSPATH_W);
>     lstrcatW(p, szClassPath);
>     (*lppArray)[i++] = p;
> }{noformat}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)