This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

@@ -4,29 +4,26 @@
<parent>
<groupId>com.fedex</groupId>
<artifactId>toolbox</artifactId>
<version>0.0.1-SNAPSHOT</version>
<version>1.0.0</version>
</parent>

<artifactId>toolbox-web</artifactId>
<packaging>war</packaging>

<properties>
<javaee-api.version>6.0</javaee-api.version>

<springframework.version>[4.0,)</springframework.version>
<jersey.version>[2.0,)</jersey.version>
<jersey.version>2.19</jersey.version>
<jackson-datatype-joda.version>2.4.0</jackson-datatype-joda.version>
<httpclient.version>[4.5,)</httpclient.version>
</properties>

<dependencies>
<!-- Toolbox -->
<dependency>
<groupId>com.fedex</groupId>
<artifactId>toolbox-core</artifactId>
<version>${project.version}</version>
</dependency>

<!-- Java EE -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
@@ -65,14 +62,6 @@
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>

<!-- Test -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
@@ -1,7 +1,5 @@
package com.fedex.toolbox.web;

import javax.ws.rs.ApplicationPath;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.glassfish.jersey.jackson.JacksonFeature;
@@ -14,36 +12,37 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.datatype.joda.JodaMapper;
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import com.fedex.toolbox.web.resource.ConfigurationResource;
import com.fedex.toolbox.web.resource.IndexResource;

