Running and stopping a batch script from Java

I have a requirement in whcih I need to run a batch script which in turn calls another java progam. Now I am using following code which successfully calls batch script and consequently the batch script calls the another java program and batch script exits.
public static void main(String[] args)
     try {
          Runtime.getRuntime().exec("cmd /c start  c:\\temp\\test.bat" );
     } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
     }Now I am developing this a a client-server application on socket programming. Now after some time I need to stop that java program started by batch script. How can I do it? As per my understanding the call "Runtime.getRuntime().exec("cmd /c start c:\\temp\\test.bat" );" kick starts two processes. One the cmd command and another java command ran by test.bat. Now the how to relate the cmd window to the java cmd started by test.bat and how can i send a ctrl+C command to this cmd window so as to close the underlying running java program.
Please advise.
Thanks

Hi Steve,
Well, I'm having a quite different opinion on this: I would consider such an appraoch not nice but rather dirty...
If you want users to execute (MaxL) commands against essbase but also would like to avoid installing the client software on each client box I would recommand using web services.
User opens a browser, press a button, button (on the server side) calls a cmd (or sh) that calls the MaxL shell (on the server) that executes your maxl scripts.
We have implemented this in two ways:
1. over IIS (the older version, some years ago - but still running)
2. over Apex (ever heard about it?) You need a Oracle DB where Apex is installed an running (latest Version is 4.1.1 and you should not use an older) and you need to install the essbase client software on the machine where th Oracle DB resides - However you only need to install it one time...
If you only want to use the Oracle DB as a relais station (for you Apex Application and Web calls) you can simply install an XE on your essbase server and you have the prerequisites to get it work.
Maybe it helps somehow.
Regards
Andre

