From cfb952f849b5cd831c14ea5ab6e17058e6f1b450 Mon Sep 17 00:00:00 2001 From: abirkhan04 Date: Sat, 30 Sep 2017 21:09:04 +0600 Subject: [PATCH 1/5] Atomix Intro Project (#2675) * This is whole project * BeanInjectionTest.java class is added for Junit Test. * Atomix Intro Project * Update pom.xml : Module name changed to Atomix * Intro to Atomix: 1. Module name is changed. 2. Module name is updated in pom.xml. * maven-compiler-plugin version number is updated. --- atomix/.gitignore | 1 + atomix/pom.xml | 41 +++++++++++ .../atomix/example/BootstrapingCluster.java | 30 ++++++++ .../com/atomix/example/ClientExample.java | 32 ++++++++ .../java/com/atomix/example/OtherNodes.java | 73 +++++++++++++++++++ .../atomix/exampletest/ClientExampleTest.java | 38 ++++++++++ 6 files changed, 215 insertions(+) create mode 100644 atomix/.gitignore create mode 100644 atomix/pom.xml create mode 100644 atomix/src/main/java/com/atomix/example/BootstrapingCluster.java create mode 100644 atomix/src/main/java/com/atomix/example/ClientExample.java create mode 100644 atomix/src/main/java/com/atomix/example/OtherNodes.java create mode 100644 atomix/src/test/java/com/atomix/exampletest/ClientExampleTest.java diff --git a/atomix/.gitignore b/atomix/.gitignore new file mode 100644 index 0000000000..ea8c4bf7f3 --- /dev/null +++ b/atomix/.gitignore @@ -0,0 +1 @@ +/target diff --git a/atomix/pom.xml b/atomix/pom.xml new file mode 100644 index 0000000000..ec54f896d1 --- /dev/null +++ b/atomix/pom.xml @@ -0,0 +1,41 @@ + + 4.0.0 + com.atomix.io + atomix + 0.0.1-SNAPSHOT + + + + io.atomix + atomix-all + 1.0.0-rc9 + + + junit + junit + 4.9 + test + + + log4j + log4j + 1.2.17 + + + + src + + + maven-compiler-plugin + 3.7.0 + + 1.8 + 1.8 + + + + + + + diff --git a/atomix/src/main/java/com/atomix/example/BootstrapingCluster.java b/atomix/src/main/java/com/atomix/example/BootstrapingCluster.java new file mode 100644 index 0000000000..7fce4cae5f --- /dev/null +++ b/atomix/src/main/java/com/atomix/example/BootstrapingCluster.java @@ -0,0 +1,30 @@ +package com.atomix.example; + +import java.io.File; +import java.util.concurrent.CompletableFuture; + +import io.atomix.AtomixReplica; +import io.atomix.catalyst.transport.Address; +import io.atomix.catalyst.transport.netty.NettyTransport; +import io.atomix.copycat.server.storage.Storage; +import io.atomix.copycat.server.storage.StorageLevel; + +public class BootstrapingCluster { + + public static void main(String[] args) { + // TODO Auto-generated method stub + + Storage storage = Storage.builder() + .withDirectory(new File("log")) + .withStorageLevel(StorageLevel.DISK) + .build(); + AtomixReplica replica = AtomixReplica.builder(new Address("localhost", 8700)) + .withStorage(storage) + .withTransport(new NettyTransport()) + .build(); + + CompletableFuture completableFuture = replica.bootstrap(); + completableFuture.join(); + + } +} diff --git a/atomix/src/main/java/com/atomix/example/ClientExample.java b/atomix/src/main/java/com/atomix/example/ClientExample.java new file mode 100644 index 0000000000..1cfaed76a5 --- /dev/null +++ b/atomix/src/main/java/com/atomix/example/ClientExample.java @@ -0,0 +1,32 @@ +package com.atomix.example; + +import java.util.Arrays; +import java.util.List; + +import io.atomix.AtomixClient; +import io.atomix.catalyst.transport.Address; +import io.atomix.catalyst.transport.netty.NettyTransport; +import io.atomix.collections.DistributedMap; + +public class ClientExample { + + public static void main(String args[]) throws InterruptedException { + AtomixClient client = AtomixClient.builder() + .withTransport(new NettyTransport()) + .build(); + + List
cluster = Arrays.asList(new Address("localhost", 8700), new Address("localhsot", 8701)); + client.connect(cluster) + .thenRun(() -> System.out.println("Client Connected")); + + Thread.sleep(5000); + + DistributedMap map = client.getMap("map") + .join(); + + String value = (String) map.get("bar") + .join(); + System.out.println("Value: " + value); + + } +} \ No newline at end of file diff --git a/atomix/src/main/java/com/atomix/example/OtherNodes.java b/atomix/src/main/java/com/atomix/example/OtherNodes.java new file mode 100644 index 0000000000..ae4c3eef2f --- /dev/null +++ b/atomix/src/main/java/com/atomix/example/OtherNodes.java @@ -0,0 +1,73 @@ +package com.atomix.example; + +import java.io.File; + +import java.util.Arrays; +import java.util.List; + +import io.atomix.AtomixReplica; +import io.atomix.catalyst.transport.Address; +import io.atomix.catalyst.transport.netty.NettyTransport; +import io.atomix.collections.DistributedMap; +import io.atomix.concurrent.DistributedLock; +import io.atomix.copycat.server.storage.Storage; +import io.atomix.copycat.server.storage.StorageLevel; + +public class OtherNodes { + + public static void main(String[] args) throws InterruptedException { + // TODO Auto-generated method stub + + List
cluster = Arrays.asList(new Address("localhost", 8700), new Address("localhost", 8701), new Address("localhost", 8702)); + + Storage storage = Storage.builder() + .withDirectory(new File("log")) + .withStorageLevel(StorageLevel.DISK) + .build(); + + AtomixReplica replica2 = AtomixReplica.builder(new Address("localhost", 8701)) + .withStorage(storage) + .withTransport(new NettyTransport()) + .build(); + + WorkerThread WT1 = new WorkerThread(replica2, cluster); + WT1.run(); + + AtomixReplica replica3 = AtomixReplica.builder(new Address("localhost", 8702)) + .withStorage(storage) + .withTransport(new NettyTransport()) + .build(); + + WorkerThread WT2 = new WorkerThread(replica3, cluster); + WT2.run(); + + Thread.sleep(6000); + + DistributedLock lock = replica2.getLock("my-lock") + .join(); + lock.lock() + .thenRun(() -> System.out.println("Acquired a lock")); + + DistributedMap map = replica2.getMap("map") + .join(); + + // Put a value in the map and call the completion callback on response + map.put("bar", "Hello world!") + .thenRun(() -> System.out.println("Value is set in Distributed Map")); + } + + private static class WorkerThread extends Thread { + AtomixReplica replica; + List
cluster; + + public WorkerThread(AtomixReplica replica, List
cluster) { + this.replica = replica; + this.cluster = cluster; + } + + public void run() { + replica.join(cluster) + .join(); + } + } +} \ No newline at end of file diff --git a/atomix/src/test/java/com/atomix/exampletest/ClientExampleTest.java b/atomix/src/test/java/com/atomix/exampletest/ClientExampleTest.java new file mode 100644 index 0000000000..7a378c486d --- /dev/null +++ b/atomix/src/test/java/com/atomix/exampletest/ClientExampleTest.java @@ -0,0 +1,38 @@ +package com.atomix.exampletest; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import io.atomix.AtomixClient; +import io.atomix.catalyst.transport.Address; +import io.atomix.catalyst.transport.netty.NettyTransport; +import io.atomix.collections.DistributedMap; + +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; + +public class ClientExampleTest { + + @Test + public void ExampleTest() throws InterruptedException { + AtomixClient client = AtomixClient.builder() + .withTransport(new NettyTransport()) + .build(); + + List
cluster = Arrays.asList(new Address("localhost", 8700), new Address("localhsot", 8701)); + client.connect(cluster) + .thenRun(() -> System.out.println("Client Connected")); + + Thread.sleep(5000); + + DistributedMap map = client.getMap("map") + .join(); + + String value = (String) map.get("bar") + .join(); + + assertEquals("Hello world!", value); + } + +} From 4c6e4c19a6f6836a778d3226c9929b6708c29c09 Mon Sep 17 00:00:00 2001 From: juan Date: Sat, 30 Sep 2017 18:17:38 -0300 Subject: [PATCH 2/5] Update Person class to use property "id" like identifier. --- .../main/java/com/baeldung/jsonb/Person.java | 44 +++++++------------ .../com/baeldung/jsonb/PersonController.java | 12 ++--- .../baeldung/jsonb/JsonbIntegrationTest.java | 7 ++- .../java/com/baeldung/jsonb/JsonbTest.java | 8 ++-- 4 files changed, 29 insertions(+), 42 deletions(-) diff --git a/spring-5/src/main/java/com/baeldung/jsonb/Person.java b/spring-5/src/main/java/com/baeldung/jsonb/Person.java index 99ebd54f0b..7a54b37574 100644 --- a/spring-5/src/main/java/com/baeldung/jsonb/Person.java +++ b/spring-5/src/main/java/com/baeldung/jsonb/Person.java @@ -10,6 +10,7 @@ import javax.json.bind.annotation.JsonbTransient; public class Person { + private int id; @JsonbProperty("person-name") private String name; @JsonbProperty(nillable = true) @@ -23,8 +24,9 @@ public class Person { public Person() { } - public Person(String name, String email, int age, LocalDate registeredDate, BigDecimal salary) { + public Person(int id, String name, String email, int age, LocalDate registeredDate, BigDecimal salary) { super(); + this.id = id; this.name = name; this.email = email; this.age = age; @@ -32,6 +34,14 @@ public class Person { this.salary = salary; } + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + public int getAge() { return age; } @@ -76,7 +86,9 @@ public class Person { @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("Person [name="); + builder.append("Person [id="); + builder.append(id); + builder.append(", name="); builder.append(name); builder.append(", email="); builder.append(email); @@ -94,11 +106,7 @@ public class Person { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + age; - result = prime * result + ((email == null) ? 0 : email.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - result = prime * result + ((registeredDate == null) ? 0 : registeredDate.hashCode()); - result = prime * result + ((salary == null) ? 0 : salary.hashCode()); + result = prime * result + id; return result; } @@ -111,27 +119,7 @@ public class Person { if (getClass() != obj.getClass()) return false; Person other = (Person) obj; - if (age != other.age) - return false; - if (email == null) { - if (other.email != null) - return false; - } else if (!email.equals(other.email)) - return false; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - if (registeredDate == null) { - if (other.registeredDate != null) - return false; - } else if (!registeredDate.equals(other.registeredDate)) - return false; - if (salary == null) { - if (other.salary != null) - return false; - } else if (!salary.equals(other.salary)) + if (id != other.id) return false; return true; } diff --git a/spring-5/src/main/java/com/baeldung/jsonb/PersonController.java b/spring-5/src/main/java/com/baeldung/jsonb/PersonController.java index 75fcd1e2cc..e216a282eb 100644 --- a/spring-5/src/main/java/com/baeldung/jsonb/PersonController.java +++ b/spring-5/src/main/java/com/baeldung/jsonb/PersonController.java @@ -26,12 +26,12 @@ public class PersonController { public void init() { // @formatter:off personRepository = new ArrayList<>(Arrays.asList( - new Person("Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), - new Person("Jhon", "jhon1@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500)), - new Person("Jhon", null, 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), - new Person("Tom", "tom@test.com", 21, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500)), - new Person("Mark", "mark@test.com", 21, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1200)), - new Person("Julia", "jhon@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)))); + new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), + new Person(2, "Jhon", "jhon1@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500)), + new Person(3, "Jhon", null, 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)), + new Person(4, "Tom", "tom@test.com", 21, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500)), + new Person(5, "Mark", "mark@test.com", 21, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1200)), + new Person(6, "Julia", "jhon@test.com", 20, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1000)))); // @formatter:on } diff --git a/spring-5/src/test/java/com/baeldung/jsonb/JsonbIntegrationTest.java b/spring-5/src/test/java/com/baeldung/jsonb/JsonbIntegrationTest.java index a31a16d610..756b303f3b 100644 --- a/spring-5/src/test/java/com/baeldung/jsonb/JsonbIntegrationTest.java +++ b/spring-5/src/test/java/com/baeldung/jsonb/JsonbIntegrationTest.java @@ -30,15 +30,14 @@ public class JsonbIntegrationTest { ResponseEntity response = template.withBasicAuth(username, password) .getForEntity("/person/1", Person.class); Person person = response.getBody(); - assertTrue(person.equals(new Person("Jhon", "jhon1@test.com", 0, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500.0)))); + assertTrue(person.equals(new Person(2, "Jhon", "jhon1@test.com", 0, LocalDate.of(2019, 9, 9), BigDecimal.valueOf(1500.0)))); } @Test public void whenSendPostAPerson_thenGetOkStatus() { ResponseEntity response = template.withBasicAuth(username, password) - .postForEntity("/person", "{\"birthDate\":\"07-09-2017\",\"email\":\"jhon1@test.com\",\"person-name\":\"Jhon\"}", Boolean.class); - boolean value = response.getBody(); - assertTrue(true == value); + .postForEntity("/person", "{\"birthDate\":\"07-09-2017\",\"email\":\"jhon1@test.com\",\"person-name\":\"Jhon\",\"id\":10}", Boolean.class); + assertTrue(response.getBody()); } } diff --git a/spring-5/src/test/java/com/baeldung/jsonb/JsonbTest.java b/spring-5/src/test/java/com/baeldung/jsonb/JsonbTest.java index 7133999551..4caab86f7d 100644 --- a/spring-5/src/test/java/com/baeldung/jsonb/JsonbTest.java +++ b/spring-5/src/test/java/com/baeldung/jsonb/JsonbTest.java @@ -22,15 +22,15 @@ public class JsonbTest { @Test public void givenPersonObject_whenSerializeWithJsonb_thenGetPersonJson() { - Person person = new Person("Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000)); + Person person = new Person(1, "Jhon", "jhon@test.com", 20, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000)); String jsonPerson = jsonb.toJson(person); - assertTrue("{\"email\":\"jhon@test.com\",\"person-name\":\"Jhon\",\"registeredDate\":\"07-09-2019\",\"salary\":\"1000.0\"}".equals(jsonPerson)); + assertTrue("{\"email\":\"jhon@test.com\",\"id\":1,\"person-name\":\"Jhon\",\"registeredDate\":\"07-09-2019\",\"salary\":\"1000.0\"}".equals(jsonPerson)); } @Test public void givenPersonJson_whenDeserializeWithJsonb_thenGetPersonObject() { - Person person = new Person("Jhon", "jhon@test.com", 0, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000.0)); - String jsonPerson = "{\"email\":\"jhon@test.com\",\"person-name\":\"Jhon\",\"registeredDate\":\"07-09-2019\",\"salary\":\"1000.0\"}"; + Person person = new Person(1, "Jhon", "jhon@test.com", 0, LocalDate.of(2019, 9, 7), BigDecimal.valueOf(1000.0)); + String jsonPerson = "{\"email\":\"jhon@test.com\",\"id\":1,\"person-name\":\"Jhon\",\"registeredDate\":\"07-09-2019\",\"salary\":\"1000.0\"}"; assertTrue(jsonb.fromJson(jsonPerson, Person.class) .equals(person)); } From d343c59a3c3cfa87e2622bcc7ea5116715c62b6c Mon Sep 17 00:00:00 2001 From: Parth Karia Date: Sun, 1 Oct 2017 12:16:48 +0530 Subject: [PATCH 3/5] BAEL-815 Move JGraphT code from libraries to algorithms (#2695) * BAEL-815 Introduction to JGraphT * BAEL-815 Move code from libraries to algorithms --- algorithms/pom.xml | 5 +++++ .../test/java/com/baeldung/jgrapht/CompleteGraphTest.java | 0 .../test/java/com/baeldung/jgrapht/DirectedGraphTests.java | 0 .../test/java/com/baeldung/jgrapht/EulerianCircuitTest.java | 0 libraries/pom.xml | 5 ----- 5 files changed, 5 insertions(+), 5 deletions(-) rename {libraries => algorithms}/src/test/java/com/baeldung/jgrapht/CompleteGraphTest.java (100%) rename {libraries => algorithms}/src/test/java/com/baeldung/jgrapht/DirectedGraphTests.java (100%) rename {libraries => algorithms}/src/test/java/com/baeldung/jgrapht/EulerianCircuitTest.java (100%) diff --git a/algorithms/pom.xml b/algorithms/pom.xml index 967bcbc706..e972f39494 100644 --- a/algorithms/pom.xml +++ b/algorithms/pom.xml @@ -34,6 +34,11 @@ jenetics 3.7.0 + + org.jgrapht + jgrapht-core + 1.0.1 + diff --git a/libraries/src/test/java/com/baeldung/jgrapht/CompleteGraphTest.java b/algorithms/src/test/java/com/baeldung/jgrapht/CompleteGraphTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/jgrapht/CompleteGraphTest.java rename to algorithms/src/test/java/com/baeldung/jgrapht/CompleteGraphTest.java diff --git a/libraries/src/test/java/com/baeldung/jgrapht/DirectedGraphTests.java b/algorithms/src/test/java/com/baeldung/jgrapht/DirectedGraphTests.java similarity index 100% rename from libraries/src/test/java/com/baeldung/jgrapht/DirectedGraphTests.java rename to algorithms/src/test/java/com/baeldung/jgrapht/DirectedGraphTests.java diff --git a/libraries/src/test/java/com/baeldung/jgrapht/EulerianCircuitTest.java b/algorithms/src/test/java/com/baeldung/jgrapht/EulerianCircuitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/jgrapht/EulerianCircuitTest.java rename to algorithms/src/test/java/com/baeldung/jgrapht/EulerianCircuitTest.java diff --git a/libraries/pom.xml b/libraries/pom.xml index 03919b9cec..97ddff96ec 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -585,11 +585,6 @@ fugue 3.0.0-m007 - - org.jgrapht - jgrapht-core - 1.0.1 - From 322091376724f52ecfe539ddd349e601abb551ea Mon Sep 17 00:00:00 2001 From: Shaimaa Shalaby Date: Sun, 1 Oct 2017 23:53:09 +0200 Subject: [PATCH 4/5] From JDO to XML and Back Again 2/3 (#2681) * From JDO to XML and Back Again 2/3 * remove comments * remove myapp class * divided into methods * remove main methods * remove classes --- .../com/baeldung/jdo/xml/AnnotadedPerson.java | 72 ++++++++++++ .../main/java/com/baeldung/jdo/xml/MyApp.java | 105 ++++++++++++++++++ .../java/com/baeldung/jdo/xml/Person.java | 65 +++++++++++ .../java/com/baeldung/jdo/xml/Product.java | 58 ++++++++++ .../resources/META-INF/datanucleus.properties | 4 + .../src/main/resources/META-INF/jdoconfig.xml | 17 +++ .../src/main/resources/META-INF/package.jdo | 21 ++++ 7 files changed, 342 insertions(+) create mode 100644 libraries/src/main/java/com/baeldung/jdo/xml/AnnotadedPerson.java create mode 100644 libraries/src/main/java/com/baeldung/jdo/xml/MyApp.java create mode 100644 libraries/src/main/java/com/baeldung/jdo/xml/Person.java create mode 100644 libraries/src/main/java/com/baeldung/jdo/xml/Product.java create mode 100644 libraries/src/main/resources/META-INF/datanucleus.properties create mode 100644 libraries/src/main/resources/META-INF/jdoconfig.xml create mode 100644 libraries/src/main/resources/META-INF/package.jdo diff --git a/libraries/src/main/java/com/baeldung/jdo/xml/AnnotadedPerson.java b/libraries/src/main/java/com/baeldung/jdo/xml/AnnotadedPerson.java new file mode 100644 index 0000000000..53e86524a5 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/jdo/xml/AnnotadedPerson.java @@ -0,0 +1,72 @@ +package com.baeldung.jdo.xml; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.jdo.annotations.Element; +import javax.jdo.annotations.PersistenceCapable; +import javax.jdo.annotations.PrimaryKey; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; + +@PersistenceCapable( + schema="/myproduct/people", + table="person" + ) +public class AnnotadedPerson { + @XmlAttribute + private long personNum; + + @PrimaryKey + private String firstName; + private String lastName; + + @XmlElementWrapper(name="phone-numbers") + @XmlElement(name="phone-number") + @Element(types=String.class) + private List phoneNumbers = new ArrayList(); + + + public AnnotadedPerson(long personNum, String firstName, String lastName) { + super(); + this.personNum = personNum; + this.firstName = firstName; + this.lastName = lastName; + } + + public long getPersonNum() { + return personNum; + } + + public void setPersonNum(long personNum) { + this.personNum = personNum; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public List getPhoneNumbers() { + return phoneNumbers; + } + + public void setPhoneNumbers(List phoneNumbers) { + this.phoneNumbers = phoneNumbers; + } + +} diff --git a/libraries/src/main/java/com/baeldung/jdo/xml/MyApp.java b/libraries/src/main/java/com/baeldung/jdo/xml/MyApp.java new file mode 100644 index 0000000000..97ec49eec1 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/jdo/xml/MyApp.java @@ -0,0 +1,105 @@ +package com.baeldung.jdo.xml; + +import java.util.List; + +import javax.jdo.JDOHelper; +import javax.jdo.PersistenceManager; +import javax.jdo.PersistenceManagerFactory; +import javax.jdo.Query; +import javax.jdo.Transaction; + +import org.datanucleus.api.jdo.JDOPersistenceManagerFactory; +import org.datanucleus.metadata.PersistenceUnitMetaData; + +public class MyApp { + + private static PersistenceUnitMetaData pumd; + private static PersistenceManagerFactory pmf; + private static PersistenceManager pm; + + public static void main( String[] args ) { + + //persist product object using dynamic persistence unit + defineDynamicPersistentUnit(); + Product product = new Product("id1","Sony Discman", "A standard discman from Sony", 49.99); + persistObject(product); + closePersistenceManager(); + + //persist AnnotatedPerson object using named pmf + defineNamedPersistenceManagerFactory("XmlDatastore"); + AnnotadedPerson annotatedPerson = new AnnotadedPerson(654320,"annotated","person"); + annotatedPerson.getPhoneNumbers().add("999999999"); + annotatedPerson.getPhoneNumbers().add("000000000"); + persistObject(annotatedPerson); + queryAnnotatedPersonsInXML(); + closePersistenceManager(); + + //persist Person object using PMF created by properties file + definePersistenceManagerFactoryUsingPropertiesFile("META-INF\\datanucleus.properties"); + Person person = new Person(654321,"bealdung","author"); + person.getPhoneNumbers().add("123456789"); + person.getPhoneNumbers().add("987654321"); + persistObject(person); + queryPersonsInXML(); + closePersistenceManager(); + } + + public static void defineDynamicPersistentUnit(){ + + PersistenceUnitMetaData pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null); + pumd.addProperty("javax.jdo.option.ConnectionURL", "xml:file:myfile_dynamicPMF.xml"); + pumd.addProperty("datanucleus.schema.autoCreateAll", "true"); + pumd.addProperty("datanucleus.xml.indentSize", "4"); + + pmf = new JDOPersistenceManagerFactory(pumd, null); + pm = pmf.getPersistenceManager(); + } + + public static void defineNamedPersistenceManagerFactory(String pmfName){ + + pmf = JDOHelper.getPersistenceManagerFactory("XmlDatastore"); + pm = pmf.getPersistenceManager(); + } + + public static void definePersistenceManagerFactoryUsingPropertiesFile(String filePath){ + + pmf = JDOHelper.getPersistenceManagerFactory(filePath); + pm = pmf.getPersistenceManager(); + } + + public static void closePersistenceManager(){ + + if(pm!=null && !pm.isClosed()){ + pm.close(); + } + } + + public static void persistObject(Object obj){ + + Transaction tx = pm.currentTransaction(); + + try { + tx.begin(); + pm.makePersistent(obj); + tx.commit(); + } finally { + if (tx.isActive()) { + tx.rollback(); + } + } + } + + public static void queryPersonsInXML(){ + + Query query = pm.newQuery(Person.class); + List result = query.executeList(); + System.out.println("name: "+result.get(0).getFirstName()); + } + + public static void queryAnnotatedPersonsInXML(){ + + Query query = pm.newQuery(AnnotadedPerson.class); + List result = query.executeList(); + System.out.println("name: "+result.get(0).getFirstName()); + } +} diff --git a/libraries/src/main/java/com/baeldung/jdo/xml/Person.java b/libraries/src/main/java/com/baeldung/jdo/xml/Person.java new file mode 100644 index 0000000000..e3ec5c6bab --- /dev/null +++ b/libraries/src/main/java/com/baeldung/jdo/xml/Person.java @@ -0,0 +1,65 @@ +package com.baeldung.jdo.xml; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.jdo.annotations.Element; +import javax.jdo.annotations.PersistenceCapable; +import javax.jdo.annotations.PrimaryKey; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; + + +@PersistenceCapable +public class Person { + private long personNum; + + @PrimaryKey + private String firstName; + private String lastName; + + private List phoneNumbers = new ArrayList(); + + public Person(long personNum, String firstName, String lastName) { + super(); + this.personNum = personNum; + this.firstName = firstName; + this.lastName = lastName; + } + + public long getPersonNum() { + return personNum; + } + + public void setPersonNum(long personNum) { + this.personNum = personNum; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public List getPhoneNumbers() { + return phoneNumbers; + } + + public void setPhoneNumbers(List phoneNumbers) { + this.phoneNumbers = phoneNumbers; + } + +} diff --git a/libraries/src/main/java/com/baeldung/jdo/xml/Product.java b/libraries/src/main/java/com/baeldung/jdo/xml/Product.java new file mode 100644 index 0000000000..d8d3bb17b2 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/jdo/xml/Product.java @@ -0,0 +1,58 @@ +package com.baeldung.jdo.xml; + +import javax.jdo.annotations.IdGeneratorStrategy; +import javax.jdo.annotations.PersistenceAware; +import javax.jdo.annotations.PersistenceCapable; +import javax.jdo.annotations.Persistent; +import javax.jdo.annotations.PrimaryKey; + +@PersistenceCapable +public class Product { + + @PrimaryKey + String id; + String name; + String description; + double price; + + public Product(){ + + } + + public Product(String id,String name,String description,double price){ + this.id = id; + this.name=name; + this.description = description; + this.price = price; + } + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public double getPrice() { + return price; + } + public void setPrice(double price) { + this.price = price; + } + + +} diff --git a/libraries/src/main/resources/META-INF/datanucleus.properties b/libraries/src/main/resources/META-INF/datanucleus.properties new file mode 100644 index 0000000000..a3cd4a450a --- /dev/null +++ b/libraries/src/main/resources/META-INF/datanucleus.properties @@ -0,0 +1,4 @@ +javax.jdo.PersistenceManagerFactoryClass=org.datanucleus.api.jdo.JDOPersistenceManagerFactory +javax.jdo.option.ConnectionURL= xml:file:myfile-ds.xml +datanucleus.xml.indentSize=6 +datanucleus.schema.autoCreateAll=true \ No newline at end of file diff --git a/libraries/src/main/resources/META-INF/jdoconfig.xml b/libraries/src/main/resources/META-INF/jdoconfig.xml new file mode 100644 index 0000000000..77da460686 --- /dev/null +++ b/libraries/src/main/resources/META-INF/jdoconfig.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/src/main/resources/META-INF/package.jdo b/libraries/src/main/resources/META-INF/package.jdo new file mode 100644 index 0000000000..d30207e2e0 --- /dev/null +++ b/libraries/src/main/resources/META-INF/package.jdo @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file From 7cb94f676ccd3056f77ce2a8c502416e7ebabc8a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 2 Oct 2017 12:53:26 +0200 Subject: [PATCH 5/5] Refactor Atomix samples (#2696) --- atomix/pom.xml | 77 ++++++++++--------- .../atomix/example/BootstrapingCluster.java | 21 +++-- .../com/atomix/example/ClientExample.java | 32 -------- .../java/com/atomix/example/OtherNodes.java | 58 +++++++------- .../exampletest/AtomixClientLiveTest.java | 35 +++++++++ .../atomix/exampletest/ClientExampleTest.java | 38 --------- pom.xml | 1 + 7 files changed, 114 insertions(+), 148 deletions(-) delete mode 100644 atomix/src/main/java/com/atomix/example/ClientExample.java create mode 100644 atomix/src/test/java/com/atomix/exampletest/AtomixClientLiveTest.java delete mode 100644 atomix/src/test/java/com/atomix/exampletest/ClientExampleTest.java diff --git a/atomix/pom.xml b/atomix/pom.xml index ec54f896d1..80c573dd86 100644 --- a/atomix/pom.xml +++ b/atomix/pom.xml @@ -1,41 +1,46 @@ - 4.0.0 - com.atomix.io - atomix - 0.0.1-SNAPSHOT + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.atomix.io + atomix + 0.0.1-SNAPSHOT - - - io.atomix - atomix-all - 1.0.0-rc9 - - - junit - junit - 4.9 - test - - - log4j - log4j - 1.2.17 - - - - src - - - maven-compiler-plugin - 3.7.0 - - 1.8 - 1.8 - - - - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + io.atomix + atomix-all + 1.0.0-rc9 + + + junit + junit + 4.9 + test + + + log4j + log4j + 1.2.17 + + + + + + maven-compiler-plugin + 3.7.0 + + 1.8 + 1.8 + + + + diff --git a/atomix/src/main/java/com/atomix/example/BootstrapingCluster.java b/atomix/src/main/java/com/atomix/example/BootstrapingCluster.java index 7fce4cae5f..6c5c94d307 100644 --- a/atomix/src/main/java/com/atomix/example/BootstrapingCluster.java +++ b/atomix/src/main/java/com/atomix/example/BootstrapingCluster.java @@ -1,30 +1,27 @@ package com.atomix.example; -import java.io.File; -import java.util.concurrent.CompletableFuture; - import io.atomix.AtomixReplica; import io.atomix.catalyst.transport.Address; import io.atomix.catalyst.transport.netty.NettyTransport; import io.atomix.copycat.server.storage.Storage; import io.atomix.copycat.server.storage.StorageLevel; +import java.io.File; +import java.util.concurrent.CompletableFuture; + public class BootstrapingCluster { public static void main(String[] args) { - // TODO Auto-generated method stub - Storage storage = Storage.builder() - .withDirectory(new File("log")) - .withStorageLevel(StorageLevel.DISK) - .build(); + .withDirectory(new File("log")) + .withStorageLevel(StorageLevel.DISK) + .build(); AtomixReplica replica = AtomixReplica.builder(new Address("localhost", 8700)) - .withStorage(storage) - .withTransport(new NettyTransport()) - .build(); + .withStorage(storage) + .withTransport(new NettyTransport()) + .build(); CompletableFuture completableFuture = replica.bootstrap(); completableFuture.join(); - } } diff --git a/atomix/src/main/java/com/atomix/example/ClientExample.java b/atomix/src/main/java/com/atomix/example/ClientExample.java deleted file mode 100644 index 1cfaed76a5..0000000000 --- a/atomix/src/main/java/com/atomix/example/ClientExample.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.atomix.example; - -import java.util.Arrays; -import java.util.List; - -import io.atomix.AtomixClient; -import io.atomix.catalyst.transport.Address; -import io.atomix.catalyst.transport.netty.NettyTransport; -import io.atomix.collections.DistributedMap; - -public class ClientExample { - - public static void main(String args[]) throws InterruptedException { - AtomixClient client = AtomixClient.builder() - .withTransport(new NettyTransport()) - .build(); - - List
cluster = Arrays.asList(new Address("localhost", 8700), new Address("localhsot", 8701)); - client.connect(cluster) - .thenRun(() -> System.out.println("Client Connected")); - - Thread.sleep(5000); - - DistributedMap map = client.getMap("map") - .join(); - - String value = (String) map.get("bar") - .join(); - System.out.println("Value: " + value); - - } -} \ No newline at end of file diff --git a/atomix/src/main/java/com/atomix/example/OtherNodes.java b/atomix/src/main/java/com/atomix/example/OtherNodes.java index ae4c3eef2f..e5688b062f 100644 --- a/atomix/src/main/java/com/atomix/example/OtherNodes.java +++ b/atomix/src/main/java/com/atomix/example/OtherNodes.java @@ -1,42 +1,42 @@ package com.atomix.example; -import java.io.File; - -import java.util.Arrays; -import java.util.List; - import io.atomix.AtomixReplica; import io.atomix.catalyst.transport.Address; import io.atomix.catalyst.transport.netty.NettyTransport; -import io.atomix.collections.DistributedMap; import io.atomix.concurrent.DistributedLock; import io.atomix.copycat.server.storage.Storage; import io.atomix.copycat.server.storage.StorageLevel; +import java.io.File; +import java.util.Arrays; +import java.util.List; + public class OtherNodes { public static void main(String[] args) throws InterruptedException { - // TODO Auto-generated method stub - - List
cluster = Arrays.asList(new Address("localhost", 8700), new Address("localhost", 8701), new Address("localhost", 8702)); + List
cluster = Arrays + .asList( + new Address("localhost", 8700), + new Address("localhost", 8701), + new Address("localhost", 8702)); Storage storage = Storage.builder() - .withDirectory(new File("log")) - .withStorageLevel(StorageLevel.DISK) - .build(); + .withDirectory(new File("log")) + .withStorageLevel(StorageLevel.DISK) + .build(); AtomixReplica replica2 = AtomixReplica.builder(new Address("localhost", 8701)) - .withStorage(storage) - .withTransport(new NettyTransport()) - .build(); + .withStorage(storage) + .withTransport(new NettyTransport()) + .build(); WorkerThread WT1 = new WorkerThread(replica2, cluster); WT1.run(); AtomixReplica replica3 = AtomixReplica.builder(new Address("localhost", 8702)) - .withStorage(storage) - .withTransport(new NettyTransport()) - .build(); + .withStorage(storage) + .withTransport(new NettyTransport()) + .build(); WorkerThread WT2 = new WorkerThread(replica3, cluster); WT2.run(); @@ -44,30 +44,28 @@ public class OtherNodes { Thread.sleep(6000); DistributedLock lock = replica2.getLock("my-lock") - .join(); + .join(); lock.lock() - .thenRun(() -> System.out.println("Acquired a lock")); + .thenRun(() -> System.out.println("Acquired a lock")); - DistributedMap map = replica2.getMap("map") - .join(); - - // Put a value in the map and call the completion callback on response - map.put("bar", "Hello world!") - .thenRun(() -> System.out.println("Value is set in Distributed Map")); + replica2.getMap("map") + .thenCompose(m -> m.put("bar", "Hello world!")) + .thenRun(() -> System.out.println("Value is set in Distributed Map")) + .join(); } private static class WorkerThread extends Thread { - AtomixReplica replica; - List
cluster; + private AtomixReplica replica; + private List
cluster; - public WorkerThread(AtomixReplica replica, List
cluster) { + WorkerThread(AtomixReplica replica, List
cluster) { this.replica = replica; this.cluster = cluster; } public void run() { replica.join(cluster) - .join(); + .join(); } } } \ No newline at end of file diff --git a/atomix/src/test/java/com/atomix/exampletest/AtomixClientLiveTest.java b/atomix/src/test/java/com/atomix/exampletest/AtomixClientLiveTest.java new file mode 100644 index 0000000000..9268a4a69b --- /dev/null +++ b/atomix/src/test/java/com/atomix/exampletest/AtomixClientLiveTest.java @@ -0,0 +1,35 @@ +package com.atomix.exampletest; + +import io.atomix.AtomixClient; +import io.atomix.catalyst.transport.Address; +import io.atomix.catalyst.transport.netty.NettyTransport; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import static org.junit.Assert.assertEquals; + +public class AtomixClientLiveTest { + + private final AtomixClient client = AtomixClient.builder() + .withTransport(new NettyTransport()) + .build(); + + @Test + public void whenBootstrap_thenShouldGet() throws InterruptedException, ExecutionException { + List
cluster = Arrays.asList( + new Address("localhost", 8700), + new Address("localhsot", 8701)); + + String value = client.connect(cluster) + .thenRun(() -> System.out.println("Client Connected")) + .thenCompose(c -> client.getMap("map")) + .thenCompose(m -> m.get("bar")) + .thenApply(a -> (String) a) + .get(); + + assertEquals("Hello world!", value); + } +} diff --git a/atomix/src/test/java/com/atomix/exampletest/ClientExampleTest.java b/atomix/src/test/java/com/atomix/exampletest/ClientExampleTest.java deleted file mode 100644 index 7a378c486d..0000000000 --- a/atomix/src/test/java/com/atomix/exampletest/ClientExampleTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.atomix.exampletest; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import io.atomix.AtomixClient; -import io.atomix.catalyst.transport.Address; -import io.atomix.catalyst.transport.netty.NettyTransport; -import io.atomix.collections.DistributedMap; - -import java.util.Arrays; -import java.util.List; - -import org.junit.Test; - -public class ClientExampleTest { - - @Test - public void ExampleTest() throws InterruptedException { - AtomixClient client = AtomixClient.builder() - .withTransport(new NettyTransport()) - .build(); - - List
cluster = Arrays.asList(new Address("localhost", 8700), new Address("localhsot", 8701)); - client.connect(cluster) - .thenRun(() -> System.out.println("Client Connected")); - - Thread.sleep(5000); - - DistributedMap map = client.getMap("map") - .join(); - - String value = (String) map.get("bar") - .join(); - - assertEquals("Hello world!", value); - } - -} diff --git a/pom.xml b/pom.xml index dd0871ae79..ff4b490c6b 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,7 @@ + atomix apache-cayenne aws akka-streams