Re: Stand alone usage - early exit of application

2015-07-20 Thread Krzysztof Harpula
Hello,

The use case is different.

I have an eclipse project. Within eclipse IDE I use IvyDE. However
during development sometimes I want to start my application outside of
IDE (due to Eclipse performance issues). I do it by a batch file
(Windows). From documentation I saw that it is possible to use Ivy not
only as part of the build but also as the application launcher from a
batch file. See the link to Ivy doc bellow.

http://ant.apache.org/ivy/history/2.0.0/standalone.html

So I wrote a batch file which starts my application using Ivy launcher
which offers great possibility to resolve all dependencies at the moment
of start using the same ivy.xml .
*
**java -jar ivy-2.0.4.jar -ivy ivy.xml -confs default -main
com.my.MainClass -cp .\classes*

However I noticed that my application stared using Ivy launcher
terminates prematurely. I looked at the source code of Ivy launcher, and
i noticed that the launcher starts the application using specified class
and its main method, however as soon as the main of the called class
ends Ivy launcher *calls System.exit() which terminates the VM.* My 
application is a mulch-threaded server an *my main method  just sets up
and starts up the application and exits.**The application lives as long
as the last non-daemon thread terminates. **
**
*The assumption made by Ive designers/developers that each application
should terminate as soon as when its main terminates is wrong. In Java
the application terminates when its last non-daemon thread stops. In
present version using Ivy as an application launcher is not possible
because*it just kills the VM much too early*. See the source code from
Ivy launcher (this comes from sources of Ivy: *org.apache.ivy.Main*).
*In bold you can see the problematic line of code which kill s the VM.*
*I believe that it could be removed making Ivy launcher usable.*

  public static void main(String[] args) throws Exception {
 CommandLineParser parser = getParser();
 try {
 run(parser, args);
*System.exit(0); *
 } catch (ParseException ex) {
 System.err.println(ex.getMessage());
 usage(parser, false);
 System.exit(1);
 }
 }


I would appreciate if this could be fixed.

Best regards and greetings.


Re: Stand alone usage - early exit of application

2015-07-19 Thread Jaikiran Pai
If I understand it correctly, you are embedding Ivy within your 
application and using the Main class as the starting point to embed Ivy? 
I don't know if the Main class is meant to be used in that way.


-Jaikiran
On Friday 17 July 2015 01:24 PM, Krzysztof Harpula wrote:

Hi, I am starting to use Ivy. I wanted to create a batch file which
launches my application using stand alone ivy launcher. I noticed that
my application starts and then immediately terminates. I checked the
sources of Ivy launcher and I van see the following piece of code:

  public static void main(String[] args) throws Exception {
 CommandLineParser parser = getParser();
 try {
 run(parser, args);
 System.exit(0);
 } catch (ParseException ex) {
 System.err.println(ex.getMessage());
 usage(parser, false);
 System.exit(1);
 }
 }

The reason of early exit of application is the call to System.exit(0).
It does not seem to make any sense here. I try to start a server
application where the main thread just starts all up and then it dies.
The rest is controlled by IO threads listening on sockets. The
application ends when last non daemon thread exits. With present
implementation of Ivy launcher, I can not use it because it effectively
kills my application. Could you please fix it?