2017-04-17 17 views
2

MuleRequesterの助けを借りてファイルを移動しようとしています。大きなファイル(300MB> x)では、whileフローがブロックされることがあり、私はいつも以下のエラーメッセージを受け取ります。Muleリクエスタ - ファイルの移動に失敗しました

ファイルは常にjava.exeプロセスによってロックされます。

小さなファイルの場合は問題ありません。

ファイルは "C:¥itm¥main¥datafeeds¥backup"フォルダにあり、 "C:¥itm¥main¥datafeeds¥process"は空です。

これを修正する方法はありません。

エラーメッセージ:

Message    : Failed to move file "C:\itm\main\datafeeds\backup\my_file.xml" to "C:\itm\main\datafeeds\process\my_file.xml". The file might already exist. 
 
Payload    : [{numOfRecords=0}] 
 
Payload Type   : java.util.LinkedList 
 
Endpoint    : DefaultInboundEndpoint{endpointUri=file:///C:/itm/main/datafeeds/backup/?autoDelete=true, connector=FileConnector 
 
         { 
 
          name=File 
 
          lifecycle=start 
 
          this=300a38e7 
 
          numberOfConcurrentTransactedReceivers=4 
 
          createMultipleTransactedReceivers=true 
 
          connected=true 
 
          supportedProtocols=[file] 
 
          serviceOverrides=<none> 
 
         } 
 
         , name='endpoint..C.itm.main.datafeeds.backup', mep=ONE_WAY, properties={autoDelete=true}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=false} 
 
Timeout    : 1000 
 
Element    : /poller_product_parse_aff_file/processors/0/0/1 @ product_2_parse_aff_file_to_db 
 
-------------------------------------------------------------------------------- 
 
Root Exception stack trace: 
 
org.mule.api.DefaultMuleException: Failed to move file "C:\itm\main\datafeeds\backup\my_file.xml" to "C:\itm\main\datafeeds\process\my_file.xml". The file might already exist. 
 
\t at org.mule.transport.file.FileMessageRequester.moveOrDelete(FileMessageRequester.java:222) 
 
\t at org.mule.transport.file.FileMessageRequester.doRequest(FileMessageRequester.java:188) 
 
\t at org.mule.transport.AbstractMessageRequester.request(AbstractMessageRequester.java:94) 
 
\t at org.mule.transport.AbstractConnector.request(AbstractConnector.java:2259) 
 
\t at org.mule.endpoint.DefaultInboundEndpoint.request(DefaultInboundEndpoint.java:80) 
 
\t at org.mule.client.DefaultLocalMuleClient.request(DefaultLocalMuleClient.java:184) 
 
\t at org.mule.module.MuleRequesterModule.request(MuleRequesterModule.java:64) 
 
...

ラバ・リクエスタCFG:

<mulerequester:request resource="${file.RequesterUrl}" timeout="1000" doc:name="Mule Requester" />

環境:

オペレーションシステム:Windowsサーバー2012R2

JRE:V1.7

ミュールリクエスタ:V1.5

ミュールAnypointメーカー:ミュールサーバー3.8.0 CE作業

答えて

0

そのような大きなファイルでは、主にJavaで利用可能なメモリに問題があります。利用可能な(最大)Javaヒープサイズを増やしてください。

0

ありがとうございました! 私は過去にこのようなヒープの問題を抱えていました。ヒープの問題が特定のエラーメッセージを投げているので、この場合は問題ではないと思います。

私のVMの引数は次のとおりです。

-Xms2048m 
 
-Xmx4096m 
 
-XX:MaxPermSize=2048m

+0

これは、ヒープ領域エラーとは関係ありません! –

0

私はあなたが同じ場所に再び同じファイルをコピーしていると思います。

org.mule.api.DefaultMuleException: Failed to move file "C:\itm\main\datafeeds\backup\my_file.xml" to "C:\itm\main\datafeeds\process\my_file.xml". The file might already exist. 

あなたはさらに完全なxml設定を投稿できますか?

+0

