BAEL-750 Added Java configuration (#1494)
* BAEL-750 A guide to gemfire with spring data * BAEL-750 A guide to gemfire with spring data * BAEL-750 A guide to gemfire with spring data
This commit is contained in:
parent
e62f8fa3d8
commit
de29cd5632
1
pom.xml
1
pom.xml
|
@ -211,6 +211,7 @@
|
||||||
|
|
||||||
<module>rabbitmq</module>
|
<module>rabbitmq</module>
|
||||||
<module>vertx</module>
|
<module>vertx</module>
|
||||||
|
<module>spring-data-gemfire</module>
|
||||||
</modules>
|
</modules>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>spring-data-gemfire</artifactId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<properties>
|
||||||
|
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
||||||
|
<spring-data-gemfire-version>1.7.4.RELEASE</spring-data-gemfire-version>
|
||||||
|
<gemfire-version>7.0.1</gemfire-version>
|
||||||
|
<google-collections-version>1.0</google-collections-version>
|
||||||
|
<junit-version>4.12</junit-version>
|
||||||
|
<hamcrest-library-version>1.3</hamcrest-library-version>
|
||||||
|
<spring-context-version>4.3.0.RELEASE</spring-context-version>
|
||||||
|
<spring-test-version>4.3.0.RELEASE</spring-test-version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.data</groupId>
|
||||||
|
<artifactId>spring-data-gemfire</artifactId>
|
||||||
|
<version>${spring-data-gemfire-version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.gemstone.gemfire</groupId>
|
||||||
|
<artifactId>gemfire</artifactId>
|
||||||
|
<version>${gemfire-version}</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- Google List API -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.collections</groupId>
|
||||||
|
<artifactId>google-collections</artifactId>
|
||||||
|
<version>${google-collections-version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>${junit-version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.hamcrest</groupId>
|
||||||
|
<artifactId>hamcrest-core</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hamcrest</groupId>
|
||||||
|
<artifactId>hamcrest-library</artifactId>
|
||||||
|
<version>${hamcrest-library-version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-context</artifactId>
|
||||||
|
<version>${spring-context-version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework</groupId>
|
||||||
|
<artifactId>spring-test</artifactId>
|
||||||
|
<version>${spring-test-version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>${maven-surefire-plugin.version}</version>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
|
||||||
|
</build>
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>spring-snapshots</id>
|
||||||
|
<name>Spring Snapshots</name>
|
||||||
|
<url>http://repo.spring.io/libs-snapshot</url>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>gemstone</id>
|
||||||
|
<url>http://dist.gemstone.com.s3.amazonaws.com/maven/release/</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.spring.data.gemfire.function;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.data.gemfire.function.annotation.FunctionId;
|
||||||
|
import org.springframework.data.gemfire.function.annotation.OnRegion;
|
||||||
|
import org.springframework.data.gemfire.function.annotation.RegionData;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
@OnRegion(region="employee")
|
||||||
|
public interface FunctionExecution {
|
||||||
|
@FunctionId("greeting")
|
||||||
|
public void execute(String message);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.baeldung.spring.data.gemfire.function;
|
||||||
|
|
||||||
|
import org.springframework.data.gemfire.function.annotation.GemfireFunction;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class FunctionImpl {
|
||||||
|
|
||||||
|
@GemfireFunction
|
||||||
|
public void greeting(String message){
|
||||||
|
System.out.println("Message "+message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GemfireFunction
|
||||||
|
public String sayHello(String message){
|
||||||
|
return "Hello "+message;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
package com.baeldung.spring.data.gemfire.function;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.gemfire.model.Employee;
|
||||||
|
import com.baeldung.spring.data.gemfire.repository.EmployeeRepository;
|
||||||
|
import com.gemstone.gemfire.cache.DataPolicy;
|
||||||
|
import com.gemstone.gemfire.cache.GemFireCache;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.data.gemfire.CacheFactoryBean;
|
||||||
|
import org.springframework.data.gemfire.LocalRegionFactoryBean;
|
||||||
|
import org.springframework.data.gemfire.function.config.EnableGemfireFunctionExecutions;
|
||||||
|
import org.springframework.data.gemfire.function.config.EnableGemfireFunctions;
|
||||||
|
import org.springframework.data.gemfire.repository.config.EnableGemfireRepositories;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@ComponentScan
|
||||||
|
@EnableGemfireRepositories(basePackages = "com.baeldung.spring.data.gemfire.repository")
|
||||||
|
@EnableGemfireFunctions
|
||||||
|
@EnableGemfireFunctionExecutions(basePackages = "com.baeldung.spring.data.gemfire.function")
|
||||||
|
public class GemfireConfiguration {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
EmployeeRepository employeeRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
FunctionExecution functionExecution;
|
||||||
|
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
Properties gemfireProperties() {
|
||||||
|
Properties gemfireProperties = new Properties();
|
||||||
|
gemfireProperties.setProperty("name", "SpringDataGemFireApplication");
|
||||||
|
gemfireProperties.setProperty("mcast-port", "0");
|
||||||
|
gemfireProperties.setProperty("log-level", "config");
|
||||||
|
return gemfireProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Autowired
|
||||||
|
CacheFactoryBean gemfireCache() {
|
||||||
|
CacheFactoryBean gemfireCache = new CacheFactoryBean();
|
||||||
|
gemfireCache.setClose(true);
|
||||||
|
gemfireCache.setProperties(gemfireProperties());
|
||||||
|
return gemfireCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Bean(name="employee")
|
||||||
|
@Autowired
|
||||||
|
LocalRegionFactoryBean<String, Employee> getEmployee(final GemFireCache cache) {
|
||||||
|
LocalRegionFactoryBean<String, Employee> employeeRegion = new LocalRegionFactoryBean<String, Employee>();
|
||||||
|
employeeRegion.setCache(cache);
|
||||||
|
employeeRegion.setClose(false);
|
||||||
|
employeeRegion.setName("employee");
|
||||||
|
employeeRegion.setPersistent(false);
|
||||||
|
employeeRegion.setDataPolicy(DataPolicy.PRELOADED);
|
||||||
|
return employeeRegion;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
package com.baeldung.spring.data.gemfire.model;
|
||||||
|
|
||||||
|
import org.springframework.data.annotation.Id;
|
||||||
|
import org.springframework.data.annotation.PersistenceConstructor;
|
||||||
|
import org.springframework.data.gemfire.mapping.Region;
|
||||||
|
|
||||||
|
|
||||||
|
@Region("employee")
|
||||||
|
public class Employee {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
public String name;
|
||||||
|
public double salary;
|
||||||
|
|
||||||
|
@PersistenceConstructor
|
||||||
|
public Employee(String name, double salary) {
|
||||||
|
this.name = name;
|
||||||
|
this.salary = salary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name + " is " + salary + " years old.";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getSalary() {
|
||||||
|
return salary;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSalary(int salary) {
|
||||||
|
this.salary = salary;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.baeldung.spring.data.gemfire.repository;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.gemfire.model.Employee;
|
||||||
|
import org.springframework.data.repository.CrudRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
public interface EmployeeRepository extends CrudRepository<Employee, String> {
|
||||||
|
|
||||||
|
Employee findByName(String name);
|
||||||
|
|
||||||
|
Iterable<Employee> findBySalaryGreaterThan(double salary);
|
||||||
|
|
||||||
|
Iterable<Employee> findBySalaryLessThan(double salary);
|
||||||
|
|
||||||
|
Iterable<Employee> findBySalaryGreaterThanAndSalaryLessThan(double salary1, double salary2);
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
|
||||||
|
xmlns:gfe-data="http://www.springframework.org/schema/data/gemfire"
|
||||||
|
xmlns:gfe="http://www.springframework.org/schema/gemfire"
|
||||||
|
xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/data/gemfire http://www.springframework.org/schema/data/gemfire/spring-data-gemfire.xsd http://www.springframework.org/schema/gemfire http://www.springframework.org/schema/gemfire/spring-gemfire.xsd">
|
||||||
|
|
||||||
|
<context:component-scan base-package="com.baeldung.spring.data.gemfire"></context:component-scan>
|
||||||
|
|
||||||
|
<gfe:annotation-driven/>
|
||||||
|
<gfe-data:function-executions base-package="com.baeldung.spring.data.gemfire.function"/>
|
||||||
|
<!-- Declare GemFire Cache -->
|
||||||
|
<gfe:cache/>
|
||||||
|
<!-- Local region for being used by the Message -->
|
||||||
|
<gfe:local-region id="employee" value-constraint="com.baeldung.spring.data.gemfire.model.Employee" data-policy="PRELOADED"/>
|
||||||
|
<!-- Search for GemFire repositories -->
|
||||||
|
<gfe-data:repositories base-package="com.baeldung.spring.data.gemfire.repository"/>
|
||||||
|
|
||||||
|
|
||||||
|
</beans>
|
|
@ -0,0 +1,98 @@
|
||||||
|
package com.baeldung.spring.data.gemfire.repository;
|
||||||
|
|
||||||
|
import com.baeldung.spring.data.gemfire.function.FunctionExecution;
|
||||||
|
import com.baeldung.spring.data.gemfire.function.GemfireConfiguration;
|
||||||
|
import com.baeldung.spring.data.gemfire.model.Employee;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||||
|
import org.springframework.test.context.support.AnnotationConfigContextLoader;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static junit.framework.Assert.assertEquals;
|
||||||
|
|
||||||
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@ContextConfiguration(classes=GemfireConfiguration.class, loader=AnnotationConfigContextLoader.class)
|
||||||
|
public class EmployeeRepositoryTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
EmployeeRepository employeeRepository;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
FunctionExecution execution;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenEmployeeIsSaved_ThenAbleToRead(){
|
||||||
|
Employee employee=new Employee("John Davidson",4550.00);
|
||||||
|
employeeRepository.save(employee);
|
||||||
|
|
||||||
|
List<Employee> employees= Lists.newArrayList(employeeRepository.findAll());
|
||||||
|
|
||||||
|
assertEquals(1, employees.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSalaryGreaterThan_ThenEmployeeFound(){
|
||||||
|
|
||||||
|
Employee employee=new Employee("John Davidson",4550.00);
|
||||||
|
Employee employee1=new Employee("Adam Davidson",3500.00);
|
||||||
|
Employee employee2=new Employee("Chris Davidson",5600.00);
|
||||||
|
|
||||||
|
employeeRepository.save(employee);
|
||||||
|
employeeRepository.save(employee1);
|
||||||
|
employeeRepository.save(employee2);
|
||||||
|
|
||||||
|
List<Employee> employees= Lists.newArrayList(employeeRepository.findBySalaryGreaterThan(4000.00));
|
||||||
|
|
||||||
|
assertEquals(2,employees.size());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenSalaryLessThan_ThenEmployeeFound(){
|
||||||
|
|
||||||
|
Employee employee=new Employee("John Davidson",4550.00);
|
||||||
|
Employee employee1=new Employee("Adam Davidson",3500.00);
|
||||||
|
Employee employee2=new Employee("Chris Davidson",5600.00);
|
||||||
|
|
||||||
|
employeeRepository.save(employee);
|
||||||
|
employeeRepository.save(employee1);
|
||||||
|
employeeRepository.save(employee2);
|
||||||
|
|
||||||
|
List<Employee> employees= Lists.newArrayList(employeeRepository.findBySalaryLessThan(4000));
|
||||||
|
|
||||||
|
assertEquals(1,employees.size());
|
||||||
|
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void whenSalaryBetween_ThenEmployeeFound(){
|
||||||
|
|
||||||
|
Employee employee=new Employee("John Davidson",4550.00);
|
||||||
|
Employee employee1=new Employee("Adam Davidson",3500.00);
|
||||||
|
Employee employee2=new Employee("Chris Davidson",5600.00);
|
||||||
|
|
||||||
|
employeeRepository.save(employee);
|
||||||
|
employeeRepository.save(employee1);
|
||||||
|
employeeRepository.save(employee2);
|
||||||
|
|
||||||
|
List<Employee> employees= Lists.newArrayList(employeeRepository.findBySalaryGreaterThanAndSalaryLessThan(3500,5000));
|
||||||
|
|
||||||
|
assertEquals(1,employees.size());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenFunctionExecutedFromClient_ThenFunctionExecutedOnServer(){
|
||||||
|
execution.execute("Hello World");
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void cleanup(){
|
||||||
|
employeeRepository.deleteAll();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue