Apache Jena - Jena JDBC module
Copyright 2013-2018 The Apache Software Foundation

This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

This product uses AspectJ (http://eclipse.org/aspectj/)
AspectJ is licensed under the EPL 1.0
Copyright 2013 The Eclipse Foundation

