Skip to content

Commit

Permalink
Log strategy changed from log4j to logback (via sfl4j)
Browse files Browse the repository at this point in the history
Some changes in order to use with Apache ProxyPass
Code target switched from 15 to 1.8
  • Loading branch information
magoafono committed Apr 7, 2021
1 parent 215d891 commit b83d0ae
Show file tree
Hide file tree
Showing 12 changed files with 141 additions and 82 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/target/
36 changes: 16 additions & 20 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,20 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
Expand Down Expand Up @@ -58,21 +68,6 @@
<artifactId>jersey-media-moxy</artifactId>
<version>2.33</version>
</dependency>
<!-- <dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.19.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.19.4</version>
</dependency>-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
Expand Down Expand Up @@ -116,14 +111,15 @@
</dependencies>

<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>15</source>
<target>15</target>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
Expand Down
31 changes: 21 additions & 10 deletions src/main/java/it/cnr/ilc/lexo/GraphDbUtil.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package it.cnr.ilc.lexo;

import static it.cnr.ilc.lexo.LexoFilter.CONTEXT;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.eclipse.rdf4j.repository.Repository;
import org.eclipse.rdf4j.repository.RepositoryConnection;
import org.eclipse.rdf4j.repository.RepositoryException;
import org.eclipse.rdf4j.repository.config.RepositoryConfigException;
import org.eclipse.rdf4j.repository.manager.RemoteRepositoryManager;
import org.eclipse.rdf4j.repository.manager.RepositoryManager;
import org.eclipse.rdf4j.repository.sail.SailRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
*
Expand All @@ -19,51 +21,58 @@
public class GraphDbUtil {

private static final Object LOCK = new Object();
private static final Repository REPOSITORY;
private static Repository REPOSITORY = null;
private static final List<RepositoryConnection> POOL = new ArrayList<>();
private static final Map<Thread, RepositoryConnection> ACTIVES = new HashMap<>();
private static final int SIZE = Integer.parseInt(LexoProperties.getProperty("GraphDb.size", "5"));
private static int current = 0;
private static final Logger logger = LoggerFactory.getLogger(GraphDbUtil.class);

static {
RepositoryManager repositoryManager = new RemoteRepositoryManager(LexoProperties.getProperty("GraphDb.url", "http://localhost:7200"));
RepositoryManager repositoryManager = new RemoteRepositoryManager(LexoProperties.getProperty("GraphDb.url", "https://lexo-datasets.ilc.cnr.it:7200"));
repositoryManager.init();
REPOSITORY = repositoryManager.getRepository(LexoProperties.getProperty("GraphDb.repository", "SIMPLE"));
try {
REPOSITORY = repositoryManager.getRepository(LexoProperties.getProperty("GraphDb.repository", "Simple"));
} catch (RepositoryException | RepositoryConfigException e) {
logger.error("Unable to connect to GraphDB: " + e);
}
}

private static void testConnection(RepositoryConnection connection) throws Exception {
}

public static RepositoryConnection getConnection() {
synchronized (LOCK) {
RepositoryConnection connection = ACTIVES.get(Thread.currentThread());
RepositoryConnection connection = ACTIVES.get(Thread.currentThread());
if (connection != null) {
Logger.getLogger(CONTEXT).debug(Thread.currentThread().getName() + " get active connection");
logger.debug(Thread.currentThread().getName() + " get active connection");
return connection;
}
try {
connection = POOL.remove(0);
try {
testConnection(connection);
Logger.getLogger(CONTEXT).debug(Thread.currentThread().getName() + " get pool connection");
logger.debug(Thread.currentThread().getName() + " get pool connection");
} catch (Exception ex) {
Logger.getLogger(CONTEXT).debug(Thread.currentThread().getName() + " get inactive connection");
logger.debug(Thread.currentThread().getName() + " get inactive connection");
try {
connection.close();
} catch (RepositoryException e) {
logger.error(e.getLocalizedMessage());
}
current--;
connection = getConnection();
}
} catch (IndexOutOfBoundsException ex) {
if (current < SIZE) {
Logger.getLogger(CONTEXT).debug(Thread.currentThread().getName() + " get repository connection");
logger.debug(Thread.currentThread().getName() + " get repository connection");
connection = REPOSITORY.getConnection();
current++;
} else {
try {
LOCK.wait();
} catch (InterruptedException iex) {
logger.error(iex.getLocalizedMessage());
}
connection = getConnection();
}
Expand Down Expand Up @@ -92,13 +101,15 @@ public static void close() {
try {
LOCK.wait();
} catch (InterruptedException ex) {
logger.error(ex.getLocalizedMessage());
throw new RuntimeException(ex);
}
}
for (RepositoryConnection connection : POOL) {
try {
connection.close();
} catch (RepositoryException e) {
logger.error(e.getLocalizedMessage());
}
}
POOL.clear();
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/it/cnr/ilc/lexo/HibernateUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ public class HibernateUtil {
private static final SessionFactory SESSION_FACTORY;

static {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
SESSION_FACTORY = metadata.buildSessionFactory();
}

Expand Down
51 changes: 30 additions & 21 deletions src/main/java/it/cnr/ilc/lexo/LexoFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.HibernateException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
*
Expand All @@ -21,6 +21,7 @@
@WebFilter(urlPatterns = {"/faces/*", "/service/*", "/servlet/*"})
public class LexoFilter implements Filter {

static final Logger logger = LoggerFactory.getLogger(LexoFilter.class.getName());
public static String CONTEXT;
public static String VERSION;

Expand All @@ -29,23 +30,12 @@ public void init(FilterConfig filterConfig) throws ServletException {
CONTEXT = filterConfig.getServletContext().getContextPath().substring(1);
VERSION = LexoProperties.getProperty("application.version");
File logFile = new File(filterConfig.getServletContext().getRealPath("/"));
logFile = new File(logFile.getParentFile().getParentFile(), "logs/" + CONTEXT + ".log");
PatternLayout layout = new PatternLayout();
String conversionPattern = "%d %p %m\n";
layout.setConversionPattern(conversionPattern);
DailyRollingFileAppender rollingAppender = new DailyRollingFileAppender();
rollingAppender.setFile(logFile.getAbsolutePath());
rollingAppender.setDatePattern("'.'yyyy-MM-dd");
rollingAppender.setLayout(layout);
rollingAppender.activateOptions();
Logger logger = Logger.getLogger(CONTEXT);
logger.setLevel(Level.INFO);
logger.addAppender(rollingAppender);
logger.info(CONTEXT + " start");
}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

try {
HibernateUtil.getSession().beginTransaction();
HibernateUtil.getSession().enableFilter("status");
Expand All @@ -57,36 +47,55 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha
if (HibernateUtil.getSession().getTransaction().isActive()) {
HibernateUtil.getSession().getTransaction().commit();
}
} catch (Throwable ex) {
Logger.getLogger(CONTEXT).error("", ex);
ex.printStackTrace();
} catch (Exception ex) {
HttpServletResponse httpResponse = (HttpServletResponse) response;

logger.error("Type of Exception: " + ex.getClass());

if (ex instanceof org.hibernate.exception.GenericJDBCException) {
logger.error("doFilter() Error connecting MySQL", ex);
httpResponse.addHeader("Error", "Unable to connect to MySQL");
httpResponse.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "Unable to connect to MySQL");
} else {
httpResponse.addHeader("Error", "Unable to connect to ???");
logger.error("doFilter()", ex);
httpResponse.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "Unable to connect to ???");
}
try {
if (GraphDbUtil.getConnection().isActive()) {
GraphDbUtil.getConnection().rollback();
}
} catch (Exception e) {
logger.error("doFilter(), Unable to connect to GraphDB", e);
httpResponse.addHeader("Error", "Unable to connect to GraphDB");
httpResponse.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "Unable to connect to GraphDB");
}
try {
if (HibernateUtil.getSession().getTransaction().isActive()) {
HibernateUtil.getSession().getTransaction().rollback();
}
} catch (Exception e) {
logger.error(e.getLocalizedMessage());
}

} finally {
try {
GraphDbUtil.releaseConnection();
} catch (Exception e) {
logger.error(e.getLocalizedMessage());
}
try {
HibernateUtil.getSession().close();
} catch (Exception e) {
} catch (HibernateException e) {
logger.error(e.getLocalizedMessage());
}
}
}

@Override
public void destroy() {
Logger.getLogger(CONTEXT).info(CONTEXT + " stop");
// Logger.getLogger(CONTEXT).info(CONTEXT + " stop");
logger.info(CONTEXT + " stop");
HibernateUtil.closeFactory();
GraphDbUtil.close();
}
Expand Down
17 changes: 10 additions & 7 deletions src/main/java/it/cnr/ilc/lexo/LexoProperties.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.hibernate.Hibernate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
*
Expand All @@ -12,25 +13,27 @@
public class LexoProperties {

private static final Properties PROPERTIES = new Properties();
static final Logger logger = LoggerFactory.getLogger(LexoFilter.class.getName());

static {
load();
}

public static final void load() {
System.err.println("Lexofilter.context " + LexoFilter.CONTEXT);
logger.debug("Lexofilter.context: " + LexoFilter.CONTEXT);
InputStream input = null;
try {
// input = LexoProperties.class.getResourceAsStream("/" + LexoFilter.CONTEXT + ".properties");
input = LexoProperties.class.getClassLoader().getResourceAsStream("lexo-server.properties");
PROPERTIES.load(input);
} catch (IOException e) {
System.err.println(e.getMessage());
logger.error(e.getLocalizedMessage());
} finally {
try {
input.close();
} catch (Exception e) {
System.err.println(e.getMessage());
if (null != input) {
input.close();
}
} catch (IOException e) {
logger.error(e.getLocalizedMessage());
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,31 +8,34 @@
import io.swagger.jaxrs.config.BeanConfig;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
*
* @author andreabellandi
*/

public class SwaggerServletConfiguration extends HttpServlet {

@Override
public void init(ServletConfig config) throws ServletException {
Logger logger = LoggerFactory.getLogger(SwaggerServletConfiguration.class);
super.init(config);
BeanConfig beanConfig = new BeanConfig();
beanConfig.setBasePath("lexo-server/service");
beanConfig.setHost("localhost:8080");
beanConfig.setBasePath(config.getServletContext().getContextPath() + "/service");
logger.info("init(): config.getServletContext().getContextPath(): [ " + config.getServletContext().getContextPath() + "/service ]");
beanConfig.setTitle("LexO server API documentation");
beanConfig.setResourcePackage("it.cnr.ilc.lexo");
beanConfig.setPrettyPrint(true);
beanConfig.setScan(true);
beanConfig.setSchemes(new String[] {"http"});
beanConfig.setSchemes(new String[]{"https"});
beanConfig.setVersion("0.1");
}

}
7 changes: 2 additions & 5 deletions src/main/resources/hibernate.cfg.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/lexo_server?characterEncoding=UTF-8&amp;serverTimezone=Europe/Rome</property>
<!-- <property name="hibernate.connection.username">lexo</property>
<property name="hibernate.connection.password">LexOServer12</property>-->
<!--<property name="hibernate.connection.url">jdbc:mysql://localhost/lexo-server?characterEncoding=UTF-8&amp;serverTimezone=Europe/Rome</property>-->
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.connection.username">USER</property>
<property name="hibernate.connection.password">PASSWORD</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.c3p0.min_size">3</property>
<property name="hibernate.c3p0.max_size">30</property>
Expand Down
Loading

0 comments on commit b83d0ae

Please sign in to comment.