Adding user to their own contacts, reusing one database transaction
Fixes #15
This commit is contained in:
parent
f2ac9bbf8e
commit
bacc171ccd
@ -44,6 +44,10 @@ public class Startup {
|
|||||||
|
|
||||||
server.start();
|
server.start();
|
||||||
server.getSocketProcessor().registerSocketIdListener(ConnectionManager.getInstance());
|
server.getSocketProcessor().registerSocketIdListener(ConnectionManager.getInstance());
|
||||||
|
|
||||||
|
System.out.println("Press any key to stop the server...");
|
||||||
|
System.in.read();
|
||||||
|
System.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void initializeCurrentMessageId() {
|
private static void initializeCurrentMessageId() {
|
||||||
|
@ -3,6 +3,7 @@ package envoy.server.database;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.EntityTransaction;
|
||||||
import javax.persistence.Persistence;
|
import javax.persistence.Persistence;
|
||||||
|
|
||||||
import envoy.server.data.ConfigItem;
|
import envoy.server.data.ConfigItem;
|
||||||
@ -19,6 +20,9 @@ import envoy.server.data.User;
|
|||||||
*/
|
*/
|
||||||
public class PersistenceManager {
|
public class PersistenceManager {
|
||||||
|
|
||||||
|
private final EntityManager entityManager = Persistence.createEntityManagerFactory("envoy").createEntityManager();
|
||||||
|
private final EntityTransaction transaction = entityManager.getTransaction();
|
||||||
|
|
||||||
private static final PersistenceManager persistenceManager = new PersistenceManager();
|
private static final PersistenceManager persistenceManager = new PersistenceManager();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -26,7 +30,10 @@ public class PersistenceManager {
|
|||||||
*
|
*
|
||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
private PersistenceManager() {}
|
private PersistenceManager() {
|
||||||
|
transaction.begin();
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> transaction.commit()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the {@link PersistenceManager} singleton
|
* @return the {@link PersistenceManager} singleton
|
||||||
@ -34,8 +41,6 @@ public class PersistenceManager {
|
|||||||
*/
|
*/
|
||||||
public static PersistenceManager getPersistenceManager() { return persistenceManager; }
|
public static PersistenceManager getPersistenceManager() { return persistenceManager; }
|
||||||
|
|
||||||
private EntityManager entityManager = Persistence.createEntityManagerFactory("envoy").createEntityManager();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a {@link User} to the database.
|
* Adds a {@link User} to the database.
|
||||||
*
|
*
|
||||||
@ -43,9 +48,8 @@ public class PersistenceManager {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void addUser(User User) {
|
public void addUser(User User) {
|
||||||
entityManager.getTransaction().begin();
|
|
||||||
entityManager.persist(User);
|
entityManager.persist(User);
|
||||||
entityManager.getTransaction().commit();
|
entityManager.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,9 +59,8 @@ public class PersistenceManager {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void addMessage(Message message) {
|
public void addMessage(Message message) {
|
||||||
entityManager.getTransaction().begin();
|
|
||||||
entityManager.persist(message);
|
entityManager.persist(message);
|
||||||
entityManager.getTransaction().commit();
|
entityManager.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,9 +70,8 @@ public class PersistenceManager {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void addConfigItem(ConfigItem configItem) {
|
public void addConfigItem(ConfigItem configItem) {
|
||||||
entityManager.getTransaction().begin();
|
|
||||||
entityManager.persist(configItem);
|
entityManager.persist(configItem);
|
||||||
entityManager.getTransaction().commit();
|
entityManager.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -79,9 +81,8 @@ public class PersistenceManager {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void updateUser(User user) {
|
public void updateUser(User user) {
|
||||||
entityManager.getTransaction().begin();
|
|
||||||
entityManager.merge(user);
|
entityManager.merge(user);
|
||||||
entityManager.getTransaction().commit();
|
entityManager.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -91,9 +92,8 @@ public class PersistenceManager {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void updateMessage(Message message) {
|
public void updateMessage(Message message) {
|
||||||
entityManager.getTransaction().begin();
|
|
||||||
entityManager.merge(message);
|
entityManager.merge(message);
|
||||||
entityManager.getTransaction().commit();
|
entityManager.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,9 +103,8 @@ public class PersistenceManager {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void updateConfigItem(ConfigItem configItem) {
|
public void updateConfigItem(ConfigItem configItem) {
|
||||||
entityManager.getTransaction().begin();
|
|
||||||
entityManager.merge(configItem);
|
entityManager.merge(configItem);
|
||||||
entityManager.getTransaction().commit();
|
entityManager.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -115,9 +114,8 @@ public class PersistenceManager {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void deleteUser(User user) {
|
public void deleteUser(User user) {
|
||||||
entityManager.getTransaction().begin();
|
|
||||||
entityManager.remove(user);
|
entityManager.remove(user);
|
||||||
entityManager.getTransaction().commit();
|
entityManager.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -127,9 +125,8 @@ public class PersistenceManager {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public void deleteMessage(Message message) {
|
public void deleteMessage(Message message) {
|
||||||
entityManager.getTransaction().begin();
|
|
||||||
entityManager.remove(message);
|
entityManager.remove(message);
|
||||||
entityManager.getTransaction().commit();
|
entityManager.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -33,6 +33,7 @@ public class ObjectMessageProcessor implements IMessageProcessor {
|
|||||||
*/
|
*/
|
||||||
public ObjectMessageProcessor(Set<ObjectProcessor<?>> processors) { this.processors = processors; }
|
public ObjectMessageProcessor(Set<ObjectProcessor<?>> processors) { this.processors = processors; }
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
@Override
|
@Override
|
||||||
public void process(Message message, WriteProxy writeProxy) {
|
public void process(Message message, WriteProxy writeProxy) {
|
||||||
try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) {
|
try (ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(message.sharedArray, message.offset + 4, message.length - 4))) {
|
||||||
|
@ -54,6 +54,7 @@ public class LoginCredentialProcessor implements ObjectProcessor<LoginCredential
|
|||||||
// Create contacts
|
// Create contacts
|
||||||
Contacts contacts = new Contacts(user.getId(),
|
Contacts contacts = new Contacts(user.getId(),
|
||||||
user.getContacts().stream().map(envoy.server.data.User::toCommonUser).collect(Collectors.toList()));
|
user.getContacts().stream().map(envoy.server.data.User::toCommonUser).collect(Collectors.toList()));
|
||||||
|
contacts.getContacts().add(user.toCommonUser());
|
||||||
|
|
||||||
// Complete handshake
|
// Complete handshake
|
||||||
System.out.println("Sending user...");
|
System.out.println("Sending user...");
|
||||||
|
Reference in New Issue
Block a user