[jcifs] jcifs.smb.SmbException: The system cannot find the path
specified.
Michael B Allen
ioplex at gmail.com
Fri Jun 26 17:09:51 GMT 2009
Ok. Thanks for the follow through.
Mike
On Fri, Jun 26, 2009 at 7:48 AM, jcifsatish<javasatheesh at gmail.com> wrote:
>
> This issue was identified in the applications. It is due to multiple
> instances running for the same application.
> Thank you for all your support.
>
> Michael B Allen wrote:
>>
>> On Tue, Jun 9, 2009 at 11:40 AM, jcifsatish<javasatheesh at gmail.com> wrote:
>>> I am getting issue here could be, due to multi threading, the folder/file
>>> could have been already created due to other thread process. But I do not
>>> understand the meaning of "The system cannot find the path specified"
>>> error
>>> message. Why is it showing this message in case of the file/folder has
>>> been
>>> already created?
>>
>> The createNewFile method just does:
>>
>> close(open0(O_RDWR | O_CREAT | O_EXCL, 0, ATTR_NORMAL, 0), 0L);
>>
>> so the O_CREAT | O_EXCL is sent to the server which is then
>> responsible for *creat*ing the file *excl*usively for the caller and
>> therefore multithreading should not be an issue.
>>
>> That is unless your getSmbFile method is returning an instance that
>> another thread may use. You cannot have multiple threads operating on
>> the same SmbFile instance. I assume your getSmbFile method is
>> ultimately calling "new SmbFile" with each call.
>>
>>> I have seen your other posts for 'The system cannot find the path
>>> specified'
>>> errors. You have mentioned that it is due to IP address conventions and
>>> it
>>> has been resolved in new versions..
>>
>> There are many conditions that can trigger the 'system cannot find the
>> path specified' error. Previous posts about the error are almost
>> certainly irrelevant.
>>
>> Mike
>>
>>> Michael B Allen wrote:
>>>>
>>>> On Tue, Jun 9, 2009 at 9:56 AM, jcifsatish<javasatheesh at gmail.com>
>>>> wrote:
>>>>>
>>>>> Hi, I am getting below error while creating file. My method is
>>>>> executing
>>>>> in
>>>>> multi thread model. Please suggest what could be the issue:
>>>>>
>>>>> Method calling in multi threaded environment:
>>>>> public void createFileWithContent(String fileStr, byte[] content,
>>>>> String
>>>>> serverLocation, int hashCode) {
>>>>> SmbFile file = getSmbFile(fileStr, serverLocation);
>>>>> if ( isFileExists(fileStr, serverLocation) )
>>>>> throw new CCServiceException(ErrorCodes.DUPLICATE_FILE);
>>>>>
>>>>> SmbFileOutputStream out = null;
>>>>> for ( int count = 0; count < CCConstants.CONNECTION_COUNT;
>>>>> count++
>>>>> )
>>>>> {
>>>>> try {
>>>>> file.createNewFile();
>>>>
>>>> I don't know what the problem is but I don't think you can call
>>>> createNewFile in a loop like this. Or maybe you can but at least it
>>>> probably won't do anything after the first call. SmbFile objects are
>>>> partially immutable. You cannot call mkdir on the same instance twice,
>>>> if you set an attribute in one instance it will not be reflected in
>>>> the other and so on. So either move that createNewFile outside of the
>>>> loop do "new SmbFile" and and then createNewFile with each iteration.
>>>>
>>>>> out = new SmbFileOutputStream(file, false);
>>>>
>>>> I'm not sure you can create multiple SmbFileOutputStream objects from
>>>> the same SmbFile instance because it will cause writes to use the same
>>>> file descriptor on the server but each SmbFileOutputStream has it's
>>>> own offset so each write will overwrite the last. I doubt that is what
>>>> you intended. Again, this is similar to the previous comment. Create a
>>>> separate SmbFile object for each SmbFileOutputStream instance.
>>>>
>>>> Mike
>>>>
>>>>> if ( content != null ) {
>>>>> out.write(content);
>>>>> }
>>>>> break;
>>>>> } catch ( IOException ioe ) {
>>>>> logger.warn("Failed to write to the file: " + fileStr +
>>>>> "
>>>>> for " + (count + 1) + " times.");
>>>>> ;
>>>>> if ( count + 1 == CCConstants.CONNECTION_COUNT ) {
>>>>> logger.error("Error occurred while tring to write to
>>>>> the
>>>>> file: " + fileStr, ioe);
>>>>> throw new
>>>>> CCServiceException(ErrorCodes.CANNOT_CREATE_FILE);
>>>>> }
>>>>> } finally {
>>>>> if ( out != null ) {
>>>>> try {
>>>>>
>>>>> out.close();
>>>>> } catch ( IOException e ) {
>>>>> logger.warn(e.getMessage());
>>>>> }
>>>>> }
>>>>> }
>>>>> }
>>>>> }
>>>>>
>>>>> File Path:
>>>>> ---------
>>>>> context path is :
>>>>> smb://MYUSER;mypwd:mydomain@v0-231.netapp-b2.shhq.bbc.com/ccss4
>>>>> full path is :
>>>>> smb://MYUSER;mypwd:mydomain@v0-231.netapp-b2.shhq.bbc.com/ccss4/PROD01/BC/WKFL/ER/TEMP/20090604/140826/1244124506462.cdf.1.tmp
>>>>>
>>>>> Error Message:
>>>>> -------------
>>>>> 2009-06-04 09:08:26 [ERROR]
>>>>> (com.bbc.app.onb.ac.common.util.SMBUtil.java:527) - Error occurred
>>>>> while
>>>>> tring to write to the file:
>>>>> PROD01/UP/WKFL/ER/TEMP/20090604/140826/1244124506462.cdf.1.tmp
>>>>> jcifs.smb.SmbException: The system cannot find the path specified.
>>>>> at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:514)
>>>>> at jcifs.smb.SmbTransport.send(SmbTransport.java:614)
>>>>> at jcifs.smb.SmbSession.send(SmbSession.java:239)
>>>>> at jcifs.smb.SmbTree.send(SmbTree.java:109)
>>>>> at jcifs.smb.SmbFile.send(SmbFile.java:695)
>>>>> at jcifs.smb.SmbFile.open0(SmbFile.java:887)
>>>>> at jcifs.smb.SmbFile.createNewFile(SmbFile.java:2522)
>>>>> at
>>>>> com.bbc.app.onb.ac.common.util.SMBUtil.createFileWithContent(SMBUtil.java:517)
>>>>>
>>>>> I would appreciate greatly if you could provide me your advice at the
>>>>> earliest.
--
Michael B Allen
Java Active Directory Integration
http://www.ioplex.com/
More information about the jcifs
mailing list