Similar Messages

  • Start and Stop a Windows Service From Java

    Is there any way to start and stop a Windows service from Java? The only post I found on it (http://forum.java.sun.com/thread.jspa?threadID=647509) had a link to one of the many aps that allow Java programs to be services, which is not what I am interested in doing.
    I am attempting to get data from performance counters from the Windows Performance Monitor into a Java ap without using JNI. I can get the data from C++ or a .net language pretty easily and was going to create a service that would listen for socket requests and feed back the data. However, I'd like to start and stop that service when my java code starts and stops. Is this possible? Would it make more sense to just use a .exe and Runtime.exec()?

    If it's only to start or stop a service then you could use the net command without any need for JNI.import java.io.*;
    public class MsWinSvc {
        static final String CMD_START = "cmd /c net start \"";
        static final String CMD_STOP = "cmd /c net stop \"";
        public static int startService(String serviceName) throws Exception {
            return execCmd(CMD_START + serviceName + "\"");
        public static int stopService(String serviceName) throws Exception {
            return execCmd(CMD_STOP + serviceName + "\"");
        static int execCmd(String cmdLine) throws Exception {
            Process process = Runtime.getRuntime().exec(cmdLine);
            StreamPumper outPumper = new StreamPumper(process.getInputStream(), System.out);
            StreamPumper errPumper = new StreamPumper(process.getErrorStream(), System.err);
            outPumper.start();
            errPumper.start();
            process.waitFor();
            outPumper.join();
            errPumper.join();
            return process.exitValue();
        static class StreamPumper extends Thread {       
            private InputStream is;
            private PrintStream os;
            public StreamPumper(InputStream is, PrintStream os) {
                this.is = is;
                this.os = os;
            public void run() {
                try {
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    String line;
                    while ((line = br.readLine()) != null)
                        os.println(line);
                catch (Exception e) {
                    e.printStackTrace();
    }Regards

  • Start and stop the Communication channel from Java Mapping

    How to start and stop the Communication channel from Java Mapping in XI 3.0
    Scenario  PI - > MQ -> Third Party web application 
    Web application is down and then Communication channels are stop manually .  
    We need to automate this process,
    MQ Solution - Trigger will be set in MQ which will be called when web application is stopped
    Trigger will send u201CSTOP u201C message to PI
    How to configure PI scenario to stop different com channels when this message received ?

    check this link: http://help.sap.com/saphelp_nw04/helpdata/EN/45/0c86aab4d14dece10000000a11466f/frameset.htm
    make sure that MQ send http request to PI. i dont think a configuration scenario is required in PI. Only roles should be enabled with proper user provided to MQ team.
    However, for security reasons, you can configure a scenario if you dont want to expose PI infrastructure directly to 3rd parties.

  • Running sqlplus scripts from Java code?

    hi
    I need to programmatically run sqlplus scripts from Java code on a machine that doesn't have sqlplus installed.
    Is there any Java class library available for doing this?

    The Ant approach could probably work for me, thanks for the tip.
    The setup seems rather complex however, given the simplicity of the task. I would prefer just running a Java based SQL*Plus from in a separate process or doing this via an API that would allow me to run SQL*Plus scripts (parse script, substitute variables, run statements).
    Oracle SQL Developer v1.1 appears to include an API that does exactly this.
    The ScriptParser, Substitution and SQLPLUS classes in the oracle.dbtools.raptor.scriptrunner package (oracle.sqldeveloper.jar) seem to do just what I need based on my tests.
    Can I use these classes for this purpose in my application? Is repackaging allowed?
    Does Oracle have any plans for releasing this sort of functionality separately e.g. as part of the Instant Client?

  • Every time I sign into my Macbook, I get an error message from Automator; "The data couldn't be read because it has been corrupted.". I have never created an Automator workflow. How do I find out what Automator is trying to run and stop it?

    Every time I sign into my Macbook, I get an error message from Automator; "The data couldn't be read because it has been corrupted.". I have never created an Automator workflow. How do I find out what Automator is trying to run and stop it?

    Maybe it's set as a login item:
    - System Preferences: Users and Groups:
    - Highlight your user account in the left pane/list
    - Click "Login" tab at the top.
    See if you have an Automater action on the list
    - Note, you can select it, then right-click, and can then select "Reveal in Finder". That way you might have an idea what installed it.

  • Run a UNIX Script from java

    Hi,
    how can i run a unix script from java application. This java application is on windows.
    How can i do this.
    thanks,

    Hi,
    how can i run a unix script from java application.
    This java application is on windows.
    So I think it's safe to assume that the target script is on a remote unix server.
    Take a look at http://sourceforge.net/projects/sshtools/

  • I need to call a batch file from java and pass arguments to that Batch file

    Hi,
    I need to call a batch file from java and pass arguments to that Batch file.
    For example say: The batch file(test.bat) contains this command: mkdir
    I need to pass the name of the directory to the batch file as an argument from My Java program.
    Runtime.getRuntime().exec("cmd /c start test.bat");
    How to pass argument to the .bat file from Java now ?
    regards,
    Krish
    Edited by: Krish4Java on Oct 17, 2007 2:47 PM

    Hi Turing,
    I am able to pass the argument directly but unable to pass as a String.
    For example:
    Runtime.getRuntime().exec("cmd /c start test.bat sample ");
    When I pass it as a value sample, I am able to receive this value sample in the batch file. Do you know how to pass a String ?
    String s1="sample";
    Runtime.getRuntime().exec("cmd /c start test.bat s1 ");
    s1 gets passed here instead of value sample to the batch file.
    Pls let me know if you have a solution.
    Thanks,
    Krish

  • Executing batch file from Java stored procedure hang

    Dears,
    I'm using the following code to execute batch file from Java Stored procedure, which is working fine from Java IDE JDeveloper 10.1.3.4.
    public static String runFile(String drive)
    String result = "";
    String content = "echo off\n" + "vol " + drive + ": | find /i \"Serial Number is\"";
    try {
    File directory = new File(drive + ":");
    File file = File.createTempFile("bb1", ".bat", directory);
    file.deleteOnExit();
    FileWriter fw = new java.io.FileWriter(file);
    fw.write(content);
    fw.close();
    // The next line is the command causing the problem
    Process p = Runtime.getRuntime().exec("cmd.exe /c " + file.getPath());
    BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while ((line = input.readLine()) != null)
    result += line;
    input.close();
    file.delete();
    result = result.substring( result.lastIndexOf( ' ' )).trim();
    } catch (Exception e) {
    e.printStackTrace();
    result = e.getClass().getName() + " : " + e.getMessage();
    return result;
    The above code is used in getting the volume of a drive on windows, something like "80EC-C230"
    I gave the SYSTEM schema the required privilege to execute the code.
    EXEC DBMS_JAVA.grant_permission('SYSTEM', 'java.io.FilePermission', '<<ALL FILES>>', 'read ,write, execute, delete');
    EXEC DBMS_JAVA.grant_permission('SYSTEM', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
    EXEC DBMS_JAVA.grant_permission('SYSTEM', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
    GRANT JAVAUSERPRIV TO SYSTEM;
    I have used the following to load the class in Oracle 9ir2 DB:
    loadjava -u [system/******@orcl|mailto:system/******@orcl] -v -resolve C:\Server\src\net\dev\Util.java
    CREATE FUNCTION A1(drive IN VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'net.dev.Util.a1(java.lang.String) return java.lang.String';
    variable serial1 varchar2(1000);
    call A1( 'C' ) into :serial1;
    The problem that it hangs when I execute the call to the function (I have indicated the line causing the problem in a comment in the code).
    I have seen similar problems on other forums, but no solution posted
    [http://oracle.ittoolbox.com/groups/technical-functional/oracle-jdeveloper-l/run-an-exe-file-using-oracle-database-trigger-1567662]
    I have posted this in JDeveloper forum ([t-853821]) but suggested to post for forum in DB.
    Can anyne help?

    Dear Peter,
    You are totally right, I got this as mistake copy paste. I'm just having a Java utility for running external files outside Oracle DB, this is the method runFile()
    I'm passing it the content of script and names of file to be created on the fly and executed then deleted, sorry for the mistake in creating caller function.
    The main point, how I claim that the line in code where creating external process is the problem. I have tried the code with commenting this line and it was working ok, I made this to make sure of the permission required that I need to give to the schema passing security permission problems.
    The function script is running perfect if I'm executing vbs script outside Oracle using something like "cscript //NoLogo aaa1.vbs", but when I use the command line the call just never returns to me "cmd.exe /c bb1.bat".
    where content of bb1.bat as follows:
    echo off
    vol C: | find /i "Serial Number is"
    The above batch file just get the serial number of hard drive assigned when windows formatted HD.
    Same code runs outside Oracle just fine, but inside Oracle doesn't return if I exectued the following:
    variable serial1 varchar2(1000);
    call A1( 'C' ) into :serial1;
    Never returns
    Thanks for tracing teh issue to that details ;) hope you coul help.

  • How to hide user id and password in batch scripts

    Hi,
    Can some one help me to hide the user id and password in batch scripts that used to automate Export and Action script execution process.
    Context : In my project client doesn't want display user id and password hence they are looking for secured way to hide them.
    Thanks for your answer in advance.
    Regards,
    Sainath.

    Sainath,
    Referring admin guide as mentioned by Craig is good option.
    Let me give you few steps that I did in one of my projects.
    Open command prompt and navigate to the path "C:\Oracle\Middleware\EPMSystem11R1\products\DataRelationshipManagement\client\batch-client".. here you can see many see other utilities as well.
    drm-batch-client-credentials.exe is the one used to encrypt the userid and password.
    open this in command prompt and then choose the application to which you want to encrypt the password.
    then remove userid and password from batch script then run it... it does what you want

  • Is it possible to start a batch script from Sharepoint?

    Hi,
    I want to start a batch script from Sharepoint which executes some sql queries.
    Can someone guide me how to start a batch (.bat) script in SP?

    Yes and no.  If your script is scheduled to run by some other process (which it should be, because it very likely has  to be run as some account and not the web app account), you should set the script to look for a setting in a sharepoint list,
    if that setting tells the script to run, then it does.  This means that, yes, you can start a batch script from sharepoint.
    To be able to execute a script directly from sharepoint...no.
    Chris Givens CEO, Architecting Connected Systems
    Blog Twitter

  • Initiating batch scripts from Maxl Script Editor in Admin Console??

    Guys,
    Is it possible to initiate batch scripts from Maxl script editor in Admin Console.
    I dont want to automate the scripts as my data loading process can happen at any time.
    Thanks in advance
    A

    Hi A,
    I'm not sure what you're asking? Do you want to run a batch of Maxl scripts, or a batch file, or a single Maxl Script? Why do you choose to use the Admin console to do this? Could you run what you're trying to run in batch from the command line?
    Executing MaxL and MDX Scripts
    To execute a MaxL script or an MDX script:
    Open or create the script.
    From the server drop-down list on the toolbar, select the Analytic Server to execute the script against.
    The drop-down list contains only Analytic Servers that are displayed in your Enterprise View. For more information about connections, see Connecting to Analytic Servers in MaxL and MDX Script Editors.
    Specify how errors should be handled during execution. See Setting MaxL and MDX Execution Options.
    Specify how you want results to be displayed in the Results tab. See Viewing MaxL and MDX Results.
    If the script contains variables, specify how undefined variables are resolved during execution. See Resolving Undefined Variables.
    To execute the entire script, right-click and select Execute from the pop-up menu.
    To execute only part of the script, highlight the statement or statements that you want to execute, right-click, and select Execute from the pop-up menu.
    The script executes against the specified Analytic Server, and the results are displayed in the Results panel.Regards,
    Robb Salzmann

  • Calling batch script from Release Management for Visual Studio 2013.

    Hi All,
    I need some guidance on executing\ calling a batch script from Release Management for Visual Studio 2013 as one of the activity during release and also let me know whether the tool provides the log of this kind of execution.
    Thanks in Advance,
    Manoj

    Hi Manoj,
    To run batch script during release process when use Release Management for Visual Studio Online, you can use Command Line Runner" tool which allow user to run comtom command line. You can check in by clicking Inventory tab then tools in Release Management
    client. You can check this
    page for more information about release manage tools to deploy an app. Thanks for your understanding.
    Best regards,
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • Invoking a bash shell script from Java code

    Hi All
    I am trying to invoke a Bash shell script using java code. The arguments required are "source wmGenPatch <source dir> <destination dir> no_reverse.
    in the code I have specified the arguments considering the cannonical paths of the files as the code may run on Unix or windows platform.
    I am getting a error while invoking Runtime.getRuntime().exec(args). The error is as follows :
    "The Error Occurred is: CreateProcess: source D:\Package4.0\workspace\DiffEngineScripts\v4a02\wmGenPatch D:\Package4.0\workspace\fromImageFilesDir\ D:\Package4.0\workspace\toImageFilesDir\ no_reverse error=2"
    It seems that error=2 indicates that the 'file not found' exception. But i can see the directories referred to in the error at place in the workspace.
    Kindly advice.
    Thanks in advance.

    Hi All
    I am pretty new to invoking bash shell scripts from java and not sure if i am progressing in right direction.
    The piece of code tried by me is as follows
    try {
                   currentDir = f.getCanonicalPath();
              } catch (IOException e) {
              if (currentDir.contains("/")) {
                   separator = "/";
              } else {
                   separator = "\\";
              String args[] = new String[7];
              args[0] = "/bin/sh";
              args[1] = "-c";
              args[2] = "source";
              args[3] = currentDir + separator + "DiffEngineScripts" + separator
                        + "v4a02" + separator + "wmGenPatch";
              args[4] = sourceFileAdd;
              args[5] = destFileAdd;
              if (isReverseDeltaRequired) {
                   args[6] = "reverse";
              } else {
                   args[6] = "no_reverse";
              try {
                   Process xyz = Runtime.getRuntime().exec(args);                              
                   InputStream result = xyz.getInputStream();
                   InputStreamReader isr = new InputStreamReader(result);
                   BufferedReader br = new BufferedReader(isr);
                   String line = null;
                   while ( (line = br.readLine()) != null)
                        System.out.println(line);
                   int exitVal = xyz.waitFor();
                   System.out.println("Leaving Testrun.java");
              } catch (Throwable t) {
                   t.printStackTrace();               
    and on running the same i am getting Java.io.IOException with the stack trace
    java.io.IOException: CreateProcess: \bin\sh -c source D:\Package4.0\workspace\DiffEngineScripts\v4a02\wmGenPatch D:\Package4.0\workspace\fromImageFilesDir\ D:\Package4.0\workspace\toImageFilesDir\ no_reverse error=3
    kindly advice
    Thanks in advance

  • Call PERL script from JAVA

    I am facing a problem in running a PERL script in JAVA in UNIX box..
    I am able to call ther perlscript.
    Perl script has
    #! /usr/local/bin/perl
    print "\nEnter Your Name :";
    $name = <>;
    print "\nYour Name is : $name\n";
    exit 0;
    Perl script request for the INPUT(name) .
    My Java program is
    File perlfile = new File("test.pl");
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec("perl "+perlfile);
    Here is the problem tat IT IS says error =2 ..What has to be the solution so tat i can CALL PERL SCRIPT as similiar to running it separatly in prompt { >perl test.pl }
    PLEASE help me on this....

    In the PERL SCRIPT (test.pl)
    LINE 1 : #! /usr/local/bin/perl
    LINE 2 : print "\nEnter Your Name :"; .
    LINE 3 : $name = <>;
    LINE 4 : print "\nYour Name is : $name\n";
    LINE 5 : exit 0;
    When i run this script in perl test.pl in prompt (UNIX BOX), i am gettin the request for name "Enter Your Name:____ " but when i call this script from Java it doesn't request for name and moreover the process doesnt ends (use ctrl+c to come out of the process).When i come out forcefully it shows the ERROR=2.
    My requirement is such tat need to call a PERL SCRIPT from java so tat java process give the control to PERL script and it will continue the process..
    Sample scenario:
    Java move a file and store it in a new FOLDER
    MY perl script will read the file in new FOLDER.
    here the perl script will get the file name for processing... My issue comes here .$name is not be prompted while calling thro java..

  • Excute unix script from java.

    Hi need to excute unix script from java application.
    My code is:
    public class Test
    public static void main(String args[])
         try{
         p = Runtime.getRuntime().exec("./qfe0"); //qfe0 is the name of the script.
    p.waitFor();
    catch(Exception e)
    e.printStackTrace();
    My problem is that using the waitFor() statement stuck the the script. if i don't use the waitFor() it works good but then i don't know when the script is finished.
    Any idea?

    The problem is likely to be that you script is either waiting for input or has filled the stdout buffer and you are not emptying it. Search this forum for this as its been answered many times before.

Maybe you are looking for

  • Hard Drive no longer recognized. Input Output Error.

    Recently my iBook G4 1.0 Ghz, has stopped recognizing my hard drive. I have taken the hard drive out of the computer, erased it 35 times and reinstalled OSX 10.4 with all the updates. The hard drive runs very smooth. No clicks or problems associated

  • Display empty fields in between the output, urgent

    hi i need to display some empty fields in the output txt file, in between teh normal database fields i am displaying for eg if first field is f1 (1-10) second is f2 (11-35) third field is empty i need todisplay as (12-45) and again f4 as (13-60) so o

  • Table name which contains status profile of a given process order

    Hi All, I created one process order and assigned a status profile for it. I need to know which table will contain both these values. Ex: If i give process order as an input, then it gives status profile as an output.

  • How many software components can create maintenance requests/notifications? So far, I count three...

    These are all in EA-PLM ILM_UI 'Basic Maintenance Processing: User Interface' RPLM_QIMT 'Quality Inspector and Maintenance Technician Roles' EAM_SIMPL'Simplification Project in Enterprise Asset Management' I can find portal business packages for iVie

  • Ralink 2860 Wireless Card

    Hello, with my Ralink 2860 my wireless device has always been identified as ra0 instead of wlan0 and it worked fine. Well with a recent kernel update, my device got switched to being identified as wlan0, and now I have problems connecting to networks