Merge branch 'master' of https://github.com/eugenp/tutorials into task/BAEL-8841
This commit is contained in:
		
						commit
						f3afeaa638
					
				
							
								
								
									
										1
									
								
								aws/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								aws/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1 +1,2 @@ | |||||||
| /target/ | /target/ | ||||||
|  | .idea/ | ||||||
							
								
								
									
										184
									
								
								aws/src/main/java/com/baeldung/rds/AWSRDSService.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								aws/src/main/java/com/baeldung/rds/AWSRDSService.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,184 @@ | |||||||
|  | package com.baeldung.rds; | ||||||
|  | 
 | ||||||
|  | import com.amazonaws.auth.AWSCredentialsProvider; | ||||||
|  | import com.amazonaws.auth.AWSStaticCredentialsProvider; | ||||||
|  | import com.amazonaws.auth.BasicAWSCredentials; | ||||||
|  | import com.amazonaws.regions.Regions; | ||||||
|  | import com.amazonaws.services.rds.AmazonRDS; | ||||||
|  | import com.amazonaws.services.rds.AmazonRDSClientBuilder; | ||||||
|  | import com.amazonaws.services.rds.model.*; | ||||||
|  | 
 | ||||||
|  | import java.io.IOException; | ||||||
|  | import java.io.InputStream; | ||||||
|  | import java.sql.*; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.Properties; | ||||||
|  | import java.util.UUID; | ||||||
|  | import java.util.logging.Logger; | ||||||
|  | 
 | ||||||
