Hi,

I have few more doubts regarding this:

I am reading only the error stream but not the output stream ( for the 
channelExec) and still its working fine. So is it mandatory that I have to read 
both the streams every time?
What about sftp in jsch? Because I think iam facing the same problem related to 
sftp. The file is properly transferred but the same reading method (which 
worked properly for exec channel) isn't working here!..what am I missing?

Please advise.

Regards,
P.V.R.Kartik

On Wed, Nov 17, 2010 at 1:32 PM,  <[email protected]> wrote:
> Hi,
>
> Thanks you very much. This solved my problem. I have written separate methods 
> for error and input streams and calling one after another. As you suggested 
> when I modified my code and joined them the control is coming back to jsch 
> after the command execution. Just one more doubt. I have to also use other 
> oracle commands such as imp. Do all the oracle commands write to err stream?
>
> Regards,
> P.V.R.Kartik
>
> -----Original Message-----
> From: Keith Alan Richardson [mailto:[email protected]]
> Sent: Wednesday, November 17, 2010 4:13 PM
> To: Kartik Pullabhotla v r (WT01 - GMT-Telecom Equipment)
> Cc: [email protected]
> Subject: Re: FW: [JSch-users] Oracle exp command with jsch
>
> Your code is reading only one input stream (in variable) .  Based on later 
> emails you sent, I believe that is standard out.
>
> Oracle's exp command writes exclusively to stderr.  You must read both 
> streams or your application will block.  Below is some sample code.
> (please note: we suspect a deadlock in our application when reading 
> large output of 17MB.  The code below may contain that bug so use 
> as-is at your own risk)
>
>
>                        InputStream in = channel.getInputStream();
>
>                        channel.connect();
>
>                        InputStream err_in = 
> channel.getExtInputStream();
>
>                        byte[] tmp = new byte[1024];
>
>                        while (true) {
>
>                                while (in.available() > 0) {
>                                        int i = in.read(tmp, 0, 1024);
>                                        if (i < 0)
>                                                break;
>                                        stdOut += new String(tmp, 0, 
> i);
>                                }
>
>                                while (err_in.available() > 0) {
>                                        int i = err_in.read(tmp, 0, 
> 1024);
>                                        if (i < 0)
>                                                break;
>                                        stdErr += new String(tmp, 0, 
> i);
>                                }
>
>                                if (channel.isClosed()) {
>                                        break;
>                                }
>
>                                Thread.sleep(500);
>
>                        }
>
>
> Thanks,
> Keith
>
> On Tue, Nov 16, 2010 at 11:10 AM,  <[email protected]> wrote:
>>
>> (Resending for the group)..
>>
>> Hi Alan,
>>
>> Thanks for the reply.
>>
>> Yes, I am reading both output and error channel. I have run the 
>> following commands in the server and both print fine, i.e., all the 
>> characters are printed. Moreover i could observe in the code that the 
>> input buffer has no content in it AND the channel is never closed.
>> Please note my source code below which is just exactly as suggested in the 
>> example files.
>>
>> StringBuilder tmpBuf = new StringBuilder();
>>   byte[] tmp = new byte[1024];
>>   while (true) {
>>    while (in.available() > 0) {
>>     int i = in.read(tmp, 0, 1024);
>>     if (i < 0)
>>      break;
>>     String resp = new String(tmp, 0, i);
>>     tmpBuf.append(resp);
>>    }
>>    if (channel.isClosed()) {
>>     in.close();
>>     break;
>>    }
>>    //for debug, if miss isClosed()
>>          if( !channel.isClosed() && channel.getExitStatus() == 0 ){
>>            System.out.println("before close exit-status changed!" );
>>          }
>>   }
>>
>> Here, the inputstream 'in', after few cycles, is returning no 
>> character (in.available < 0) and channel.isClosed() is never true.
>>
>> Please advise.
>>
>> Regards,
>> P.V.R.Kartik
>> ________________________________
>> From: Keith Alan Richardson [mailto:[email protected]]
>> Sent: Tuesday, November 16, 2010 1:14 PM
>> To: Kartik Pullabhotla v r (WT01 - GMT-Telecom Equipment)
>> Cc: [email protected]
>> Subject: Re: [JSch-users] Oracle exp command with jsch
>>
>> Are you reading the channel stdout and stderr?  One or both buffers 
>> may fill up causing deadlock
>>
>> SQL*Plus may not produce enough output to fill the buffers but exp might.
>>
>> You can test if this is your problem by running the following commands :
>>
>> # print 1MB to stdout
>>
>> perl -e 'print "x"x(1*1024*1024)'
>>
>> # print 1MB to sterr
>>
>> perl -e 'print STDERR "x"x(1*1024*1024)'
>>
>>  On 16 Nov 2010 09:00, <[email protected]> wrote:
>>
>>
>> (Resending this since i haven't received any acknowlegement or the
>> copy)
>>
>>
>> Hi Team,
>>
>> We have a project here whose primary purpose is to call a script on a 
>> unix server from...
>>
>> ---------------------------------------------------------------------
>> -
>> -------- Beautiful is writing same markup. Internet Explorer 9 
>> supports standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 
>> & L3.
>> Spend less time writing and  rewriting code and more time creating 
>> great experiences on the web. Be a part of the beta today 
>> http://p.sf.net/sfu/msIE9-sfdev2dev
>> _______________________________________________
>> JSch-users mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/jsch-users
>>
>> Please do not print this email unless it is absolutely necessary.
>>
>> The information contained in this electronic message and any 
>> attachments to this message are intended for the exclusive use of the
>> addressee(s) and may contain proprietary, confidential or privileged 
>> information. If you are not the intended recipient, you should not 
>> disseminate, distribute or copy this e-mail. Please notify the sender 
>> immediately and destroy all copies of this message and any attachments.
>>
>> WARNING: Computer viruses can be transmitted via email. The recipient 
>> should check this email and any attachments for the presence of 
>> viruses. The company accepts no liability for any damage caused by 
>> any virus transmitted by this email.
>>
>> www.wipro.com
>
> Please do not print this email unless it is absolutely necessary.
>
> The information contained in this electronic message and any attachments to 
> this message are intended for the exclusive use of the addressee(s) and may 
> contain proprietary, confidential or privileged information. If you are not 
> the intended recipient, you should not disseminate, distribute or copy this 
> e-mail. Please notify the sender immediately and destroy all copies of this 
> message and any attachments.
>
> WARNING: Computer viruses can be transmitted via email. The recipient should 
> check this email and any attachments for the presence of viruses. The company 
> accepts no liability for any damage caused by any virus transmitted by this 
> email.
>
> www.wipro.com
>

------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1,  ECMAScript5, and DOM L2 & L3.
Spend less time writing and  rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
_______________________________________________
JSch-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jsch-users

Reply via email to