Skip to content

Commit 8ed5c8e

Browse files
lor6Eugen
authored andcommitted
tomcat app ex (eugenp#2625)
1 parent dca9403 commit 8ed5c8e

File tree

9 files changed

+314
-0
lines changed

9 files changed

+314
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Manifest-Version: 1.0
2+
Class-Path:
3+
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
4+
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
5+
id="WebApp_ID" version="3.1">
6+
<display-name>tomcat-app</display-name>
7+
<servlet>
8+
<servlet-name>tomcat-app</servlet-name>
9+
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
10+
<init-param>
11+
<param-name>javax.ws.rs.Application</param-name>
12+
<param-value>com.stackify.ApplicationInitializer</param-value>
13+
</init-param>
14+
<load-on-startup>1</load-on-startup>
15+
</servlet>
16+
<servlet-mapping>
17+
<servlet-name>tomcat-app</servlet-name>
18+
<url-pattern>/*</url-pattern>
19+
</servlet-mapping>
20+
<filter>
21+
<filter-name>javamelody</filter-name>
22+
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
23+
<init-param>
24+
<param-name>gzip-compression-disabled</param-name>
25+
<param-value>true</param-value>
26+
</init-param>
27+
</filter>
28+
</web-app>

guest/tomcat-app/pom.xml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<groupId>com.stackify</groupId>
5+
<artifactId>tomcat-app</artifactId>
6+
<version>0.0.1-SNAPSHOT</version>
7+
<packaging>war</packaging>
8+
9+
<dependencies>
10+
<dependency>
11+
<groupId>org.glassfish.jersey.containers</groupId>
12+
<artifactId>jersey-container-servlet</artifactId>
13+
<version>2.25.1</version>
14+
</dependency>
15+
<dependency>
16+
<groupId>org.glassfish.jersey.media</groupId>
17+
<artifactId>jersey-media-moxy</artifactId>
18+
<version>2.25.1</version>
19+
</dependency>
20+
<dependency>
21+
<groupId>io.rest-assured</groupId>
22+
<artifactId>rest-assured</artifactId>
23+
<version>3.0.3</version>
24+
</dependency>
25+
<dependency>
26+
<groupId>junit</groupId>
27+
<artifactId>junit</artifactId>
28+
<version>4.12</version>
29+
</dependency>
30+
31+
<dependency>
32+
<groupId>com.h2database</groupId>
33+
<artifactId>h2</artifactId>
34+
<version>1.4.195</version>
35+
</dependency>
36+
37+
<dependency>
38+
<groupId>org.apache.logging.log4j</groupId>
39+
<artifactId>log4j-core</artifactId>
40+
<version>2.8.2</version>
41+
</dependency>
42+
43+
<dependency>
44+
<groupId>net.bull.javamelody</groupId>
45+
<artifactId>javamelody-core</artifactId>
46+
<version>1.69.0</version>
47+
</dependency>
48+
49+
</dependencies>
50+
51+
<build>
52+
<plugins>
53+
<plugin>
54+
<artifactId>maven-compiler-plugin</artifactId>
55+
<version>3.5.1</version>
56+
<configuration>
57+
<source>1.8</source>
58+
<target>1.8</target>
59+
</configuration>
60+
</plugin>
61+
<plugin>
62+
<artifactId>maven-war-plugin</artifactId>
63+
<version>3.0.0</version>
64+
<configuration>
65+
<warSourceDirectory>WebContent</warSourceDirectory>
66+
</configuration>
67+
</plugin>
68+
</plugins>
69+
</build>
70+
</project>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.stackify;
2+
3+
import org.glassfish.jersey.server.ResourceConfig;
4+
5+
public class ApplicationInitializer extends ResourceConfig {
6+
public ApplicationInitializer() {
7+
packages("com.stackify.services");
8+
}
9+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.stackify.daos;
2+
3+
import java.sql.Connection;
4+
import java.sql.PreparedStatement;
5+
import java.sql.ResultSet;
6+
import java.sql.SQLException;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
import org.apache.logging.log4j.LogManager;
11+
import org.apache.logging.log4j.Logger;
12+
13+
import com.stackify.models.User;
14+
import com.stackify.utils.ConnectionUtil;
15+
16+
public class UserDAO {
17+
18+
private Logger logger = LogManager.getLogger(UserDAO.class);
19+
20+
public void createTable() {
21+
try (Connection con = ConnectionUtil.getConnection()) {
22+
String createQuery = "CREATE TABLE IF NOT EXISTS users(email varchar(50) primary key, name varchar(50))";
23+
PreparedStatement pstmt = con.prepareStatement(createQuery);
24+
25+
pstmt.execute();
26+
} catch (SQLException exc) {
27+
logger.error(exc.getMessage());
28+
}
29+
30+
}
31+
32+
public void add(User user) {
33+
try (Connection con = ConnectionUtil.getConnection()) {
34+
35+
String insertQuery = "INSERT INTO users(email,name) VALUES(?,?)";
36+
PreparedStatement pstmt = con.prepareStatement(insertQuery);
37+
pstmt.setString(1, user.getEmail());
38+
pstmt.setString(2, user.getName());
39+
40+
pstmt.executeUpdate();
41+
} catch (SQLException exc) {
42+
logger.error(exc.getMessage());
43+
}
44+
}
45+
46+
public List<User> findAll() {
47+
List<User> users = new ArrayList<>();
48+
49+
try (Connection con = ConnectionUtil.getConnection()) {
50+
String query = "SELECT * FROM users";
51+
PreparedStatement pstmt = con.prepareStatement(query);
52+
53+
ResultSet rs = pstmt.executeQuery();
54+
while (rs.next()) {
55+
User user = new User();
56+
user.setEmail(rs.getString("email"));
57+
user.setName(rs.getString("name"));
58+
users.add(user);
59+
}
60+
} catch (SQLException exc) {
61+
logger.error(exc.getMessage());
62+
}
63+
64+
return users;
65+
}
66+
67+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.stackify.models;
2+
3+
import javax.ws.rs.core.Link;
4+
5+
public class User {
6+
private String email;
7+
private String name;
8+
private Link link;
9+
10+
public User() {
11+
}
12+
13+
public User(String email, String name) {
14+
super();
15+
this.email = email;
16+
this.name = name;
17+
}
18+
19+
public String getEmail() {
20+
return email;
21+
}
22+
23+
public void setEmail(String email) {
24+
this.email = email;
25+
}
26+
27+
public String getName() {
28+
return name;
29+
}
30+
31+
public void setName(String name) {
32+
this.name = name;
33+
}
34+
35+
public Link getLink() {
36+
return link;
37+
}
38+
39+
public void setLink(Link link) {
40+
this.link = link;
41+
}
42+
43+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.stackify.services;
2+
3+
import java.io.IOException;
4+
5+
import javax.ws.rs.container.ContainerRequestContext;
6+
import javax.ws.rs.container.ContainerResponseContext;
7+
import javax.ws.rs.container.ContainerResponseFilter;
8+
import javax.ws.rs.ext.Provider;
9+
10+
@Provider
11+
public class CorsFilter implements ContainerResponseFilter {
12+
13+
@Override
14+
public void filter(final ContainerRequestContext requestContext,
15+
final ContainerResponseContext response) throws IOException {
16+
response.getHeaders().add("Access-Control-Allow-Origin", "*");
17+
response.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept");
18+
}
19+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.stackify.services;
2+
3+
import java.util.List;
4+
5+
import javax.ws.rs.Consumes;
6+
import javax.ws.rs.GET;
7+
import javax.ws.rs.POST;
8+
import javax.ws.rs.Path;
9+
import javax.ws.rs.Produces;
10+
import javax.ws.rs.core.MediaType;
11+
import javax.ws.rs.core.Response;
12+
13+
import com.stackify.daos.UserDAO;
14+
import com.stackify.models.User;
15+
16+
@Path("/users")
17+
public class UserService {
18+
private UserDAO userDao = new UserDAO();
19+
20+
public UserService (){
21+
userDao.createTable();
22+
}
23+
24+
@POST
25+
@Consumes(MediaType.APPLICATION_JSON)
26+
public Response addUser(User user) {
27+
userDao.add(user);
28+
return Response.ok()
29+
.build();
30+
}
31+
32+
@GET
33+
@Produces(MediaType.APPLICATION_JSON)
34+
public List<User> getUsers() {
35+
return userDao.findAll();
36+
}
37+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.stackify.utils;
2+
3+
import java.sql.Connection;
4+
import java.sql.SQLException;
5+
6+
import javax.naming.Context;
7+
import javax.naming.InitialContext;
8+
import javax.naming.NamingException;
9+
import javax.sql.DataSource;
10+
11+
import org.apache.logging.log4j.LogManager;
12+
import org.apache.logging.log4j.Logger;
13+
14+
public class ConnectionUtil {
15+
16+
private static Logger logger = LogManager.getLogger(ConnectionUtil.class);
17+
18+
public static Connection getConnection() {
19+
try {
20+
String jndiName = "java:/comp/env/jdbc/MyDataSource";
21+
22+
Context initialContext = new InitialContext();
23+
DataSource datasource = (DataSource)initialContext.lookup(jndiName);
24+
if (datasource != null) {
25+
return datasource.getConnection();
26+
}
27+
else {
28+
logger.error("Failed to lookup datasource.");
29+
}
30+
}
31+
32+
catch (NamingException | SQLException exc) {
33+
logger.error(exc.getMessage());
34+
}
35+
return null;
36+
}
37+
38+
}

0 commit comments

Comments
 (0)