diff --git a/guest/tomcat-app/WebContent/META-INF/MANIFEST.MF b/guest/tomcat-app/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..254272e1c0 --- /dev/null +++ b/guest/tomcat-app/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/guest/tomcat-app/WebContent/WEB-INF/web.xml b/guest/tomcat-app/WebContent/WEB-INF/web.xml new file mode 100644 index 0000000000..efc7c9ae0d --- /dev/null +++ b/guest/tomcat-app/WebContent/WEB-INF/web.xml @@ -0,0 +1,28 @@ + + + tomcat-app + + tomcat-app + org.glassfish.jersey.servlet.ServletContainer + + javax.ws.rs.Application + com.stackify.ApplicationInitializer + + 1 + + + tomcat-app + /* + + + javamelody + net.bull.javamelody.MonitoringFilter + + gzip-compression-disabled + true + + + \ No newline at end of file diff --git a/guest/tomcat-app/pom.xml b/guest/tomcat-app/pom.xml new file mode 100644 index 0000000000..e62c6f78d8 --- /dev/null +++ b/guest/tomcat-app/pom.xml @@ -0,0 +1,70 @@ + + 4.0.0 + com.stackify + tomcat-app + 0.0.1-SNAPSHOT + war + + + + org.glassfish.jersey.containers + jersey-container-servlet + 2.25.1 + + + org.glassfish.jersey.media + jersey-media-moxy + 2.25.1 + + + io.rest-assured + rest-assured + 3.0.3 + + + junit + junit + 4.12 + + + + com.h2database + h2 + 1.4.195 + + + + org.apache.logging.log4j + log4j-core + 2.8.2 + + + + net.bull.javamelody + javamelody-core + 1.69.0 + + + + + + + + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + maven-war-plugin + 3.0.0 + + WebContent + + + + + \ No newline at end of file diff --git a/guest/tomcat-app/src/main/java/com/stackify/ApplicationInitializer.java b/guest/tomcat-app/src/main/java/com/stackify/ApplicationInitializer.java new file mode 100644 index 0000000000..6d864e859e --- /dev/null +++ b/guest/tomcat-app/src/main/java/com/stackify/ApplicationInitializer.java @@ -0,0 +1,9 @@ +package com.stackify; + +import org.glassfish.jersey.server.ResourceConfig; + +public class ApplicationInitializer extends ResourceConfig { + public ApplicationInitializer() { + packages("com.stackify.services"); + } +} diff --git a/guest/tomcat-app/src/main/java/com/stackify/daos/UserDAO.java b/guest/tomcat-app/src/main/java/com/stackify/daos/UserDAO.java new file mode 100644 index 0000000000..b57b230135 --- /dev/null +++ b/guest/tomcat-app/src/main/java/com/stackify/daos/UserDAO.java @@ -0,0 +1,67 @@ +package com.stackify.daos; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.stackify.models.User; +import com.stackify.utils.ConnectionUtil; + +public class UserDAO { + + private Logger logger = LogManager.getLogger(UserDAO.class); + + public void createTable() { + try (Connection con = ConnectionUtil.getConnection()) { + String createQuery = "CREATE TABLE IF NOT EXISTS users(email varchar(50) primary key, name varchar(50))"; + PreparedStatement pstmt = con.prepareStatement(createQuery); + + pstmt.execute(); + } catch (SQLException exc) { + logger.error(exc.getMessage()); + } + + } + + public void add(User user) { + try (Connection con = ConnectionUtil.getConnection()) { + + String insertQuery = "INSERT INTO users(email,name) VALUES(?,?)"; + PreparedStatement pstmt = con.prepareStatement(insertQuery); + pstmt.setString(1, user.getEmail()); + pstmt.setString(2, user.getName()); + + pstmt.executeUpdate(); + } catch (SQLException exc) { + logger.error(exc.getMessage()); + } + } + + public List findAll() { + List users = new ArrayList<>(); + + try (Connection con = ConnectionUtil.getConnection()) { + String query = "SELECT * FROM users"; + PreparedStatement pstmt = con.prepareStatement(query); + + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + User user = new User(); + user.setEmail(rs.getString("email")); + user.setName(rs.getString("name")); + users.add(user); + } + } catch (SQLException exc) { + logger.error(exc.getMessage()); + } + + return users; + } + +} diff --git a/guest/tomcat-app/src/main/java/com/stackify/models/User.java b/guest/tomcat-app/src/main/java/com/stackify/models/User.java new file mode 100644 index 0000000000..8c8073357d --- /dev/null +++ b/guest/tomcat-app/src/main/java/com/stackify/models/User.java @@ -0,0 +1,43 @@ +package com.stackify.models; + +import javax.ws.rs.core.Link; + +public class User { + private String email; + private String name; + private Link link; + + public User() { + } + + public User(String email, String name) { + super(); + this.email = email; + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Link getLink() { + return link; + } + + public void setLink(Link link) { + this.link = link; + } + +} diff --git a/guest/tomcat-app/src/main/java/com/stackify/services/CorsFilter.java b/guest/tomcat-app/src/main/java/com/stackify/services/CorsFilter.java new file mode 100644 index 0000000000..267aa6fd61 --- /dev/null +++ b/guest/tomcat-app/src/main/java/com/stackify/services/CorsFilter.java @@ -0,0 +1,19 @@ +package com.stackify.services; + +import java.io.IOException; + +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.container.ContainerResponseFilter; +import javax.ws.rs.ext.Provider; + +@Provider +public class CorsFilter implements ContainerResponseFilter { + + @Override + public void filter(final ContainerRequestContext requestContext, + final ContainerResponseContext response) throws IOException { + response.getHeaders().add("Access-Control-Allow-Origin", "*"); + response.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept"); + } +} diff --git a/guest/tomcat-app/src/main/java/com/stackify/services/UserService.java b/guest/tomcat-app/src/main/java/com/stackify/services/UserService.java new file mode 100644 index 0000000000..6cdb3eb55f --- /dev/null +++ b/guest/tomcat-app/src/main/java/com/stackify/services/UserService.java @@ -0,0 +1,37 @@ +package com.stackify.services; + +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import com.stackify.daos.UserDAO; +import com.stackify.models.User; + +@Path("/users") +public class UserService { + private UserDAO userDao = new UserDAO(); + + public UserService (){ + userDao.createTable(); + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + public Response addUser(User user) { + userDao.add(user); + return Response.ok() + .build(); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + public List getUsers() { + return userDao.findAll(); + } +} diff --git a/guest/tomcat-app/src/main/java/com/stackify/utils/ConnectionUtil.java b/guest/tomcat-app/src/main/java/com/stackify/utils/ConnectionUtil.java new file mode 100644 index 0000000000..e7734f64a7 --- /dev/null +++ b/guest/tomcat-app/src/main/java/com/stackify/utils/ConnectionUtil.java @@ -0,0 +1,38 @@ +package com.stackify.utils; + +import java.sql.Connection; +import java.sql.SQLException; + +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.sql.DataSource; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class ConnectionUtil { + + private static Logger logger = LogManager.getLogger(ConnectionUtil.class); + + public static Connection getConnection() { + try { + String jndiName = "java:/comp/env/jdbc/MyDataSource"; + + Context initialContext = new InitialContext(); + DataSource datasource = (DataSource)initialContext.lookup(jndiName); + if (datasource != null) { + return datasource.getConnection(); + } + else { + logger.error("Failed to lookup datasource."); + } + } + + catch (NamingException | SQLException exc) { + logger.error(exc.getMessage()); + } + return null; + } + +}