Skip to content

Commit

Permalink
Updating logback config to use HSQLDB for logging events, minor chang…
Browse files Browse the repository at this point in the history
…es to FedoraContentMapper.java to get code convention enforcement to pass
  • Loading branch information
escowles committed Jul 1, 2013
1 parent 5e57cb9 commit 5497546
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 34 deletions.
48 changes: 48 additions & 0 deletions pom.xml
Expand Up @@ -193,6 +193,13 @@
<version>${modeshape.version}</version>
</dependency>

<!-- hsqldb for db logging -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.9</version>
</dependency>

<!-- Test dependencies -->
<dependency>
<groupId>org.apache.chemistry.opencmis</groupId>
Expand Down Expand Up @@ -338,6 +345,47 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>

<dependencies>
<!-- specify the dependent jdbc driver here -->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.9</version>
</dependency>
</dependencies>

<!-- common configuration shared by all executions -->
<configuration>
<driver>org.hsqldb.jdbcDriver</driver>
<url>jdbc:hsqldb:file:/tmp/audit.db;shutdown=true</url>
<username>sa</username>
<password></password>
<settingsKey>sensibleKey</settingsKey>
<!--all executions are ignored if -Dmaven.test.skip=true-->
<skip>${maven.test.skip}</skip>
</configuration>

<executions>
<execution>
<id>create-schema</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<autocommit>true</autocommit>
<srcFiles>
<srcFile>src/main/resources/logback-hsqldb.sql</srcFile>
</srcFiles>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
69 changes: 38 additions & 31 deletions src/main/java/org/fcrepo/webdav/FedoraContentMapper.java
Expand Up @@ -20,8 +20,9 @@
import org.modeshape.web.jcr.webdav.ContentMapper;

