Announcement Announcement Module
Collapse
No announcement yet.
Spring Integration - Implementing File Locking Page Title Module
Move Remove Collapse
X
Conversation Detail Module
Collapse
  • Filter
  • Time
  • Show
Clear All
new posts

  • Spring Integration - Implementing File Locking

    Hey all

    Need your guidance and suggestions to implement File Locking the right way.

    I have a directory that may receive multiple data files. There would be multiple threads to read and process the files. Once a file is processed, it has to be archived and the original file needs to be deleted. Since there are multiple threads involved, I am exploring the File Locking mechanism in SI.

    Please find below my current configuration:
    Code:
    <bean id="filter" class="org.springframework.integration.file.filters.RegexPatternFileListFilter">
        <constructor-arg name="pattern" value="${fileName.regex}" />
    </bean>
    	
    <bean id="locker" class="org.springframework.integration.file.locking.NioFileLocker" />
    
    <!-- scan to process files from recently created ones to the oldest -->
    <bean id="customDirectorySanner" class="com.spring.int.Sample.CustomDirectoryScanner">
        <property name="sortOrder" value="Desc" />
        <property name="locker" ref="locker" />
    </bean>
    
    <!-- File Polling Components (first) -->
    <integration:service-activator
    	input-channel="inputChannelOne" ref="customJobLauncher" 
    	method="processFile" />
    
    <file:inbound-channel-adapter id="first" channel="inputChannelOne"
    	directory="file:${dir.home.input}" 
    	filter="filter"
    	scanner="customDirectorySanner">
    	<integration:poller id="pollerOne" fixed-delay="${polling.interval}" max-messages-per-poll="5"/>
    </file:inbound-channel-adapter>
    
    <!-- File Polling Components (second) -->
    <integration:service-activator
    	input-channel="inputChannelSecond" ref="customJobLauncher" 
    	method="processFile" />
    
    <file:inbound-channel-adapter id="first" channel="inputChannelSecond"
    	directory="file:${dir.home.input}" 
    	filter="filter"
    	scanner="customDirectorySanner">
    	<integration:poller id="pollerSecond" fixed-delay="${polling.interval}" max-messages-per-poll="5"/>
    </file:inbound-channel-adapter>
    The custom directory scanner is being injected with a locker and it takes care of locking the file.
    When and where shall I unlock it?
    Do I need to pass the locker to the Service Activator and invoke unlock() on the file?

    Appreciate your suggestions and recommendations.

    Thanks.
    Chandra
    Last edited by Chandra_Sivaraman; Jan 3rd, 2012, 02:36 AM.
Working...
X