/**
* Starts the application and initializes components.
*
* @author <a href="timothystorm@gmail.com">Timothy Storm</a>
*/
@ApplicationPath("/")
public class JerseyConfig extends ResourceConfig {
private static final Logger log = LogManager.getLogger(JerseyConfig.class);
private static final Logger log = LogManager.getLogger(JerseyConfig.class);

protected static final DateTime START_AT = new DateTime(DateTimeZone.UTC);
protected static final DateTime START_AT = new DateTime(DateTimeZone.UTC);

public static DateTime getStartAt() {
return START_AT;
}
public static DateTime getStartAt() {
return START_AT;
}

public static Duration getUpTime() {
return new Duration(DateTime.now(DateTimeZone.UTC), START_AT);
}
public static Duration getUpTime() {
return new Duration(DateTime.now(DateTimeZone.UTC), START_AT);
}

public JerseyConfig() {
log.entry("Starting...");
public JerseyConfig() {
log.traceEntry();

// bridge between Jersey and Spring
register(RequestContextFilter.class);

// scan for Jersey resources recursively from this config
packages(getClass().getPackage().getName());
// packages(getClass().getPackage().getName());

// Java to<->from JSON
// Java <-> JSON
register(JacksonFeature.class);
{
// register mappers
@@ -54,7 +53,11 @@ public JerseyConfig() {
provider.setMapper(jodaMapper);
register(provider);
}

// register resources
register(IndexResource.class);
register(ConfigurationResource.class);

log.exit();
log.traceExit();
}
}
@@ -1,55 +1,30 @@
package com.fedex.toolbox.web;

import java.nio.file.Path;
import java.nio.file.Paths;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.configuration.DatabaseConfiguration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

import com.fedex.toolbox.core.dao.MachineDao;
import com.fedex.toolbox.core.dao.MachineSqliteDao;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup;

@Configuration
@EnableTransactionManagement
public class SpringConfig implements TransactionManagementConfigurer {
private static DataSource _dataSource;

@Bean
public MachineDao machineDao() {
return new MachineSqliteDao(dataSource());
}

@Bean
public DataSource dataSource() {
if (_dataSource == null) {
synchronized (SpringConfig.class) {
if (_dataSource == null) {
BasicDataSource ds = new BasicDataSource();
ds.setDriver(new org.sqlite.JDBC());

Path pathToDatabase = Paths.get(System.getProperty("user.home"), "toolbox");
ds.setUrl("jdbc:sqlite:" + pathToDatabase.toString());
_dataSource = ds;
}
}
}
return _dataSource;
}

@Bean
public PlatformTransactionManager txManager() {
return new DataSourceTransactionManager(dataSource());
}

@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return txManager();
}
@PropertySource("classpath:database.properties")
public class SpringConfig {

@Value("${jndi.name}")
private String JNDI_NAME;

@Bean(destroyMethod = "" /* fixes a defect with WL jndi entries being deleted when the context is reloaded */)
public DataSource dataSource() {
JndiDataSourceLookup jndi = new JndiDataSourceLookup();
jndi.setResourceRef(false);
return jndi.getDataSource(JNDI_NAME);
}

@Bean
public DatabaseConfiguration databaseConfiguration(final DataSource dataSource) {
return new DatabaseConfiguration(dataSource, "configuration", "key", "value");
}
}
@@ -0,0 +1,39 @@
package com.fedex.toolbox.web;

import javax.annotation.Priority;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.glassfish.jersey.servlet.ServletContainer;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;

/**
* Initializes the web application; replacing web.xml
*
* @author Timothy Storm
*/
@Priority(value = 0)
public class WebInitializer implements WebApplicationInitializer {

@Override
public void onStartup(ServletContext cntx) throws ServletException {
// jersey tries to start up before spring - this stops that
cntx.setInitParameter("contextConfigLocation", "<NONE>");

// create root context
AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
root.register(SpringConfig.class);

// manage spring life cycle of the root application
cntx.addListener(new ContextLoaderListener(root));

// register jersey servlet
ServletRegistration.Dynamic jersey = cntx.addServlet("JerseyServlet", new ServletContainer());
jersey.setInitParameter("javax.ws.rs.Application", JerseyConfig.class.getName());
jersey.setLoadOnStartup(1);
jersey.addMapping("/*");
}
}
@@ -0,0 +1,24 @@
package com.fedex.toolbox.web.resource;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.apache.commons.configuration.Configuration;
import org.springframework.beans.factory.annotation.Autowired;

@Path("/config")
public class ConfigurationResource {
@Autowired
private Configuration _config;

@GET
@Path("/{key}")
@Produces(MediaType.APPLICATION_JSON)
public Response getValueOf(@PathParam("key") String key) {
return Response.ok(_config.getString(key)).build();
}
}
@@ -11,42 +11,38 @@

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;

import com.fedex.toolbox.core.utils.MachineUtils;
import com.fedex.toolbox.web.Version;

@Component
@Path("/")
public class IndexResource {
private static final Logger log = LogManager.getLogger(IndexResource.class);

/* singleton */
private static Map<String, String> _version;

private final Object _versionLock = new Object();

@GET
@Path("/version")
@Produces(MediaType.APPLICATION_JSON)
public Response getVersion() {
if (_version == null) {
synchronized (_versionLock) {
if (_version == null) {
log.entry();

_version = new LinkedHashMap<>();
_version.put("name", Version.name());
_version.put("version", Version.version());
_version.put("built-at", Version.builtAt());
_version.put("built-by", Version.builtBy());
_version.put("host", MachineUtils.hostName());
_version.put("address", MachineUtils.hostAddress());

log.exit(_version);
}
}
}
return Response.ok(_version).build();
}
private static final Logger log = LogManager.getLogger(IndexResource.class);

/* singleton */
private static volatile Map<String, String> _version;

@GET
@Path("/version")
@Produces(MediaType.APPLICATION_JSON)
public Response getVersion() {
if (_version == null) {
synchronized (IndexResource.class) {
if (_version == null) {
log.traceEntry();

_version = new LinkedHashMap<>();
_version.put("name", Version.name());
_version.put("version", Version.version());
_version.put("built-at", Version.builtAt());
_version.put("built-by", Version.builtBy());
_version.put("host", MachineUtils.hostName());
_version.put("address", MachineUtils.hostAddress());

log.traceExit(_version);
}
}
}
return Response.ok(_version).build();
}
}

This file was deleted.

This file was deleted.

This file was deleted.

@@ -0,0 +1 @@
jndi.name=jdbc/postgresql
@@ -1,51 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd">
<wls:context-root>/</wls:context-root>

<wls:session-descriptor>
<wls:url-rewriting-enabled>false</wls:url-rewriting-enabled>
</wls:session-descriptor>

<wls:container-descriptor>
<wls:prefer-application-packages>
<!-- jsr311 -->
<wls:package-name>javax.ws.rs.*</wls:package-name>

<!-- javassist -->
<wls:package-name>javassist.*</wls:package-name>

<!-- aop repackaged -->
<wls:package-name>org.aopalliance.*</wls:package-name>

<!-- jersey 2 -->
<wls:package-name>jersey.repackaged.*</wls:package-name>
<wls:package-name>org.glassfish.jersey.*</wls:package-name>
<wls:package-name>com.sun.research.ws.wadl.*</wls:package-name>

<!-- hk2 -->
<wls:package-name>org.glassfish.hk2.*</wls:package-name>
<wls:package-name>org.jvnet.hk2.*</wls:package-name>
<wls:package-name>org.jvnet.tiger_types.*</wls:package-name>

<!-- Joda -->
<wls:package-name>org.joda.time.*</wls:package-name>
</wls:prefer-application-packages>

<wls:prefer-application-resources>
<wls:resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</wls:resource-name>
<wls:resource-name>META-INF/services/javax.ws.rs.ext.RuntimeDelegate</wls:resource-name>

<!-- jersey -->
<wls:resource-name>META-INF/services/org.glassfish.jersey.*</wls:resource-name>
<wls:resource-name>org.glassfish.jersey.*</wls:resource-name>
<wls:resource-name>jersey.repackaged.*</wls:resource-name>

<!-- hk2 -->
<wls:resource-name>META-INF/services/org.glassfish.hk2.*</wls:resource-name>
</wls:prefer-application-resources>
</wls:container-descriptor>
<wls:weblogic-version>12.1.3</wls:weblogic-version>
<wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd">
<wls:context-root>/</wls:context-root>

<wls:session-descriptor>
<wls:url-rewriting-enabled>false</wls:url-rewriting-enabled>
</wls:session-descriptor>

<wls:container-descriptor>
<wls:prefer-application-packages>
<!-- jsr311 -->
<wls:package-name>javax.ws.rs.*</wls:package-name>

<!-- javassist -->
<wls:package-name>javassist.*</wls:package-name>

<!-- aop repackaged -->
<wls:package-name>org.aopalliance.*</wls:package-name>

<!-- jersey 2 -->
<wls:package-name>jersey.repackaged.*</wls:package-name>
<wls:package-name>org.glassfish.jersey.*</wls:package-name>
<wls:package-name>com.sun.research.ws.wadl.*</wls:package-name>

<!-- hk2 -->
<wls:package-name>org.glassfish.hk2.*</wls:package-name>
<wls:package-name>org.jvnet.hk2.*</wls:package-name>
<wls:package-name>org.jvnet.tiger_types.*</wls:package-name>

<!-- Joda -->
<wls:package-name>org.joda.time.*</wls:package-name>
</wls:prefer-application-packages>

<wls:prefer-application-resources>
<wls:resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</wls:resource-name>
<wls:resource-name>META-INF/services/javax.ws.rs.ext.RuntimeDelegate</wls:resource-name>

<!-- jersey -->
<wls:resource-name>META-INF/services/org.glassfish.jersey.*</wls:resource-name>
<wls:resource-name>org.glassfish.jersey.*</wls:resource-name>
<wls:resource-name>jersey.repackaged.*</wls:resource-name>

<!-- hk2 -->
<wls:resource-name>META-INF/services/org.glassfish.hk2.*</wls:resource-name>
</wls:prefer-application-resources>
</wls:container-descriptor>
<wls:weblogic-version>12.1.3</wls:weblogic-version>
</wls:weblogic-web-app>