ソースの場所は:バックアップ、宛先istのプロセス – skornemaster

0

その他の方法として、ファイルのアウトバウンドを使用し、ペイロードを出力ファイルに書き戻す方法があります。ファイルを移動するだけでは、バッチ/シェルスクリプトなどの他の多くの方法があります。

+0

はい、スクリプトを呼び出すと私は推測されます。私はフローの内側に移動しなければならないので、私はミュールリクエスタを使用しなければなりません。ここのボックスソリューションからのミュールは非常に貧弱です。 – skornemaster

0

ありがとうございました!全体の流れイストここ

<?xml version="1.0" encoding="UTF-8"?> 
 
<mule xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:mulerequester="http://www.mulesoft.org/schema/mule/mulerequester" xmlns:db="http://www.mulesoft.org/schema/mule/db" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:wmq="http://www.mulesoft.org/schema/mule/ee/wmq" xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" 
 
\t xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" 
 
\t xmlns:spring="http://www.springframework.org/schema/beans" 
 
\t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
\t xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
 
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd 
 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd 
 
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
 
http://www.mulesoft.org/schema/mule/ee/wmq http://www.mulesoft.org/schema/mule/ee/wmq/current/mule-wmq-ee.xsd 
 
http://www.mulesoft.org/schema/mule/db http://www.mulesoft.org/schema/mule/db/current/mule-db.xsd 
 
http://www.mulesoft.org/schema/mule/mulerequester http://www.mulesoft.org/schema/mule/mulerequester/current/mule-mulerequester.xsd 
 
http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/current/mule-vm.xsd"> 
 

 
<file:connector name="File" autoDelete="true" streaming="false" validateConnections="false" doc:name="File" outputAppend="true" moveToDirectory="${file.workingDir}" /> 
 
    <flow name="poller_product_parse_aff_file" processingStrategy="synchronous"> 
 
     <poll doc:name="Poll"> 
 
      <fixed-frequency-scheduler frequency="15" timeUnit="SECONDS"/> 
 
      <db:select config-ref="MYSQL_GENERIC_CFG" doc:name="Database"> 
 
       <db:parameterized-query><![CDATA[SELECT COUNT(*) AS numOfRecords FROM mule_product]]></db:parameterized-query> 
 
      </db:select> 
 
     </poll> 
 
     <choice doc:name="Choice"> 
 
      <when expression="#[payload.get(0).numOfRecords &lt; 1000]"> 
 
       <logger message="#[System.getProperty('line.separator')] ############################ Database is free, so start parsing next xml file ###########################:: #[flowVars.fileRequesterUrl]" level="TRACE" doc:name="Logger"/> 
 
       <mulerequester:request resource="${file.RequesterUrl}" timeout="30000" doc:name="Mule Requester"/> 
 
      
 
       <choice doc:name="Choice"> 
 
        <when expression="#[payload != null &amp;&amp; payload.size()&gt;0]"> 
 
         <logger message="#[System.getProperty('line.separator')] +++ DB is free and file was found" level="TRACE" doc:name="Logger"/> 
 
         <flow-ref name="product_parse_aff_file_to_dbFlow" doc:name="product_parse_aff_file_to_dbFlow"/> 
 
        </when> 
 
        <otherwise> 
 
         <logger message="#[System.getProperty('line.separator')] --- File not found or filesize is zero: #[payload]" level="TRACE" doc:name="Logger"/> 
 
        </otherwise> 
 
       </choice> 
 
      </when> 
 
      <when expression=""> 
 
       <logger message="::::::::::::::: start of parsing the files:no fo records in db :::::&gt;#[payload.get(0).numOfRecords]" level="TRACE" doc:name="Logger"/> 
 
      </when> 
 
      <otherwise> 
 
       <logger message="::::::::::file processing not started as the condition is not met i.e SELECT COUNT(*) AS numOfRecords FROM mule_product &gt;1000" level="TRACE" doc:name="Logger"/> 
 
      </otherwise> 
 
     </choice> 
 
    </flow> 
 
\t .... 
 
</mule>

関連する問題