execution of clearcase' cleartool shell from java code

execution of clearcase' cleartool shell from java code does not work
gmeltsinAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

CEHJCommented:
Try it using this:


import java.io.*;

public class RunAsync {

    public static void main(String args[]) {

     try {

        if(args.length < 1) {
          System.out.println("Usage: java RunAsync <command string>");
          System.exit(-1);
        }
        Process pro = null;
        if (args.length > 1) {
          pro = Runtime.getRuntime().exec(args);
        }
        else {
          pro = Runtime.getRuntime().exec(args[0]);
        }
        InputStream error = pro.getErrorStream();
        InputStream output = pro.getInputStream();
        Thread err = new Thread(new OutErrReader(error));
        Thread out = new Thread(new OutErrReader(output));
        out.start();
        err.start();
        pro.waitFor();
     }
     catch(java.io.IOException e) {
       e.printStackTrace();
     }
     catch(java.lang.InterruptedException e) {
       e.printStackTrace();
     }

    }

    static class OutErrReader implements Runnable {
      InputStream is;

      public OutErrReader(InputStream is) {
        this.is = is;
      }

      public void run() {
        try {
          BufferedReader in = new BufferedReader(new InputStreamReader(is));
          String temp = null;
          while((temp = in.readLine()) != null) {
             System.out.println(temp);
          }
          is.close();
        }
        catch(Exception e) {
          e.printStackTrace();
        }
      }
    }
}
0
gmeltsinAuthor Commented:
clearcase's cleartool expects clearcase view to be set prior to using basic functions(checking ,checkout, etc).
so i need to execute two commands
1. Runtime.getRuntime().exec("cleartool setview view_name");  - sets the view
2. Runtime.getRuntime().exec("cleartool co file_name"); - checksout the file

The problem is that second process does not recognize what was done in first
Second process does not 'see' that the view was set
thanks
0
CEHJCommented:
I don't see how this could be any different to how it's executed at the command line.

Are you sure the first is succeeding? You can always change

>>pro.waitFor();

to

System.out.println("Process return value: " + pro.waitFor());

to see
0
Become a Microsoft Certified Solutions Expert

This course teaches how to install and configure Windows Server 2012 R2.  It is the first step on your path to becoming a Microsoft Certified Solutions Expert (MCSE).

gmeltsinAuthor Commented:
no return value
pro.waitFor() hangs after Runtime.getRuntime().exec("cleartool setview view_name"),
but the same command is fine from command line
0
CEHJCommented:
>>pro.waitFor() hangs ...

and are you fully using the code i posted?
0
gmeltsinAuthor Commented:
when i am using threads the app stops working when i create them.
probably because it's inside struts.
without threads it hangs at pro.waitFor() level
0
CEHJCommented:
>>the app stops working when i create them

What do you mean by that? Don't see it should be a Struts-related problem. Maybe your container...
0
CEHJCommented:
Of course it's conceivable that your container's security policy disallows the creating of processes.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
gmeltsinAuthor Commented:
but i am able  to run other processes...
it seems that the problem is clearcase's cleartool command. it takes the process to the different shell and never exists from there. That's why the app hangs
Anyway, thanks for help. the points are rightfully yours
0
CEHJCommented:
>>it takes the process to the different shell and never exists from there.

Well I don't know what you mean by the above, but thanks anyway.
0
ReddgumCommented:


"Runtime.getRuntime().exec("cleartool setview view_name");  - sets the view"

The CT setview command only works in Unix, and from what I can tell from your code, each incantation of Runtime.getRuntime().exec actually either runs a new shell or a new thread. If you are attempting to run this code from a Windows platform, "setview" will fail.

Also,

"Runtime.getRuntime().exec("cleartool co file_name"); - checksout the file"

Sure, but then the process will definitely hang WAITING FOR USER INPUT, as you left out the
-nc flag so that the process would not ask for comments for the check-in. :-)

-Just strolling by amusing myself with a little reading.

Cheers,
         -Mike




0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java

From novice to tech pro — start learning today.