Switched to merge over persist and update

This commit is contained in:
Norbi Peti 2016-08-01 13:46:29 +02:00
parent a3d5f290a6
commit 1a1772fabf
8 changed files with 49 additions and 61 deletions

View file

@ -49,6 +49,7 @@ body {
height: -moz-calc(100% - 50px); height: -moz-calc(100% - 50px);
height: -webkit-calc(100% - 50px); height: -webkit-calc(100% - 50px);
height: calc(100% - 50px); height: calc(100% - 50px);
overflow: auto;
} }
html, body { html, body {

View file

@ -116,7 +116,7 @@ public class IOHelper {
// provider.SetValues(() -> // provider.SetValues(() ->
// user.setSessionid(UUID.randomUUID().toString())); // user.setSessionid(UUID.randomUUID().toString()));
user.setSessionid(UUID.randomUUID().toString()); user.setSessionid(UUID.randomUUID().toString());
provider.save(user); user = provider.save(user);
ZonedDateTime expiretime = ZonedDateTime.now(ZoneId.of("GMT")).plus(Period.of(2, 0, 0)); ZonedDateTime expiretime = ZonedDateTime.now(ZoneId.of("GMT")).plus(Period.of(2, 0, 0));
exchange.getResponseHeaders().add("Set-Cookie", exchange.getResponseHeaders().add("Set-Cookie",
"user_id=" + user.getId() + "; expires=" + expiretime.format(DateTimeFormatter.RFC_1123_DATE_TIME)); "user_id=" + user.getId() + "; expires=" + expiretime.format(DateTimeFormatter.RFC_1123_DATE_TIME));

View file

@ -38,44 +38,42 @@ public class Main {
user2.setName("Teszt"); // TODO: user2.setName("Teszt"); // TODO:
// http://www.journaldev.com/3524/spring-hibernate-integration-example-tutorial // http://www.journaldev.com/3524/spring-hibernate-integration-example-tutorial
user2.setEmail("test2@test.com"); user2.setEmail("test2@test.com");
user2.getContacts().add(user); user = provider.save(user);
provider.save(user); user2 = provider.save(user2);
List<User> users = provider.getUsers();
user = users.get(0);
user.getContacts().add(user2); user.getContacts().add(user2);
provider.save(user2); user2.getContacts().add(user);
users = provider.getUsers();
user2 = users.get(1);
LogManager.getLogger().log(Level.DEBUG, users);
LogManager.getLogger().log(Level.DEBUG, "1st's contact: " + user.getContacts().get(0)); LogManager.getLogger().log(Level.DEBUG, "1st's contact: " + user.getContacts().get(0));
LogManager.getLogger().log(Level.DEBUG, "2nd's contact: " + user2.getContacts().get(0)); LogManager.getLogger().log(Level.DEBUG, "2nd's contact: " + user2.getContacts().get(0));
Conversation convo = new Conversation(); Conversation conversation = new Conversation();
//convo.getUsers().add(user); conversation = provider.save(conversation);
//user.getConversations().add(convo); conversation.getUsers().add(user);
//convo.getUsers().add(user2); user.getConversations().add(conversation);
//user2.getConversations().add(convo); //TODO: Fix duplicate LogManager.getLogger().debug("User: " + user);
conversation.getUsers().add(user2);
LogManager.getLogger().debug("User2: " + user2);
user2.getConversations().add(conversation); // TODO: Fix
// duplicate
// key constraint // key constraint
Message msg = new Message(); Message msg = new Message();
msg.setSender(user); msg.setSender(user);
msg.setTime(new Date()); msg.setTime(new Date());
msg.setMessage("Teszt 1"); msg.setMessage("Teszt 1");
convo.getMesssages().add(msg); conversation.getMesssages().add(msg);
Message msg2 = new Message(); Message msg2 = new Message();
msg2.setSender(user2); msg2.setSender(user2);
msg2.setTime(new Date()); msg2.setTime(new Date());
msg2.setMessage("Teszt 2"); msg2.setMessage("Teszt 2");
convo.getMesssages().add(msg2); conversation.getMesssages().add(msg2);
provider.save(convo); // provider.save(user);
provider.save(user); // provider.save(user2);
provider.save(user2); /*
User loggedinuser = new User(); * User loggedinuser = new User(); provider.save(loggedinuser);
loggedinuser.setName("NorbiPeti"); * loggedinuser.setName("NorbiPeti"); loggedinuser.setSessionid(
loggedinuser.setSessionid("093b1395-8c31-4f3b-ba67-828a755af92e"); * "093b1395-8c31-4f3b-ba67-828a755af92e");
loggedinuser.setEmail("sznp@asd.com"); * loggedinuser.setEmail("sznp@asd.com");
convo.getUsers().add(loggedinuser); * conversation.getUsers().add(loggedinuser);
loggedinuser.getConversations().add(convo); * loggedinuser.getConversations().add(conversation);
provider.save(loggedinuser); */
provider.save(convo);
} }
LogManager.getLogger().log(Level.INFO, "Starting webserver..."); LogManager.getLogger().log(Level.INFO, "Starting webserver...");
HttpServer server = HttpServer.create(new InetSocketAddress(InetAddress.getLocalHost(), 8080), 10); HttpServer server = HttpServer.create(new InetSocketAddress(InetAddress.getLocalHost(), 8080), 10);

View file

@ -13,24 +13,17 @@ import io.github.norbipeti.chat.server.db.domain.*;
public class DataProvider implements AutoCloseable { public class DataProvider implements AutoCloseable {
private EntityManagerFactory emf; private EntityManagerFactory emf;
private EntityManager em;
public DataProvider() { public DataProvider() {
emf = Persistence.createEntityManagerFactory("ChatServerPU"); emf = Persistence.createEntityManagerFactory("ChatServerPU");
em = emf.createEntityManager();
em.getTransaction().begin();
} }
public <T extends ChatDatabaseEntity> void save(T object) { public <T extends ChatDatabaseEntity> T save(T object) {
EntityManager em = null; T obj = em.merge(object);
try { return obj;
em = emf.createEntityManager();
em.getTransaction().begin();
Session s = em.unwrap(Session.class);
s.saveOrUpdate(object);
em.persist(object);
em.getTransaction().commit();
} finally {
em.close();
}
} }
public List<User> getUsers() { public List<User> getUsers() {
@ -46,21 +39,15 @@ public class DataProvider implements AutoCloseable {
} }
private <T> List<T> get(Class<T> cl) { private <T> List<T> get(Class<T> cl) {
EntityManager em = emf.createEntityManager();
TypedQuery<T> query = em.createQuery("SELECT x FROM " + cl.getSimpleName() + " x", cl); TypedQuery<T> query = em.createQuery("SELECT x FROM " + cl.getSimpleName() + " x", cl);
List<T> results = query.getResultList(); List<T> results = query.getResultList();
Hibernate.initialize(results); Hibernate.initialize(results);
em.close();
return results; return results;
} }
public void removeUser(User user) { public void removeUser(User user) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
User managedUser = em.find(User.class, user.getId()); User managedUser = em.find(User.class, user.getId());
em.remove(managedUser); em.remove(managedUser);
em.getTransaction().commit();
em.close();
} }
public User getUser(Long id) { public User getUser(Long id) {
@ -68,32 +55,28 @@ public class DataProvider implements AutoCloseable {
} }
private <T> T get(Class<T> cl, Long id) { private <T> T get(Class<T> cl, Long id) {
EntityManager em = emf.createEntityManager();
T result = em.find(cl, id); T result = em.find(cl, id);
em.close();
return result; return result;
} }
@Deprecated @Deprecated
public void SetValues(Runnable action) { public void SetValues(Runnable action) {
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
action.run(); action.run();
em.flush(); em.flush();
em.getTransaction().commit();
em.close();
} }
@Override @Override
public void close() { public void close() {
if (em != null) {
em.flush();
em.close();
}
if (emf != null) if (emf != null)
emf.close(); emf.close();
} }
public boolean isEntityManaged(Object entity) { public boolean isEntityManaged(Object entity) {
EntityManager em = emf.createEntityManager();
boolean ret = em.contains(entity); boolean ret = em.contains(entity);
em.close();
return ret; return ret;
} }
} }

View file

@ -23,7 +23,10 @@ public class Conversation extends ChatDatabaseEntity {
// inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = // inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName =
// "id", unique = false), uniqueConstraints = @UniqueConstraint(name = // "id", unique = false), uniqueConstraints = @UniqueConstraint(name =
// "USER_CONV_UN", columnNames = {"user_id", "conversation_id" })) // "USER_CONV_UN", columnNames = {"user_id", "conversation_id" }))
@JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(name = "conversation_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id")) // @JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(name =
// "conversation_id", referencedColumnName = "id"), inverseJoinColumns =
// @JoinColumn(name = "user_id", referencedColumnName = "id"))
@JoinTable(name = "User_Conversation")
private Set<User> users; private Set<User> users;
public List<Message> getMesssages() { public List<Message> getMesssages() {

View file

@ -11,12 +11,12 @@ public class Message extends ChatDatabaseEntity {
@Column(name = "id", unique = true, nullable = false) @Column(name = "id", unique = true, nullable = false)
private Long id; private Long id;
@ManyToOne @ManyToOne
//@JoinTable(name="user_message") // @JoinTable(name="user_message")
private User sender; private User sender;
private Date time; private Date time;
private String message; private String message;
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
//@JoinTable(name="conversation_message") // @JoinTable(name="conversation_message")
private Conversation conversation; private Conversation conversation;
public User getSender() { public User getSender() {

View file

@ -18,6 +18,7 @@ public class User extends ChatDatabaseEntity {
private String email; private String email;
private String password; private String password;
@ElementCollection(fetch = FetchType.EAGER) @ElementCollection(fetch = FetchType.EAGER)
@ManyToMany(cascade = CascadeType.ALL)
private List<User> contacts; private List<User> contacts;
private String salt; private String salt;
// @Column(columnDefinition = "CHAR(16) FOR BIT DATA") // @Column(columnDefinition = "CHAR(16) FOR BIT DATA")
@ -27,7 +28,10 @@ public class User extends ChatDatabaseEntity {
// @ManyToMany(fetch = FetchType.EAGER, mappedBy = "users") // @ManyToMany(fetch = FetchType.EAGER, mappedBy = "users")
@ManyToMany(mappedBy = "users", fetch = FetchType.EAGER, cascade = CascadeType.ALL) @ManyToMany(mappedBy = "users", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
// @ManyToMany(mappedBy = "users") // @ManyToMany(mappedBy = "users")
//@JoinTable(name = "User_Conversation", joinColumns = @JoinColumn(referencedColumnName = "id", unique = false), inverseJoinColumns = @JoinColumn(referencedColumnName = "id", unique = false)) // @JoinTable(name = "User_Conversation", joinColumns =
// @JoinColumn(referencedColumnName = "id", unique = false),
// inverseJoinColumns = @JoinColumn(referencedColumnName = "id", unique =
// false))
private Set<Conversation> conversations; private Set<Conversation> conversations;
public List<User> getContacts() { public List<User> getContacts() {

View file

@ -40,9 +40,8 @@ public class RegisterAjaxPage extends Page {
user.setEmail(post.getString("email")); user.setEmail(post.getString("email"));
user.setSalt(BCrypt.gensalt()); // http://www.mindrot.org/projects/jBCrypt/ user.setSalt(BCrypt.gensalt()); // http://www.mindrot.org/projects/jBCrypt/
user.setPassword(BCrypt.hashpw(post.getString("pass"), user.getSalt())); user.setPassword(BCrypt.hashpw(post.getString("pass"), user.getSalt()));
provider.save(user); user = provider.save(user);
User managedUser = provider.getUser(user.getId()); IOHelper.LoginUser(exchange, user, provider);
IOHelper.LoginUser(exchange, managedUser, provider);
IOHelper.SendResponse(200, "Success", exchange); IOHelper.SendResponse(200, "Success", exchange);
} catch (Exception e) { } catch (Exception e) {
throw e; throw e;