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
					
				
							
								
								
									
										3
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								pom.xml
									
									
									
									
									
								
							| @ -211,7 +211,8 @@ | |||||||
| 
 | 
 | ||||||
|         <module>rabbitmq</module> |         <module>rabbitmq</module> | ||||||
|         <module>vertx</module> |         <module>vertx</module> | ||||||
|   </modules> |         <module>spring-data-gemfire</module> | ||||||
|  |     </modules> | ||||||
|     <build> |     <build> | ||||||
|         <plugins> |         <plugins> | ||||||
|             <plugin> |             <plugin> | ||||||
|  | |||||||
							
								
								
									
										97
									
								
								spring-data-gemfire/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								spring-data-gemfire/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user