Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions blog-web/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,16 @@
<version>2.17</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.2.Final</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.6</version>
</dependency>
</dependencies>

<build>
Expand Down
14 changes: 14 additions & 0 deletions blog-web/src/main/java/com/pierceecom/blog/JAXRSConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,29 @@

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;



@ApplicationPath("/")
public class JAXRSConfiguration extends Application {
@Override
public Set<Class<?>> getClasses() {
HashSet<Class<?>> classes = new HashSet<>();
classes.add(HelloPierceResource.class);
classes.add(com.pierceecom.resource.BlogPostResource.class);
classes.add(com.pierceecom.exceptionmappers.IllegalArgumentExceptionMapper.class);
classes.add(com.pierceecom.exceptionmappers.DataNotFoundExceptionMapper.class);
classes.add(com.pierceecom.exceptionmappers.OptimisticLockExceptionMapper.class);
classes.add(com.pierceecom.exceptionmappers.NotAllowedExceptionMapper.class);
classes.add(com.pierceecom.exceptionmappers.GenericExceptionMapper.class);





return classes;
}
}
86 changes: 86 additions & 0 deletions blog-web/src/main/java/com/pierceecom/dao/PostDAO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.pierceecom.dao;
import java.util.List;



import org.hibernate.Session;
import org.hibernate.Transaction;
import com.pierceecom.model.Post;

public class PostDAO {

private Session currentSession;

private Transaction currentTransaction;
public PostDAO() {

}


public Session openCurrentSession() {
currentSession = SessionFactoryHelper.getSessionFactory().openSession();
return currentSession;
}

public Session openCurrentSessionwithTransaction() {
currentSession = SessionFactoryHelper.getSessionFactory().openSession();
currentTransaction = currentSession.beginTransaction();
return currentSession;
}

public void closeCurrentSession() {
currentSession.close();
}

public void closeCurrentSessionwithTransaction() {
currentTransaction.commit();
currentSession.close();
}


public Session getCurrentSession() {
return currentSession;
}

public void setCurrentSession(Session currentSession) {
this.currentSession = currentSession;
}

public Transaction getCurrentTransaction() {
return currentTransaction;
}

public void setCurrentTransaction(Transaction currentTransaction) {
this.currentTransaction = currentTransaction;
}

public void persist(Post entity) {
getCurrentSession().save(entity);
}

public void update(Post entity) {
getCurrentSession().update(entity);
}

public Post findById(String id) {
Post post = (Post) getCurrentSession().get(Post.class, id);
return post;
}

public void delete(Post entity) {
getCurrentSession().delete(entity);
}

@SuppressWarnings("unchecked")
public List<Post> findAll() {
List<Post> posts = (List<Post>) getCurrentSession().createQuery("from Post").list();
return posts;
}

public void deleteAll() {
List<Post> entityList = findAll();
for (Post entity : entityList) {
delete(entity);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.pierceecom.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class SessionFactoryHelper {
private static final SessionFactory sessionFactory;

static {
try {
// Build a SessionFactory object from session-factory config
// defined in the hibernate.cfg.xml file. In this file we
// register the JDBC connection information, connection pool,
// the hibernate dialect that we used and the mapping to our
// hbm.xml file for each pojo (plain old java object).
Configuration config = new Configuration();
sessionFactory = config.configure().buildSessionFactory();
} catch (Throwable e) {
System.err.println("Error in creating SessionFactory object."
+ e.getMessage());
throw new ExceptionInInitializerError(e);
}
}

public static void main(String[] args) {
Session session = SessionFactoryHelper.getSessionFactory()
.getCurrentSession();

System.out.println("session = " + session);
}

/**
* A static method for other application to get SessionFactory object
* initialized in this helper class.
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.pierceecom.exceptionmappers;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import com.pierceecom.exceptions.DataNotFoundException;
import com.pierceecom.model.ErrorMessage;

@Provider
public class DataNotFoundExceptionMapper implements ExceptionMapper<DataNotFoundException> {
@Override
public Response toResponse(DataNotFoundException ex){

ErrorMessage errorMessage =new ErrorMessage(ex.getMessage(),204,"");
return Response.status(Status.NOT_FOUND).entity(errorMessage).build();

}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.pierceecom.exceptionmappers;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import com.pierceecom.model.ErrorMessage;

@Provider
public class GenericExceptionMapper implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Throwable ex){

ErrorMessage errorMessage =new ErrorMessage("Internal Server Error", 500, "#/definitions/Post");
return Response.status(Status.INTERNAL_SERVER_ERROR).entity(errorMessage).type(MediaType.APPLICATION_JSON).build();

}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.pierceecom.exceptionmappers;

import java.lang.IllegalArgumentException;
import java.lang.Override;

import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;



import com.pierceecom.model.ErrorMessage;


@Provider
public class IllegalArgumentExceptionMapper implements ExceptionMapper<IllegalArgumentException> {
@Override
public Response toResponse(IllegalArgumentException ex){

ErrorMessage errorMessage =new ErrorMessage("Post not found", 404, "");
return Response.status(Status.NOT_FOUND).entity(errorMessage).build();

}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.pierceecom.exceptionmappers;


import javax.ws.rs.NotAllowedException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import com.pierceecom.model.ErrorMessage;

@Provider

public class NotAllowedExceptionMapper implements ExceptionMapper<NotAllowedException> {
@Override
public Response toResponse(NotAllowedException ex){

ErrorMessage errorMessage =new ErrorMessage("Invalid input", 404, "#/definitions/Post");
return Response.status(Status.METHOD_NOT_ALLOWED).entity(errorMessage).type(MediaType.APPLICATION_JSON).build();

}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.pierceecom.exceptionmappers;

import javax.persistence.OptimisticLockException;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import com.pierceecom.model.ErrorMessage;

@Provider
public class OptimisticLockExceptionMapper implements ExceptionMapper<OptimisticLockException> {
@Override
public Response toResponse(OptimisticLockException ex){

ErrorMessage errorMessage =new ErrorMessage("Post not found", 404, "");
return Response.status(Status.NOT_FOUND).entity(errorMessage).build();

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.pierceecom.exceptions;

public class DataNotFoundException extends RuntimeException {

private static final long serialVersionUID = 4645536692857767394L;


public DataNotFoundException(String message){
super(message);

}

}

46 changes: 46 additions & 0 deletions blog-web/src/main/java/com/pierceecom/model/ErrorMessage.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.pierceecom.model;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class ErrorMessage {
private String errorMessage;
private int errorCode;
private String documentation;

public ErrorMessage() {
}

public ErrorMessage(String errorMessage, int errorCode, String documentation) {
super();
this.errorMessage = errorMessage;
this.errorCode = errorCode;
this.documentation = documentation;
}

public String getErrorMessage() {
return errorMessage;
}

public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}

public int getErrorCode() {
return errorCode;
}

public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}

public String getDocumentation() {
return documentation;
}

public void setDocumentation(String documentation) {
this.documentation = documentation;
}

}

Loading