queues, and posting to db works

This commit is contained in:
Daniel
2024-12-13 00:03:02 +02:00
parent 8b5f755152
commit 20b7465d6b
9 changed files with 171 additions and 76 deletions

View File

@@ -15,7 +15,11 @@
<artifactId>gson</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>io.javalin</groupId>
<artifactId>javalin</artifactId>
<version>6.3.0</version>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>

View File

@@ -1,16 +1,59 @@
package io.github.lumijiez;
import io.github.lumijiez.data.Data;
import io.github.lumijiez.data.entities.PushData;
import io.github.lumijiez.raft.Raft;
import io.javalin.Javalin;
import io.javalin.http.Context;
import jakarta.persistence.EntityManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Main {
public static final String HOST = System.getenv().getOrDefault("HOSTNAME", "localhost");
public static final int PORT = Integer.parseInt(System.getenv().getOrDefault("UDP_PORT", "8084"));
public static final int HTTP_PORT = Integer.parseInt(System.getenv().getOrDefault("PORT", "8080"));
private static final Logger logger = LogManager.getLogger(Main.class);
public static void main(String[] args) {
try {
Thread raftThread = new Thread(() -> {
Raft raft = new Raft();
Thread.currentThread().join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
try {
Thread.currentThread().join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
logger.error("Raft thread interrupted", e);
}
});
raftThread.start();
Javalin app = Javalin.create().start(HTTP_PORT);
app.post("/push", Main::handlePush);
logger.info("HTTP server started on port {}", HTTP_PORT);
}
private static void handlePush(Context ctx) {
String data = ctx.body();
logger.info("Received data for push: {}", data);
EntityManager entityManager = Data.getEntityManager();
try {
entityManager.getTransaction().begin();
PushData entity = new PushData(HOST + ":" + PORT, data);
entityManager.persist(entity);
entityManager.getTransaction().commit();
ctx.status(200).result("Data pushed successfully");
} catch (Exception e) {
logger.error("Error saving data to database", e);
entityManager.getTransaction().rollback();
ctx.status(500).result("Internal Server Error");
} finally {
entityManager.close();
}
}
}

View File

@@ -0,0 +1,50 @@
package io.github.lumijiez.data.entities;
import jakarta.persistence.*;
@Entity
@Table(name = "push_data")
public class PushData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String nodeAddress;
@Column(nullable = false)
private String data;
public PushData() {
}
public PushData(String nodeAddress, String data) {
this.nodeAddress = nodeAddress;
this.data = data;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNodeAddress() {
return nodeAddress;
}
public void setNodeAddress(String nodeAddress) {
this.nodeAddress = nodeAddress;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}

View File

@@ -1,47 +0,0 @@
package io.github.lumijiez.data.entities;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name="users")
public class User {
@Id
private Long id;
private String name;
private String email;
public User() {}
public User(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}

View File

@@ -135,7 +135,7 @@ public class Raft {
String jsonBody = String.format(
"{\"leaderHost\": \"%s\", \"leaderPort\": %d}",
selfAddress.split(":")[0], selfPort
selfAddress.split(":")[0], Main.HTTP_PORT
);
try (OutputStream os = connection.getOutputStream()) {

View File

@@ -7,7 +7,7 @@
<persistence-unit name="mainUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>io.github.lumijiez.data.entities.User</class>
<class>io.github.lumijiez.data.entities.PushData</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>