0

I am using Spring batch to load data into gemfire using

@Bean
    public GemfireTemplate gemFireTemplate(ClientRegionFactory<Object, 
     Object> factory) {
        GemfireTemplate template = new GemfireTemplate();
        template.setRegion("regionName");
        return template;
    }

POM:

 <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>2.1.1.RELEASE</version>
     <relativePath /> <!-- lookup parent from repository -->
 </parent>


   <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-gemfire</artifactId>
        <version>1.5.16.RELEASE</version>
    </dependency>
   <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-geode</artifactId>
        <version>2.0.3.RELEASE</version>
      </dependency>
   <dependency>
      <groupId>io.pivotal.gemfire</groupId>
      <artifactId>geode-core</artifactId>
      <version>9.3.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.pivotal.gemfire</groupId>
      <artifactId>geode-common</artifactId>
      <version>9.3.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.pivotal.gemfire</groupId>
      <artifactId>geode-cq</artifactId>
      <version>9.3.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.pivotal.gemfire</groupId>
      <artifactId>geode-wan</artifactId>
      <version>9.3.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.pivotal.gemfire</groupId>
      <artifactId>geode-json</artifactId>
      <version>9.3.0</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.pivotal.gemfire</groupId>
      <artifactId>geode-lucene</artifactId>
      <version>9.3.0</version>
      <scope>compile</scope>
    </dependency>
   <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.2.6.RELEASE</version>
      </dependency>
       <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.3.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>4.2.12.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>4.2.12.RELEASE</version>
    </dependency>
      <dependency>
        <groupId>org.springframework.batch</groupId>
        <artifactId>spring-batch-core</artifactId>
        <version>4.0.0.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.0.3.RELEASE</version>
      </dependency>

Logs :

[info 2019/09/11 22:29:22.836 CDT <main> tid=0x1] GemFireCache[id = 892555958; isClosing = true; isShutDownAll = false; created = Wed Sep 11 22:29:20 CDT 2019; server = false; copyOnRead = false; lockLease = 120; lockTimeout = 60]: Now closing.

[error 2019/09/11 22:29:22.913 CDT <main> tid=0x1] java.lang.RuntimeException: java.io.IOException: Unable to write to deploy directory: /data/khan/vaquar/dataloader

java.lang.RuntimeException: java.io.IOException: Unable to write to deploy directory: /data/khan/vaquar/dataloader
        at org.apache.geode.internal.JarDeployer.loadPreviouslyDeployedJarsFromDisk(JarDeployer.java:410)
        at org.apache.geode.internal.cache.GemFireCacheImpl.initialize(GemFireCacheImpl.java:1191)
        at org.apache.geode.internal.cache.GemFireCacheImpl.basicCreate(GemFireCacheImpl.java:758)
        at org.apache.geode.internal.cache.GemFireCacheImpl.createClient(GemFireCacheImpl.java:731)
        at org.apache.geode.cache.client.ClientCacheFactory.basicCreate(ClientCacheFactory.java:262)
        at org.apache.geode.cache.client.ClientCacheFactory.create(ClientCacheFactory.java:212)
        at com.syf.gemfire.jdbc.dataloader.config.FullBatchConf.clientCache(FullBatchConf.java:205)
        at com.syf.gemfire.jdbc.dataloader.config.FullBatchConf$$EnhancerBySpringCGLIB$$749d49c1.CGLIB$clientCache$5(<generated>)
        at com.syf.gemfire.jdbc.dataloader.config.FullBatchConf$$EnhancerBySpringCGLIB$$749d49c1$$Fast

    Caused by: java.io.IOException: Unable to write to deploy directory: /data/khan/vaquar/dataloader
        at org.apache.geode.internal.JarDeployer.verifyWritableDeployDirectory(JarDeployer.java:333)
        at org.apache.geode.internal.JarDeployer.loadPreviouslyDeployedJarsFromDisk(JarDeployer.java:389)   

and

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.geode.cache.client.ClientCache]: Factory method 'clientCache' threw exception; nested exception is java.lang.RuntimeException: java.io.IOException: Unable to write to deploy directory:/data/khan/vaquar/dataloader

Analysis:

Pivotal jars required write permissions when start geode connection with gemfire cluster .

Pivotal code :

Pivotal Doc: - https://gemfire.docs.pivotal.io/98/geode/configuring/cluster_config/deploying_application_jars.html

Pivotal doc says if we can remove "deploy-working-dir"inside "gefire.properties" will resolve issue else use "-Dgemfire.deploy-working-dir=/temp/

Problem : inside Spring batch we are not configuring any gemfire properties , how to fix it in GemfireTemplate code ?

Mahmoud Ben Hassine
  • 28,519
  • 3
  • 32
  • 50
vaquar khan
  • 10,864
  • 5
  • 72
  • 96

1 Answers1

1

The issue is clearly the same as the one described by the Geode Ticket you attached to the question, GEODE-5000. This particular ticket is fixed in Geode 1.6.0 and, according to the Pivotal GemFire User Guide, specifically the Release Notes, GemFire 9.5 is based on Geode 1.6.0, so you should be using that version instead of 9.3.0 to get rid of the problem.

As a side note, you shouldn't be arbitrarily mixing and matching spring-data-gemfire and gemfire versions as several issues might rise, please follow the Spring Data for Pivotal GemFire Version Compatibility Matrix to avoid issues.

Hope this helps. Cheers.

Juan Ramos
  • 1,421
  • 1
  • 8
  • 13
  • Thanks Juan, if you see pom dependancy i am not using open source geode insted of using Pivotal proprietary jars and not found any release notes says this issie fixed into Pivotal jars also,i have updated version 9.3.0 to 9.6 but still getting same error. – vaquar khan Sep 12 '19 at 12:05
  • This should be fixed in GemFire 9.6 onwards... can you double check the version in the member logs?, maybe the inclusion of `spring-data-geode-2.0.3.RELEASE` is messing up the classpath?. – Juan Ramos Sep 12 '19 at 13:02