|  | public class AWSRDSService { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     final static Logger logger = Logger.getLogger(AWSRDSService.class.getName()); | ||||||
|  |     private AWSCredentialsProvider credentials; | ||||||
|  |     private AmazonRDS amazonRDS; | ||||||
|  |     private String db_username; | ||||||
|  |     private String db_password; | ||||||
|  |     private String db_database; | ||||||
|  |     private String db_hostname; | ||||||
|  | 
 | ||||||
|  |     /* | ||||||
|  |     * User access key and secret key must be set before execute any operation. | ||||||
|  |     * Follow the link on how to get the user access and secret key | ||||||
|  |     * https://aws.amazon.com/blogs/security/wheres-my-secret-access-key/ | ||||||
|  |     * **/ | ||||||
|  |     public AWSRDSService() throws IOException { | ||||||
|  |         //Init RDS client with credentials and region. | ||||||
|  |         credentials = new | ||||||
|  |                 AWSStaticCredentialsProvider(new | ||||||
|  |                 BasicAWSCredentials("<ACCESS_KEY>", | ||||||
|  |                 "<SECRET_KEY>")); | ||||||
|  |         amazonRDS = AmazonRDSClientBuilder.standard().withCredentials(credentials) | ||||||
|  |                 .withRegion(Regions.AP_SOUTHEAST_2).build(); | ||||||
|  |         Properties prop = new Properties(); | ||||||
|  |         InputStream input = AWSRDSService.class.getClassLoader().getResourceAsStream("db.properties"); | ||||||
|  |         prop.load(input); | ||||||
|  |         db_username = prop.getProperty("db_username"); | ||||||
|  |         db_password = prop.getProperty("db_password"); | ||||||
|  |         db_database = prop.getProperty("db_database"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public AWSRDSService(AmazonRDS amazonRDS){ | ||||||
|  |         this.amazonRDS = amazonRDS; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * create the RDS instance. | ||||||
|  |      * After instance creation, update the db_hostname with endpoint in db.properties. | ||||||
|  |      * */ | ||||||
|  | 
 | ||||||
|  |     public String launchInstance() { | ||||||
|  | 
 | ||||||
|  |         String identifier = ""; | ||||||
|  |         CreateDBInstanceRequest request = new CreateDBInstanceRequest(); | ||||||
|  |         // RDS instance name | ||||||
|  |         request.setDBInstanceIdentifier("Sydney"); | ||||||
|  |         request.setEngine("postgres"); | ||||||
|  |         request.setMultiAZ(false); | ||||||
|  |         request.setMasterUsername(db_username); | ||||||
|  |         request.setMasterUserPassword(db_password); | ||||||
|  |         request.setDBName(db_database); | ||||||
|  |         request.setStorageType("gp2"); | ||||||
|  |         request.setAllocatedStorage(10); | ||||||
|  | 
 | ||||||
|  |         DBInstance instance = amazonRDS.createDBInstance(request); | ||||||
|  | 
 | ||||||
|  |         // Information about the new RDS instance | ||||||
|  |         identifier = instance.getDBInstanceIdentifier(); | ||||||
|  |         String status = instance.getDBInstanceStatus(); | ||||||
|  |         Endpoint endpoint = instance.getEndpoint(); | ||||||
|  |         String endpoint_url = "Endpoint URL not available yet."; | ||||||
|  |         if (endpoint != null) { | ||||||
|  |             endpoint_url = endpoint.toString(); | ||||||
|  |         } | ||||||
|  |         logger.info(identifier + "\t" + status); | ||||||
|  |         logger.info(endpoint_url); | ||||||
|  | 
 | ||||||
|  |         return identifier; | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Describe DB instances | ||||||
|  |     public void listInstances() { | ||||||
|  |         DescribeDBInstancesResult result = amazonRDS.describeDBInstances(); | ||||||
|  |         List<DBInstance> instances = result.getDBInstances(); | ||||||
|  |         for (DBInstance instance : instances) { | ||||||
|  |             // Information about each RDS instance | ||||||
|  |             String identifier = instance.getDBInstanceIdentifier(); | ||||||
|  |             String engine = instance.getEngine(); | ||||||
|  |             String status = instance.getDBInstanceStatus(); | ||||||
|  |             Endpoint endpoint = instance.getEndpoint(); | ||||||
|  |             String endpoint_url = "Endpoint URL not available yet."; | ||||||
|  |             if (endpoint != null) { | ||||||
|  |                 endpoint_url = endpoint.toString(); | ||||||
|  |             } | ||||||
|  |             logger.info(identifier + "\t" + engine + "\t" + status); | ||||||
|  |             logger.info("\t" + endpoint_url); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     //Delete RDS instance | ||||||
|  |     public void terminateInstance(String identifier) { | ||||||
|  | 
 | ||||||
|  |         DeleteDBInstanceRequest request = new DeleteDBInstanceRequest(); | ||||||
|  |         request.setDBInstanceIdentifier(identifier); | ||||||
|  |         request.setSkipFinalSnapshot(true); | ||||||
|  | 
 | ||||||
|  |         // Delete the RDS instance | ||||||
|  |         DBInstance instance = amazonRDS.deleteDBInstance(request); | ||||||
|  | 
 | ||||||
|  |         // Information about the RDS instance being deleted | ||||||
|  |         String status = instance.getDBInstanceStatus(); | ||||||
|  |         Endpoint endpoint = instance.getEndpoint(); | ||||||
|  |         String endpoint_url = "Endpoint URL not available yet."; | ||||||
|  |         if (endpoint != null) { | ||||||
|  |             endpoint_url = endpoint.toString(); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         logger.info(identifier + "\t" + status); | ||||||
|  |         logger.info(endpoint_url); | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     public void runJdbcTests() throws SQLException, IOException { | ||||||
|  | 
 | ||||||
|  |         // Getting database properties from db.properties | ||||||
|  |         Properties prop = new Properties(); | ||||||
|  |         InputStream input = AWSRDSService.class.getClassLoader().getResourceAsStream("db.properties"); | ||||||
|  |         prop.load(input); | ||||||
|  |         db_hostname = prop.getProperty("db_hostname"); | ||||||
|  |         String jdbc_url = "jdbc:postgresql://" + db_hostname + ":5432/" + db_database; | ||||||
|  | 
 | ||||||
|  |         // Create a connection using the JDBC driver | ||||||
|  |         try (Connection conn = DriverManager.getConnection(jdbc_url, db_username, db_password)) { | ||||||
|  | 
 | ||||||
|  |             // Create the test table if not exists | ||||||
|  |             Statement statement = conn.createStatement(); | ||||||
|  |             String sql = "CREATE TABLE IF NOT EXISTS jdbc_test (id SERIAL PRIMARY KEY, content VARCHAR(80))"; | ||||||
|  |             statement.executeUpdate(sql); | ||||||
|  | 
 | ||||||
|  |             // Do some INSERT | ||||||
|  |             PreparedStatement preparedStatement = conn.prepareStatement("INSERT INTO jdbc_test (content) VALUES (?)"); | ||||||
|  |             String content = "" + UUID.randomUUID(); | ||||||
|  |             preparedStatement.setString(1, content); | ||||||
|  |             preparedStatement.executeUpdate(); | ||||||
|  |             logger.info("INSERT: " + content); | ||||||
|  | 
 | ||||||
|  |             // Do some SELECT | ||||||
|  |             sql = "SELECT  * FROM jdbc_test"; | ||||||
|  |             ResultSet resultSet = statement.executeQuery(sql); | ||||||
|  |             while (resultSet.next()) { | ||||||
|  |                 String count = resultSet.getString("content"); | ||||||
|  |                 logger.info("Total Records: " + count); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static void main(String[] args) throws IOException, SQLException { | ||||||
|  |         AWSRDSService awsrdsService = new AWSRDSService(); | ||||||
|  | 
 | ||||||
|  |         String instanceName = awsrdsService.launchInstance(); | ||||||
|  | 
 | ||||||
|  |         //Add some wait for instance creation. | ||||||
|  | 
 | ||||||
|  |         awsrdsService.listInstances(); | ||||||
|  | 
 | ||||||
|  |         awsrdsService.runJdbcTests(); | ||||||
|  | 
 | ||||||
|  |         awsrdsService.terminateInstance(instanceName); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										4
									
								
								aws/src/main/resources/db.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								aws/src/main/resources/db.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | db_hostname=<RDS EndPoint> | ||||||
|  | db_username=username | ||||||
|  | db_password=password | ||||||
|  | db_database=mydb | ||||||
| @ -48,7 +48,7 @@ class ProcessUnderstandingTest { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     //@Test - windows specific |     //@Test - windows specific | ||||||
|     public void givenSubProcess_thenStartSuccessIsAlive() throws IOException { |     public void givenSubProcess_whenStarted_thenStartSuccessIsAlive() throws IOException { | ||||||
|         ProcessBuilder builder = new ProcessBuilder("notepad.exe"); |         ProcessBuilder builder = new ProcessBuilder("notepad.exe"); | ||||||
|         assertTrue(builder.start().isAlive()); |         assertTrue(builder.start().isAlive()); | ||||||
|     } |     } | ||||||
| @ -75,7 +75,7 @@ class ProcessUnderstandingTest { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     //@Test - windows specific |     //@Test - windows specific | ||||||
|     public void givenSubProcess_checkAlive() throws IOException, InterruptedException { |     public void givenSubProcess_whenDestroyed_thenCheckIfAlive() throws IOException, InterruptedException { | ||||||
|         ProcessBuilder builder = new ProcessBuilder("notepad.exe"); |         ProcessBuilder builder = new ProcessBuilder("notepad.exe"); | ||||||
|         Process process = builder.start(); |         Process process = builder.start(); | ||||||
|         Thread.sleep(10000); |         Thread.sleep(10000); | ||||||
|  | |||||||
| @ -48,12 +48,18 @@ | |||||||
|             <artifactId>poi-ooxml</artifactId> |             <artifactId>poi-ooxml</artifactId> | ||||||
|             <version>${apache-poi-version}</version> |             <version>${apache-poi-version}</version> | ||||||
|         </dependency> |         </dependency> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>org.optaplanner</groupId> | ||||||
|  |             <artifactId>optaplanner-core</artifactId> | ||||||
|  |             <version>${opta-planner-version}</version> | ||||||
|  |         </dependency> | ||||||
|     </dependencies> |     </dependencies> | ||||||
| 
 | 
 | ||||||
|     <properties> |     <properties> | ||||||
|         <http-component-version>4.4.6</http-component-version> |         <http-component-version>4.4.6</http-component-version> | ||||||
|         <drools-version>7.4.1.Final</drools-version> |         <drools-version>7.4.1.Final</drools-version> | ||||||
|         <apache-poi-version>3.13</apache-poi-version> |         <apache-poi-version>3.13</apache-poi-version> | ||||||
|  |         <opta-planner-version>7.10.0.Final</opta-planner-version> | ||||||
|     </properties> |     </properties> | ||||||
| 
 | 
 | ||||||
| </project> | </project> | ||||||
|  | |||||||
| @ -0,0 +1,63 @@ | |||||||
|  | package com.baeldung.drools.optaplanner; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | import org.optaplanner.core.api.domain.solution.PlanningEntityCollectionProperty; | ||||||
|  | import org.optaplanner.core.api.domain.solution.PlanningScore; | ||||||
|  | import org.optaplanner.core.api.domain.solution.PlanningSolution; | ||||||
|  | import org.optaplanner.core.api.domain.solution.drools.ProblemFactCollectionProperty; | ||||||
|  | import org.optaplanner.core.api.domain.valuerange.ValueRangeProvider; | ||||||
|  | import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore; | ||||||
|  | import org.slf4j.Logger; | ||||||
|  | import org.slf4j.LoggerFactory; | ||||||
|  | 
 | ||||||
|  | @PlanningSolution | ||||||
|  | public class CourseSchedule { | ||||||
|  | 
 | ||||||
|  |     Logger logger = LoggerFactory.getLogger("CourseSchedule"); | ||||||
|  | 
 | ||||||
|  |     private List<Integer> roomList; | ||||||
|  |     private List<Integer> periodList; | ||||||
|  |     private List<Lecture> lectureList; | ||||||
|  |     private HardSoftScore score; | ||||||
|  | 
 | ||||||
|  |     public CourseSchedule(){ | ||||||
|  |         roomList = new ArrayList<>(); | ||||||
|  |         periodList = new ArrayList<>(); | ||||||
|  |         lectureList = new ArrayList<>(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @ValueRangeProvider(id = "availableRooms") | ||||||
|  |     @ProblemFactCollectionProperty | ||||||
|  |     public List<Integer> getRoomList() { | ||||||
|  |         return roomList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @ValueRangeProvider(id = "availablePeriods") | ||||||
|  |     @ProblemFactCollectionProperty | ||||||
|  |     public List<Integer> getPeriodList() { | ||||||
|  |         return periodList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @PlanningEntityCollectionProperty | ||||||
|  |     public List<Lecture> getLectureList() { | ||||||
|  |         return lectureList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @PlanningScore | ||||||
|  |     public HardSoftScore getScore() { | ||||||
|  |         return score; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setScore(HardSoftScore score) { | ||||||
|  |         this.score = score; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void printCourseSchedule() { | ||||||
|  |         lectureList.stream() | ||||||
|  |                 .map(c -> "Lecture in Room " + c.getRoomNumber().toString() + " during Period " + c.getPeriod().toString()) | ||||||
|  |                 .forEach(k -> logger.info(k)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,30 @@ | |||||||
|  | package com.baeldung.drools.optaplanner; | ||||||
|  | 
 | ||||||
|  | import org.optaplanner.core.api.domain.entity.PlanningEntity; | ||||||
|  | import org.optaplanner.core.api.domain.variable.PlanningVariable; | ||||||
|  | 
 | ||||||
|  | @PlanningEntity | ||||||
|  | public class Lecture { | ||||||
|  | 
 | ||||||
|  |     private Integer roomNumber; | ||||||
|  |     private Integer period; | ||||||
|  | 
 | ||||||
|  |     @PlanningVariable(valueRangeProviderRefs = {"availablePeriods"}) | ||||||
|  |     public Integer getPeriod() { | ||||||
|  |         return period; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @PlanningVariable(valueRangeProviderRefs = {"availableRooms"}) | ||||||
|  |     public Integer getRoomNumber() { | ||||||
|  |         return roomNumber; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPeriod(Integer period) { | ||||||
|  |         this.period = period; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setRoomNumber(Integer roomNumber) { | ||||||
|  |         this.roomNumber = roomNumber; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -0,0 +1,32 @@ | |||||||
|  | package com.baeldung.drools.optaplanner; | ||||||
|  | 
 | ||||||
|  | import java.util.HashSet; | ||||||
|  | 
 | ||||||
|  | import org.optaplanner.core.api.score.Score; | ||||||
|  | import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore; | ||||||
|  | import org.optaplanner.core.impl.score.director.easy.EasyScoreCalculator; | ||||||
|  | 
 | ||||||
|  | public class ScoreCalculator implements EasyScoreCalculator<CourseSchedule> { | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public Score calculateScore(CourseSchedule courseSchedule) { | ||||||
|  |         int hardScore = 0; | ||||||
|  |         int softScore = 0; | ||||||
|  | 
 | ||||||
|  |         HashSet<String> occupiedRooms = new HashSet<>(); | ||||||
|  |         for (Lecture lecture : courseSchedule.getLectureList()) { | ||||||
|  |             if(lecture.getPeriod() != null && lecture.getRoomNumber() != null) { | ||||||
|  |                 String roomInUse = lecture.getPeriod().toString() + ":" + lecture.getRoomNumber().toString(); | ||||||
|  |                 if (occupiedRooms.contains(roomInUse)) { | ||||||
|  |                     hardScore += -1; | ||||||
|  |                 } else { | ||||||
|  |                     occupiedRooms.add(roomInUse); | ||||||
|  |                 } | ||||||
|  |             } else { | ||||||
|  |                 hardScore += -1; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         return HardSoftScore.valueOf(hardScore, softScore); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										14
									
								
								drools/src/main/resources/courseSchedule.drl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								drools/src/main/resources/courseSchedule.drl
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | package com.baeldung.drools.optaplanner | ||||||
|  | 
 | ||||||
|  | import com.baeldung.drools.optaplanner.Lecture; | ||||||
|  | import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScoreHolder; | ||||||
|  | 
 | ||||||
|  | global HardSoftScoreHolder scoreHolder; | ||||||
|  | 
 | ||||||
|  | rule "noNullRoomPeriod" | ||||||
|  |     when | ||||||
|  |         Lecture( roomNumber == null ); | ||||||
|  |         Lecture( period == null ); | ||||||
|  |     then | ||||||
|  |         scoreHolder.addHardConstraintMatch(kcontext, -1); | ||||||
|  | end | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <solver> | ||||||
|  |     <scanAnnotatedClasses/> | ||||||
|  | 
 | ||||||
|  |     <scoreDirectorFactory> | ||||||
|  |         <scoreDrl>courseSchedule.drl</scoreDrl> | ||||||
|  |     </scoreDirectorFactory> | ||||||
|  | 
 | ||||||
|  |     <termination> | ||||||
|  |         <secondsSpentLimit>10</secondsSpentLimit> | ||||||
|  |     </termination> | ||||||
|  | </solver> | ||||||
| @ -0,0 +1,12 @@ | |||||||
|  | <?xml version="1.0" encoding="UTF-8"?> | ||||||
|  | <solver> | ||||||
|  |     <scanAnnotatedClasses/> | ||||||
|  | 
 | ||||||
|  |     <scoreDirectorFactory> | ||||||
|  |         <easyScoreCalculatorClass>com.baeldung.drools.optaplanner.ScoreCalculator</easyScoreCalculatorClass> | ||||||
|  |     </scoreDirectorFactory> | ||||||
|  | 
 | ||||||
|  |     <termination> | ||||||
|  |         <secondsSpentLimit>10</secondsSpentLimit> | ||||||
|  |     </termination> | ||||||
|  | </solver> | ||||||
| @ -0,0 +1,49 @@ | |||||||
|  | package com.baeldung.drools.optaplanner; | ||||||
|  | 
 | ||||||
|  | import java.util.Arrays; | ||||||
|  | 
 | ||||||
|  | import org.junit.Assert; | ||||||
|  | import org.junit.jupiter.api.BeforeAll; | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  | import org.optaplanner.core.api.solver.Solver; | ||||||
|  | import org.optaplanner.core.api.solver.SolverFactory; | ||||||
|  | 
 | ||||||
|  | public class OptaPlannerUnitTest { | ||||||
|  | 
 | ||||||
|  |     static CourseSchedule unsolvedCourseSchedule; | ||||||
|  | 
 | ||||||
|  |     @BeforeAll | ||||||
|  |     public static void setUp() { | ||||||
|  | 
 | ||||||
|  |         unsolvedCourseSchedule = new CourseSchedule(); | ||||||
|  | 
 | ||||||
|  |         for(int i = 0; i < 10; i++){ | ||||||
|  |             unsolvedCourseSchedule.getLectureList().add(new Lecture()); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         unsolvedCourseSchedule.getPeriodList().addAll(Arrays.asList(new Integer[] { 1, 2, 3 })); | ||||||
|  |         unsolvedCourseSchedule.getRoomList().addAll(Arrays.asList(new Integer[] { 1, 2 })); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void test_whenCustomJavaSolver() { | ||||||
|  | 
 | ||||||
|  |         SolverFactory<CourseSchedule> solverFactory = SolverFactory.createFromXmlResource("courseScheduleSolverConfiguration.xml"); | ||||||
|  |         Solver<CourseSchedule> solver = solverFactory.buildSolver(); | ||||||
|  |         CourseSchedule solvedCourseSchedule = solver.solve(unsolvedCourseSchedule); | ||||||
|  | 
 | ||||||
|  |         Assert.assertNotNull(solvedCourseSchedule.getScore()); | ||||||
|  |         Assert.assertEquals(-4, solvedCourseSchedule.getScore().getHardScore()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void test_whenDroolsSolver() { | ||||||
|  | 
 | ||||||
|  |         SolverFactory<CourseSchedule> solverFactory = SolverFactory.createFromXmlResource("courseScheduleSolverConfigDrools.xml"); | ||||||
|  |         Solver<CourseSchedule> solver = solverFactory.buildSolver(); | ||||||
|  |         CourseSchedule solvedCourseSchedule = solver.solve(unsolvedCourseSchedule); | ||||||
|  | 
 | ||||||
|  |         Assert.assertNotNull(solvedCourseSchedule.getScore()); | ||||||
|  |         Assert.assertEquals(0, solvedCourseSchedule.getScore().getHardScore()); | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								javaxval/bin/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								javaxval/bin/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,6 +0,0 @@ | |||||||
| .classpath |  | ||||||
| .project |  | ||||||
| .settings/ |  | ||||||
| target/ |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| @ -1,44 +0,0 @@ | |||||||
| <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>javaxval</artifactId> |  | ||||||
|     <version>0.1-SNAPSHOT</version> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     <dependencies> |  | ||||||
| 
 |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>javax.validation</groupId> |  | ||||||
|             <artifactId>validation-api</artifactId> |  | ||||||
|             <version>1.1.0.Final</version> |  | ||||||
|         </dependency> |  | ||||||
| 
 |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>org.hibernate</groupId> |  | ||||||
|             <artifactId>hibernate-validator</artifactId> |  | ||||||
|             <version>5.2.1.Final</version> |  | ||||||
|         </dependency> |  | ||||||
| 
 |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>org.hibernate</groupId> |  | ||||||
|             <artifactId>hibernate-validator-annotation-processor</artifactId> |  | ||||||
|             <version>5.2.1.Final</version> |  | ||||||
|         </dependency> |  | ||||||
| 
 |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>javax.el</groupId> |  | ||||||
|             <artifactId>javax.el-api</artifactId> |  | ||||||
|             <version>2.2.4</version> |  | ||||||
|         </dependency> |  | ||||||
| 
 |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>org.glassfish.web</groupId> |  | ||||||
|             <artifactId>javax.el</artifactId> |  | ||||||
|             <version>2.2.4</version> |  | ||||||
|         </dependency> |  | ||||||
| 
 |  | ||||||
|     </dependencies> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| </project> |  | ||||||
| @ -9,3 +9,4 @@ | |||||||
| - [Introduction to JsonPath](http://www.baeldung.com/guide-to-jayway-jsonpath) | - [Introduction to JsonPath](http://www.baeldung.com/guide-to-jayway-jsonpath) | ||||||
| - [Introduction to JSON-Java (org.json)](http://www.baeldung.com/java-org-json) | - [Introduction to JSON-Java (org.json)](http://www.baeldung.com/java-org-json) | ||||||
| - [Overview of JSON Pointer](https://www.baeldung.com/json-pointer) | - [Overview of JSON Pointer](https://www.baeldung.com/json-pointer) | ||||||
|  | - [Introduction to the JSON Binding API (JSR 367) in Java](http://www.baeldung.com/java-json-binding-api) | ||||||
							
								
								
									
										22
									
								
								json/pom.xml
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								json/pom.xml
									
									
									
									
									
								
							| @ -33,7 +33,11 @@ | |||||||
|             <artifactId>json</artifactId> |             <artifactId>json</artifactId> | ||||||
|             <version>20171018</version> |             <version>20171018</version> | ||||||
|         </dependency> |         </dependency> | ||||||
|          | 		<dependency> | ||||||
|  |             <groupId>javax.json.bind</groupId> | ||||||
|  |             <artifactId>javax.json.bind-api</artifactId> | ||||||
|  |             <version>${jsonb-api.version}</version> | ||||||
|  |         </dependency> | ||||||
|         <dependency> |         <dependency> | ||||||
|             <groupId>junit</groupId> |             <groupId>junit</groupId> | ||||||
|             <artifactId>junit</artifactId> |             <artifactId>junit</artifactId> | ||||||
| @ -46,12 +50,26 @@ | |||||||
|             <artifactId>javax.json</artifactId> |             <artifactId>javax.json</artifactId> | ||||||
|             <version>1.1.2</version> |             <version>1.1.2</version> | ||||||
|         </dependency> |         </dependency> | ||||||
|          | 		<dependency> | ||||||
|  | 			<groupId>org.eclipse</groupId> | ||||||
|  | 			<artifactId>yasson</artifactId> | ||||||
|  | 			<version>${yasson.version}</version> | ||||||
|  |         </dependency> | ||||||
|  | 		<!-- utils --> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>org.apache.commons</groupId> | ||||||
|  |             <artifactId>commons-collections4</artifactId> | ||||||
|  |             <version>${commons-collections4.version}</version> | ||||||
|  |             <scope>test</scope> | ||||||
|  |         </dependency> | ||||||
|     </dependencies> |     </dependencies> | ||||||
| 
 | 
 | ||||||
|     <properties> |     <properties> | ||||||
|         <everit.json.schema.version>1.4.1</everit.json.schema.version> |         <everit.json.schema.version>1.4.1</everit.json.schema.version> | ||||||
|         <fastjson.version>1.2.21</fastjson.version> |         <fastjson.version>1.2.21</fastjson.version> | ||||||
|  |         <jsonb-api.version>1.0</jsonb-api.version> | ||||||
|  |         <commons-collections4.version>4.1</commons-collections4.version> | ||||||
|  |         <yasson.version>1.0.1</yasson.version> | ||||||
|     </properties> |     </properties> | ||||||
| 
 | 
 | ||||||
| </project> | </project> | ||||||
|  | |||||||
| @ -18,8 +18,9 @@ import org.apache.commons.collections4.ListUtils; | |||||||
| import org.junit.Test; | import org.junit.Test; | ||||||
| 
 | 
 | ||||||
| import com.baeldung.adapter.PersonAdapter; | import com.baeldung.adapter.PersonAdapter; | ||||||
|  | import com.baeldung.jsonb.Person; | ||||||
| 
 | 
 | ||||||
| public class JsonbTest { | public class JsonbUnitTest { | ||||||
| 
 | 
 | ||||||
|     @Test |     @Test | ||||||
|     public void givenPersonList_whenSerializeWithJsonb_thenGetPersonJsonArray() { |     public void givenPersonList_whenSerializeWithJsonb_thenGetPersonJsonArray() { | ||||||
							
								
								
									
										12
									
								
								jsonb/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								jsonb/.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,12 +0,0 @@ | |||||||
| #folders# |  | ||||||
| .idea |  | ||||||
| /target |  | ||||||
| /neoDb* |  | ||||||
| /data |  | ||||||
| /src/main/webapp/WEB-INF/classes |  | ||||||
| */META-INF/* |  | ||||||
| 
 |  | ||||||
| # Packaged files # |  | ||||||
| *.jar |  | ||||||
| *.war |  | ||||||
| *.ear |  | ||||||
| @ -1,4 +0,0 @@ | |||||||
| ## JSON B |  | ||||||
| 
 |  | ||||||
| ## Relevant articles: |  | ||||||
| - [Introduction to the JSON Binding API (JSR 367) in Java](http://www.baeldung.com/java-json-binding-api) |  | ||||||
							
								
								
									
										101
									
								
								jsonb/pom.xml
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								jsonb/pom.xml
									
									
									
									
									
								
							| @ -1,101 +0,0 @@ | |||||||
| <?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>json-b</artifactId> |  | ||||||
|     <version>0.0.1-SNAPSHOT</version> |  | ||||||
|     <packaging>jar</packaging> |  | ||||||
|     <name>json-b</name> |  | ||||||
|     <description>json-b sample project</description> |  | ||||||
| 
 |  | ||||||
|     <parent> |  | ||||||
|         <groupId>com.baeldung</groupId> |  | ||||||
|         <artifactId>parent-modules</artifactId> |  | ||||||
|         <version>1.0.0-SNAPSHOT</version> |  | ||||||
|     </parent> |  | ||||||
| 
 |  | ||||||
|     <dependencies> |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>javax.json.bind</groupId> |  | ||||||
|             <artifactId>javax.json.bind-api</artifactId> |  | ||||||
|             <version>${jsonb-api.version}</version> |  | ||||||
|         </dependency> |  | ||||||
|         <!-- utils --> |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>org.apache.commons</groupId> |  | ||||||
|             <artifactId>commons-collections4</artifactId> |  | ||||||
|             <version>${commons-collections4.version}</version> |  | ||||||
|             <scope>test</scope> |  | ||||||
|         </dependency> |  | ||||||
| 
 |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>org.junit.jupiter</groupId> |  | ||||||
|             <artifactId>junit-jupiter-api</artifactId> |  | ||||||
|             <version>${junit.jupiter.version}</version> |  | ||||||
|         </dependency> |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>org.junit.platform</groupId> |  | ||||||
|             <artifactId>junit-platform-surefire-provider</artifactId> |  | ||||||
|             <version>${junit.platform.version}</version> |  | ||||||
|             <scope>test</scope> |  | ||||||
|         </dependency> |  | ||||||
|         <dependency> |  | ||||||
|             <groupId>org.junit.platform</groupId> |  | ||||||
|             <artifactId>junit-platform-runner</artifactId> |  | ||||||
|             <version>${junit.platform.version}</version> |  | ||||||
|             <scope>test</scope> |  | ||||||
|         </dependency> |  | ||||||
|     </dependencies> |  | ||||||
| 
 |  | ||||||
|     <profiles> |  | ||||||
|         <profile> |  | ||||||
|             <id>yasson</id> |  | ||||||
|             <activation> |  | ||||||
|                 <activeByDefault>true</activeByDefault> |  | ||||||
|             </activation> |  | ||||||
|             <dependencies> |  | ||||||
|                 <!-- Dependencies for Yasson --> |  | ||||||
|                 <dependency> |  | ||||||
|                     <groupId>org.eclipse</groupId> |  | ||||||
|                     <artifactId>yasson</artifactId> |  | ||||||
|                     <version>${yasson.version}</version> |  | ||||||
|                 </dependency> |  | ||||||
|                 <dependency> |  | ||||||
|                     <groupId>org.glassfish</groupId> |  | ||||||
|                     <artifactId>javax.json</artifactId> |  | ||||||
|                     <version>${javax.json.version}</version> |  | ||||||
|                 </dependency> |  | ||||||
|             </dependencies> |  | ||||||
|         </profile> |  | ||||||
|         <profile> |  | ||||||
|             <id>johnzon</id> |  | ||||||
|             <dependencies> |  | ||||||
|                 <!-- Dependencies for Johnzon --> |  | ||||||
|                 <dependency> |  | ||||||
|                     <groupId>org.apache.geronimo.specs</groupId> |  | ||||||
|                     <artifactId>geronimo-json_1.1_spec</artifactId> |  | ||||||
|                     <version>${geronimo-json_1.1_spec.version}</version> |  | ||||||
|                 </dependency> |  | ||||||
|                 <dependency> |  | ||||||
|                     <groupId>org.apache.johnzon</groupId> |  | ||||||
|                     <artifactId>johnzon-jsonb</artifactId> |  | ||||||
|                     <version>${johnzon.version}</version> |  | ||||||
|                 </dependency> |  | ||||||
|             </dependencies> |  | ||||||
|         </profile> |  | ||||||
|     </profiles> |  | ||||||
| 
 |  | ||||||
|     <properties> |  | ||||||
|         <maven.compiler.source>1.8</maven.compiler.source> |  | ||||||
|         <maven.compiler.target>1.8</maven.compiler.target> |  | ||||||
|         <junit.platform.version>1.0.0</junit.platform.version> |  | ||||||
|         <jsonb-api.version>1.0</jsonb-api.version> |  | ||||||
|         <johnzon.version>1.1.3</johnzon.version> |  | ||||||
|         <geronimo-json_1.1_spec.version>1.0</geronimo-json_1.1_spec.version> |  | ||||||
|         <yasson.version>1.0.1</yasson.version> |  | ||||||
|         <javax.json.version>1.1.2</javax.json.version> |  | ||||||
|         <commons-collections4.version>4.1</commons-collections4.version> |  | ||||||
|     </properties> |  | ||||||
| 
 |  | ||||||
| </project> |  | ||||||
| @ -1,13 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <configuration> |  | ||||||
|     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> |  | ||||||
|         <encoder> |  | ||||||
|             <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n |  | ||||||
|             </pattern> |  | ||||||
|         </encoder> |  | ||||||
|     </appender> |  | ||||||
| 
 |  | ||||||
|     <root level="INFO"> |  | ||||||
|         <appender-ref ref="STDOUT" /> |  | ||||||
|     </root> |  | ||||||
| </configuration> |  | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user