/**
* This class is almost entirely borrowed from {@link org.modeshape.web.jcr.webdav.DefaultContentMapper}
* except for the Fedora-specific behaviors.
* This class is almost entirely borrowed from
* {@link org.modeshape.web.jcr.webdav.DefaultContentMapper} except for the
* Fedora-specific behaviors.
*
*/
public class FedoraContentMapper implements ContentMapper {
Expand Down Expand Up @@ -60,7 +61,7 @@ public class FedoraContentMapper implements ContentMapper {

private String newFolderPrimaryType;

private final Logger logger = Logger.getLogger(getClass());
private final Logger log = Logger.getLogger(getClass());

@Override
public void initialize(ServletContext servletContext) {
Expand All @@ -76,15 +77,15 @@ public void initialize(ServletContext servletContext) {
String newContentPrimaryType =
getParam(servletContext, INIT_NEW_CONTENT_PRIMARY_TYPE_NAME);

logger.debug("FedoraContentMapper initial content primary types = " +
log.debug("FedoraContentMapper initial content primary types = " +
contentPrimaryTypes);
logger.debug("FedoraContentMapper initial file primary types = " +
log.debug("FedoraContentMapper initial file primary types = " +
filePrimaryTypes);
logger.debug("FedoraContentMapper initial new folder primary types = " +
log.debug("FedoraContentMapper initial new folder primary types = " +
newFolderPrimaryType);
logger.debug("FedoraContentMapper initial new resource primary types = " +
log.debug("FedoraContentMapper initial new resource primary types = " +
newResourcePrimaryType);
logger.debug("FedoraContentMapper initial new content primary types = " +
log.debug("FedoraContentMapper initial new content primary types = " +
newContentPrimaryType);

this.contentPrimaryTypes =
Expand All @@ -103,10 +104,11 @@ protected String getParam(ServletContext servletContext, String name) {
}

/**
* Returns an unmodifiable set containing the elements passed in to this method
* Returns an unmodifiable set containing the elements passed to this method
*
* @param elements a set of elements; may not be null
* @return an unmodifiable set containing all of the elements in {@code elements}; never null
* @return an unmodifiable set containing all the elements in
* {@code elements}; never null
*/
private static Set<String> setFor(String... elements) {
Set<String> set = new HashSet<String>(elements.length);
Expand All @@ -116,19 +118,23 @@ private static Set<String> setFor(String... elements) {
}

/**
* Splits a comma-delimited string into an unmodifiable set containing the substrings between the commas in the source string.
* The elements in the set will be {@link String#trim() trimmed}.
* Splits a comma-delimited string into an unmodifiable set containing the
* substrings between the commas in the source string. The elements in the
* set will be {@link String#trim() trimmed}.
*
* @param commaDelimitedString input string; may not be null, but need not contain any commas
* @return an unmodifiable set whose elements are the trimmed substrings of the source string; never null
* @param commaDelimitedString input string; may not be null, but need not
* contain any commas
* @return an unmodifiable set whose elements are the trimmed substrings
* of the source string; never null
*/
private static Set<String> split(String commaDelimitedString) {
return setFor(commaDelimitedString.split("\\s*,\\s*"));
}

@Override
public InputStream getResourceContent(Node node) throws RepositoryException {
if (!node.hasNode(CONTENT_NODE_NAME)) return null;
public InputStream getResourceContent(Node node)
throws RepositoryException {
if (!node.hasNode(CONTENT_NODE_NAME)) { return null; }
return node.getProperty(CONTENT_NODE_NAME + "/" + DATA_PROP_NAME)
.getBinary().getStream();
}
Expand All @@ -144,7 +150,7 @@ public long getResourceLength(Node node) throws RepositoryException {

@Override
public Date getLastModified(Node node) throws RepositoryException {
if (!node.hasNode(CONTENT_NODE_NAME)) return null;
if (!node.hasNode(CONTENT_NODE_NAME)) { return null; }

return node.getProperty(CONTENT_NODE_NAME + "/" + MODIFIED_PROP_NAME)
.getDate().getTime();
Expand All @@ -157,53 +163,54 @@ public boolean isFolder(Node node) throws RepositoryException {

/**
* @param node the node to check
* @return true if {@code node}'s primary type is one of the types in {@link #filePrimaryTypes}; may not be null
* @throws RepositoryException if an error occurs checking the node's primary type
* @return true if {@code node}'s primary type is one of the types in
* {@link #filePrimaryTypes}; may not be null
* @throws RepositoryException if an error occurs checking the node's
* primary type
*/
@Override
public boolean isFile(Node node) throws RepositoryException {
for (String nodeType : filePrimaryTypes) {
if (node.isNodeType(nodeType)) return true;
if (node.isNodeType(nodeType)) { return true; }
}

return false;
}

/**
* @param node the node to check
* @return true if {@code node}'s primary type is one of the types in {@link #contentPrimaryTypes}; may not be null
* @throws RepositoryException if an error occurs checking the node's primary type
* @return true if {@code node}'s primary type is one of the types in
* {@link #contentPrimaryTypes}; may not be null
* @throws RepositoryException if an error occurs checking the node's
* primary type
*/
private boolean isContent(Node node) throws RepositoryException {
for (String nodeType : contentPrimaryTypes) {
if (node.isNodeType(nodeType)) return true;
if (node.isNodeType(nodeType)) { return true; }
}

return false;
}

@Override
public void createFile(Node parentNode, String fileName)
throws RepositoryException {
throws RepositoryException {
new Datastream(parentNode.getSession(), parentNode.getPath() +
"/" + fileName);

}

@Override
public void createFolder(Node parentNode, String folderName)
throws RepositoryException {
throws RepositoryException {
Node newFolder = parentNode.addNode(folderName, newFolderPrimaryType);
new FedoraObject(newFolder);
}

@Override
public long
setContent(Node parentNode, String resourceName,
InputStream newContent, String contentType,
String characterEncoding) throws RepositoryException,
IOException {

public long setContent(Node parentNode, String resourceName,
InputStream newContent, String contentType, String characterEncoding)
throws RepositoryException, IOException {
Datastream ds = new Datastream(parentNode);
try {
ds.setContent(newContent, contentType, null, null, null);
Expand Down
31 changes: 31 additions & 0 deletions src/main/resources/logback-hsqldb.sql
@@ -0,0 +1,31 @@
DROP TABLE logging_event_exception IF EXISTS;
DROP TABLE logging_event_property IF EXISTS;
DROP TABLE logging_event IF EXISTS;
CREATE TABLE logging_event (
timestmp BIGINT NOT NULL,
formatted_message LONGVARCHAR NOT NULL,
logger_name VARCHAR(256) NOT NULL,
level_string VARCHAR(256) NOT NULL,
thread_name VARCHAR(256),
reference_flag SMALLINT,
arg0 VARCHAR(256),
arg1 VARCHAR(256),
arg2 VARCHAR(256),
arg3 VARCHAR(256),
caller_filename VARCHAR(256),
caller_class VARCHAR(256),
caller_method VARCHAR(256),
caller_line CHAR(4),
event_id BIGINT NOT NULL IDENTITY);
CREATE TABLE logging_event_property (
event_id BIGINT NOT NULL,
mapped_key VARCHAR(254) NOT NULL,
mapped_value LONGVARCHAR,
PRIMARY KEY(event_id, mapped_key),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
CREATE TABLE logging_event_exception (
event_id BIGINT NOT NULL,
i SMALLINT NOT NULL,
trace_line VARCHAR(256) NOT NULL,
PRIMARY KEY(event_id, i),
FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
17 changes: 15 additions & 2 deletions src/main/resources/logback.xml
Expand Up @@ -2,10 +2,23 @@
<!DOCTYPE configuration>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%p %d{HH:mm:ss.SSS} \(%c{0}\) %m%n</pattern>
<encoder>
<pattern>%p %d{HH:mm:ss.SSS} \(%c{0}\) %m%n</pattern>
</encoder>
</appender>
<appender name="HSQLDB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource
class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<sqlDialect class="ch.qos.logback.core.db.dialect.HSQLDialect"/>
<driverClass>org.hsqldb.jdbc.JDBCDriver</driverClass>
<url>jdbc:hsqldb:file:/tmp/audit.db;shutdown=true</url>
<user>sa</user>
<password></password>
</connectionSource>
</appender>
<logger name="org.fcrepo.audit" additivity="false" level="DEBUG">
<appender-ref ref="HSQLDB"/>
</logger>
<logger name="org.fcrepo" additivity="false" level="DEBUG">
<appender-ref ref="STDOUT"/>
</logger>
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/spring/optional_modules.xml
Expand Up @@ -18,6 +18,6 @@
</util:set>

<context:component-scan
base-package="org.fcrepo.syndication, org.fcrepo.serialization.bagit, org.fcrepo.webhooks, org.fcrepo.legacy"/>
base-package="org.fcrepo.syndication, org.fcrepo.serialization.bagit, org.fcrepo.webhooks, org.fcrepo.legacy, org.fcrepo.audit"/>

</beans>

0 comments on commit 5497546

Please sign in to comment.