mirror of https://github.com/apache/openjpa.git
OPENJPA-1101 hellojpa as a bundle and steps on how to deploy openjpa to Apache Felix Karaf. Tests are disabled for now, as we need better Karaf integration with maven.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@823304 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0d9bd741b3
commit
a91b3bdb40
|
@ -30,6 +30,8 @@
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>openjpa-integration-osgi-itests</artifactId>
|
<artifactId>openjpa-integration-osgi-itests</artifactId>
|
||||||
<version>2.0.0-SNAPSHOT</version>
|
<version>2.0.0-SNAPSHOT</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>OpenJPA Integration Tests - OSGi</name>
|
<name>OpenJPA Integration Tests - OSGi</name>
|
||||||
<description>OpenJPA Integration Tests - OSGi</description>
|
<description>OpenJPA Integration Tests - OSGi</description>
|
||||||
|
|
||||||
|
@ -42,8 +44,14 @@
|
||||||
<groupId>org.apache.openjpa</groupId>
|
<groupId>org.apache.openjpa</groupId>
|
||||||
<artifactId>openjpa</artifactId>
|
<artifactId>openjpa</artifactId>
|
||||||
<version>${version}</version>
|
<version>${version}</version>
|
||||||
<scope>test</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.geronimo.specs</groupId>
|
||||||
|
<artifactId>geronimo-jpa_2.0_spec</artifactId>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.geronimo.specs</groupId>
|
<groupId>org.apache.geronimo.specs</groupId>
|
||||||
<artifactId>geronimo-jms_1.1_spec</artifactId>
|
<artifactId>geronimo-jms_1.1_spec</artifactId>
|
||||||
|
@ -52,12 +60,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.geronimo.specs</groupId>
|
<groupId>org.apache.geronimo.specs</groupId>
|
||||||
<artifactId>geronimo-jta_1.1_spec</artifactId>
|
<artifactId>geronimo-jta_1.1_spec</artifactId>
|
||||||
<scope>test</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.geronimo.specs</groupId>
|
|
||||||
<artifactId>geronimo-jpa_2.0_spec</artifactId>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.geronimo.specs</groupId>
|
<groupId>org.apache.geronimo.specs</groupId>
|
||||||
|
@ -75,12 +78,11 @@
|
||||||
<groupId>commons-lang</groupId>
|
<groupId>commons-lang</groupId>
|
||||||
<artifactId>commons-lang</artifactId>
|
<artifactId>commons-lang</artifactId>
|
||||||
<version>2.4</version>
|
<version>2.4</version>
|
||||||
<scope>test</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-pool</groupId>
|
<groupId>commons-pool</groupId>
|
||||||
<artifactId>commons-pool</artifactId>
|
<artifactId>commons-pool</artifactId>
|
||||||
<version>1.4</version>
|
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- Testcase depends -->
|
<!-- Testcase depends -->
|
||||||
|
@ -155,6 +157,7 @@
|
||||||
<groupId>org.apache.felix</groupId>
|
<groupId>org.apache.felix</groupId>
|
||||||
<artifactId>org.osgi.core</artifactId>
|
<artifactId>org.osgi.core</artifactId>
|
||||||
<version>1.2.0</version>
|
<version>1.2.0</version>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- Apache Felix framework -->
|
<!-- Apache Felix framework -->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -194,6 +197,11 @@
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<resources>
|
<resources>
|
||||||
|
<!-- for source jar -->
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
</resource>
|
||||||
|
<!-- for test jar -->
|
||||||
<resource>
|
<resource>
|
||||||
<directory>src/test/resources</directory>
|
<directory>src/test/resources</directory>
|
||||||
</resource>
|
</resource>
|
||||||
|
@ -210,6 +218,49 @@
|
||||||
</resources>
|
</resources>
|
||||||
|
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>1.5</source>
|
||||||
|
<target>1.5</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-antrun-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>process-classes</phase>
|
||||||
|
<configuration>
|
||||||
|
<tasks>
|
||||||
|
<ant antfile="src/main/ant/enhancer.xml" target="enhance" inheritRefs="true">
|
||||||
|
<property name="maven.test.skip" value="${maven.test.skip}" />
|
||||||
|
<property name="test" value="${test}" />
|
||||||
|
<property name="outdir" value="${project.build.outputDirectory}" />
|
||||||
|
<property name="project.build.outputDirectory" value="${project.build.outputDirectory}" />
|
||||||
|
<property name="openjpa.loglevel" value="${openjpa.loglevel}" />
|
||||||
|
<property name="build.enhance" value="${build.enhance}" />
|
||||||
|
</ant>
|
||||||
|
</tasks>
|
||||||
|
</configuration>
|
||||||
|
<goals>
|
||||||
|
<goal>run</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
|
||||||
|
</archive>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<!--
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.servicemix.tooling</groupId>
|
<groupId>org.apache.servicemix.tooling</groupId>
|
||||||
<artifactId>depends-maven-plugin</artifactId>
|
<artifactId>depends-maven-plugin</artifactId>
|
||||||
|
@ -223,11 +274,46 @@
|
||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
-->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-Name>${artifactId}</Bundle-Name>
|
||||||
|
<Bundle-SymbolicName>${groupId}.${artifactId};singleton=true</Bundle-SymbolicName>
|
||||||
|
<Bundle-DocURL>http://openjpa.apache.org/documentation.html</Bundle-DocURL>
|
||||||
|
<!-- OSGi Bundle Metadata -->
|
||||||
|
<Private-Package>hellojpa*,META-INF*</Private-Package>
|
||||||
|
<Export-Package></Export-Package>
|
||||||
|
<Bundle-Activator>hellojpa.Main</Bundle-Activator>
|
||||||
|
<!-- Eclipse metadata -->
|
||||||
|
<Eclipse-Autostart>false</Eclipse-Autostart>
|
||||||
|
<Bundle-ClassPath>.</Bundle-ClassPath>
|
||||||
|
</instructions>
|
||||||
|
<unpackBundle>true</unpackBundle>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>bundle-manifest</id>
|
||||||
|
<phase>process-classes</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>manifest</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
<configuration>
|
<configuration>
|
||||||
<forkMode>pertest</forkMode>
|
<forkMode>pertest</forkMode>
|
||||||
|
<argLine>${surefire.jvm.args}</argLine>
|
||||||
|
<excludes>
|
||||||
|
<!-- exclude everything for now.... -->
|
||||||
|
<exclude>org/apache/openjpa/**/Test*.java</exclude>
|
||||||
|
</excludes>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
|
|
|
@ -0,0 +1,104 @@
|
||||||
|
Setting up Apache Felix Karaf for OpenJPA 2.0.x
|
||||||
|
|
||||||
|
Installing and running Apache Felix Karaf
|
||||||
|
---------------------------------------------------
|
||||||
|
1) Download and extract Apache Felix Karaf 1.0.0 from:
|
||||||
|
|
||||||
|
http://www.apache.org/dist/felix/apache-felix-karaf-1.0.0.zip
|
||||||
|
http://www.apache.org/dist/felix/apache-felix-karaf-1.0.0.tar.gz
|
||||||
|
|
||||||
|
2) Start Karaf under Java SE 5 or 6:
|
||||||
|
|
||||||
|
cd apache-felix-karaf-1.0.0/bin
|
||||||
|
karaf
|
||||||
|
|
||||||
|
|
||||||
|
Installing and running the Felix Web Console and Jetty:
|
||||||
|
-------------------------------------------------------
|
||||||
|
1) Install the following bundles:
|
||||||
|
|
||||||
|
a) osgi:install http://www.apache.org/dist/felix/org.osgi.compendium-1.4.0.jar
|
||||||
|
b) osgi:install http://www.apache.org/dist/felix/org.apache.felix.scr-1.0.8.jar
|
||||||
|
c) osgi:install http://www.apache.org/dist/felix/org.apache.felix.http.jetty-2.0.2.jar
|
||||||
|
d) osgi:install http://www.apache.org/dist/felix/org.apache.felix.webconsole-2.0.0.jar
|
||||||
|
|
||||||
|
2) Start the web console:
|
||||||
|
|
||||||
|
a) osgi:start <bundle id for org.apache.felix.http.jetty>
|
||||||
|
b) osgi:start <bundle id for org.apache.felix.webconsole>
|
||||||
|
|
||||||
|
Note: You will have to start the Config, Event and Scr bundles for those
|
||||||
|
tabs to function in the web console.
|
||||||
|
|
||||||
|
3) Access the web console in a browser:
|
||||||
|
|
||||||
|
http://localhost:8080/system/console
|
||||||
|
uid = admin
|
||||||
|
pwd = admin
|
||||||
|
|
||||||
|
|
||||||
|
Installing OpenJPA 2.0.x
|
||||||
|
--------------------------------------------
|
||||||
|
1) Install the following prereq bundles:
|
||||||
|
|
||||||
|
a) osgi:install http://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
|
||||||
|
b) osgi:install http://repo1.maven.org/maven2/commons-lang/commons-lang/2.4/commons-lang-2.4.jar
|
||||||
|
c) osgi:install http://repo1.maven.org/maven2/commons-pool/commons-pool/1.5/commons-pool-1.5.jar
|
||||||
|
d) osgi:install http://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar
|
||||||
|
e) osgi:install http://repo1.maven.org/maven2/org/apache/geronimo/specs/geronimo-jta_1.1_spec/1.1.1/geronimo-jta_1.1_spec-1.1.1.jar
|
||||||
|
f) osgi:install http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/geronimo/specs/geronimo-jpa_2.0_spec/1.0-PFD2/geronimo-jpa_2.0_spec-1.0-PFD2.jar
|
||||||
|
g) osgi:install http://mirrors.ibiblio.org/pub/mirrors/maven2/org/apache/geronimo/specs/geronimo-validation_1.0_spec/1.0-CR5/geronimo-validation_1.0_spec-1.0-CR5.jar
|
||||||
|
|
||||||
|
2) Install OpenJPA 2.0.x:
|
||||||
|
|
||||||
|
For OpenJPA 2.0.0-M3:
|
||||||
|
a) osgi:install http://people.apache.org/~dwoods/openjpa/2.0.0-M3/staging-repo/org/apache/openjpa/openjpa/2.0.0-M3/openjpa-2.0.0-M3.jar
|
||||||
|
|
||||||
|
For a locally built OpenJPA trunk (2.0.0-SNAPSHOT):
|
||||||
|
a) osgi:install file:///<m2_repo>/org/apache/openjpa/openjpa/2.0.0-SNAPSHOT/openjpa-2.0.0-SNAPSHOT.jar
|
||||||
|
|
||||||
|
3) Check the Karaf logfile for any problems:
|
||||||
|
|
||||||
|
apache-felix-karaf-1.0.0/data/log/karaf.log
|
||||||
|
|
||||||
|
|
||||||
|
Installing an OSGi and/or Blueprint based sample app:
|
||||||
|
-----------------------------------------------------
|
||||||
|
This step is still a work-in-progress and TBD...
|
||||||
|
|
||||||
|
1) Build the openjpa-integration/osgi-itests module in trunk (2.0.0-SNAPSHOT)
|
||||||
|
from source.
|
||||||
|
|
||||||
|
2) Install the bundlized HelloJPA example:
|
||||||
|
|
||||||
|
a) osgi:install file:///<m2_repo>/org/apache/openjpa/openjpa-integration-osgi-itests/2.0.0-SNAPSHOT/openjpa-integration-osgi-itests-2.0.0-SNAPSHOT.jar
|
||||||
|
b) osgi:start <bundle id for openjpa-integration-osgi-itests>
|
||||||
|
|
||||||
|
Note: At this point the start should fail with a message like:
|
||||||
|
Bundle start
|
||||||
|
org.osgi.framework.BundleException: Activator start error in bundle
|
||||||
|
org.apache.openjpa.openjpa-integration-osgi-itests [45].
|
||||||
|
. . .
|
||||||
|
Caused by: javax.persistence.PersistenceException: No persistence providers
|
||||||
|
available for "hellojpa" after trying the following discovered
|
||||||
|
implementations: NONE
|
||||||
|
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:189)
|
||||||
|
at hellojpa.Main.main(Main.java:38)
|
||||||
|
at hellojpa.Main.start(Main.java:81)
|
||||||
|
at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:667)
|
||||||
|
at org.apache.felix.framework.Felix.activateBundle(Felix.java:1699)
|
||||||
|
... 15 more
|
||||||
|
|
||||||
|
|
||||||
|
2) To reinstall the sample app, you'll need to stop and uninstall it first, even if the initial install failed:
|
||||||
|
|
||||||
|
a) osgi:stop <bundle id for openjpa-integration-osgi-itests>
|
||||||
|
b) osgi:uninstall <bundle id for openjpa-integration-osgi-itests>
|
||||||
|
|
||||||
|
|
||||||
|
Shutting down Karaf:
|
||||||
|
---------------------
|
||||||
|
1) From the Karaf cmdline:
|
||||||
|
|
||||||
|
osgi:shutdown
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
<project name="enhance" basedir=".">
|
||||||
|
<!--
|
||||||
|
This build file executes the PCEnhancer on the test entities. It's in a
|
||||||
|
separate file instead of nested in pom.xml to make some conditional
|
||||||
|
processing easier.
|
||||||
|
|
||||||
|
Test classes will not be compiled if maven is invoked with
|
||||||
|
-Dmaven.test.skip=true.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<condition property="maven.test.skip.istrue">
|
||||||
|
<istrue value="${maven.test.skip}" />
|
||||||
|
</condition>
|
||||||
|
|
||||||
|
<condition property="skip.enhance">
|
||||||
|
<or>
|
||||||
|
<equals arg1="${test}" arg2="false" />
|
||||||
|
<equals arg1="${build.enhance}" arg2="false" />
|
||||||
|
<istrue value="${maven.test.skip}" />
|
||||||
|
<istrue value="${skipTests}" />
|
||||||
|
</or>
|
||||||
|
</condition>
|
||||||
|
|
||||||
|
<!-- =================================
|
||||||
|
target: enhance
|
||||||
|
================================= -->
|
||||||
|
<target name="enhance"
|
||||||
|
description="--> run the enhancer unless test=false"
|
||||||
|
unless="skip.enhance">
|
||||||
|
<antcall target="enhance.all.entities"
|
||||||
|
inheritall="true"
|
||||||
|
inheritrefs="true" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- =================================
|
||||||
|
target: enhance.all.entities
|
||||||
|
================================= -->
|
||||||
|
<target name="enhance.all.entities"
|
||||||
|
description="--> enhance the test entities"
|
||||||
|
unless="skip.enhance">
|
||||||
|
<echo> running enhancer</echo>
|
||||||
|
<!--
|
||||||
|
Inherited references won't be present until the task is called.
|
||||||
|
Therefore the path definition needs to stay inside the task.
|
||||||
|
-->
|
||||||
|
<path id="cp">
|
||||||
|
<path refid="maven.test.classpath" />
|
||||||
|
</path>
|
||||||
|
|
||||||
|
<taskdef name="openjpac"
|
||||||
|
classname="org.apache.openjpa.ant.PCEnhancerTask">
|
||||||
|
<classpath refid="cp" />
|
||||||
|
</taskdef>
|
||||||
|
|
||||||
|
<fileset id="enhance.path.ref"
|
||||||
|
dir="${project.build.outputDirectory}">
|
||||||
|
<include name="**/*.class" />
|
||||||
|
<exclude name="**/Test*.class" />
|
||||||
|
</fileset>
|
||||||
|
<openjpac>
|
||||||
|
<classpath refid="cp" />
|
||||||
|
<fileset refid="enhance.path.ref" />
|
||||||
|
<config log="DefaultLevel=${openjpa.loglevel}" />
|
||||||
|
</openjpac>
|
||||||
|
</target>
|
||||||
|
</project>
|
|
@ -0,0 +1,156 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
<project default="usagewarning">
|
||||||
|
|
||||||
|
<property name="parent" value="${basedir}/.."/>
|
||||||
|
<property name="root" value="${parent}/.."/>
|
||||||
|
|
||||||
|
<!-- database connection properties -->
|
||||||
|
<property name="dbdriver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
|
||||||
|
<property name="dburl"
|
||||||
|
value="jdbc:derby:${basedir}/${example}-database;create=true"/>
|
||||||
|
<property name="dbuser" value=""/>
|
||||||
|
<property name="dbpass" value=""/>
|
||||||
|
|
||||||
|
|
||||||
|
<target name="usagewarning">
|
||||||
|
<fail>
|
||||||
|
Please traverse to a sub-directory, like hellojpa, and run "ant" from there.
|
||||||
|
</fail>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="init" depends="init:discover, init:windows, init:unix">
|
||||||
|
</target>
|
||||||
|
<target name="init:discover">
|
||||||
|
<condition property="isWindows">
|
||||||
|
<os family="windows"/>
|
||||||
|
</condition>
|
||||||
|
</target>
|
||||||
|
<target name="init:windows" if="isWindows">
|
||||||
|
<property name="platform.script.ext" value=".bat"/>
|
||||||
|
</target>
|
||||||
|
<target name="init:unix" unless="isWindows">
|
||||||
|
<property name="platform.script.ext" value=""/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="all" depends="init">
|
||||||
|
<exec dir="${basedir}/hellojpa" executable="ant${platform.script.ext}"/>
|
||||||
|
<exec dir="${basedir}/relations" executable="ant${platform.script.ext}"/>
|
||||||
|
<exec dir="${basedir}/reversemapping" executable="ant${platform.script.ext}"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<path id="classpath"
|
||||||
|
description="The classpath to use for compiling and running">
|
||||||
|
<pathelement path="${parent}"/>
|
||||||
|
<!-- we could include the individual jars as below, but lets use the
|
||||||
|
openjpa-all.jar with Derby instead
|
||||||
|
<fileset dir="${root}">
|
||||||
|
<include name="**/*.jar"/>
|
||||||
|
<exclude name="openjpa-all-*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
-->
|
||||||
|
<fileset dir="${root}">
|
||||||
|
<include name="openjpa-all-*.jar"/>
|
||||||
|
<include name="lib/derby*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
</path>
|
||||||
|
|
||||||
|
<path id="javaagent">
|
||||||
|
<fileset dir="${root}">
|
||||||
|
<include name="openjpa-*.jar"/>
|
||||||
|
<exclude name="openjpa-all-*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
</path>
|
||||||
|
<pathconvert property="javaagent" refid="javaagent"/>
|
||||||
|
|
||||||
|
<target name="clean" depends="pre-clean"
|
||||||
|
description="Clean up compiled files and generated database files">
|
||||||
|
<delete includeemptydirs="yes">
|
||||||
|
<fileset dir="${basedir}">
|
||||||
|
<include name="*.class"/>
|
||||||
|
<include name="*.log"/>
|
||||||
|
<include name="${example}-database/**/*"/>
|
||||||
|
<include name="${example}-database"/>
|
||||||
|
</fileset>
|
||||||
|
</delete>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- this target can be overridden by the sub-build -->
|
||||||
|
<target name="pre-clean" description="Pre-clean phase">
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="compile" depends="pre-compile"
|
||||||
|
description="Compile the example java files">
|
||||||
|
<javac srcdir="${parent}" classpathref="classpath"
|
||||||
|
debug="yes" includes="${example}/**.java"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- this target can be overridden by the sub-build -->
|
||||||
|
<target name="pre-compile" description="Pre-compilation phase">
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="run" depends="compile"
|
||||||
|
description="Run the example Main program">
|
||||||
|
|
||||||
|
<java classname="${example}.Main" classpathref="classpath" fork="yes"
|
||||||
|
failonerror="yes">
|
||||||
|
<!--
|
||||||
|
Specifying the openjpa jar as the javaagent argument is
|
||||||
|
necessary in order for automatic class-enhancement to work.
|
||||||
|
-->
|
||||||
|
<jvmarg value="-javaagent:${javaagent}"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Specify the system properties to use when configuring
|
||||||
|
OpenJPA. Note that these will only be used becuase in the
|
||||||
|
examples, the call to "Persistence.createEntityManagerFactory"
|
||||||
|
is passed "System.getProperties()".
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
By default, use the stand-alone Derby database (provided).
|
||||||
|
This can easily be changes to use your own database's driver,
|
||||||
|
provided you ensure it is accessible in the classpath.
|
||||||
|
-->
|
||||||
|
<sysproperty key="openjpa.ConnectionDriverName"
|
||||||
|
value="${dbdriver}"/>
|
||||||
|
<sysproperty key="openjpa.ConnectionURL" value="${dburl}"/>
|
||||||
|
<sysproperty key="openjpa.ConnectionUserName" value="${dbuser}"/>
|
||||||
|
<sysproperty key="openjpa.ConnectionPassword" value="${dbpass}"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Tell OpenJPA to automatically create tables in the database
|
||||||
|
for entities. Note that this should be disabled when
|
||||||
|
running against a production database, since you probably
|
||||||
|
don't want to be altering the schema at runtime.
|
||||||
|
-->
|
||||||
|
<sysproperty key="openjpa.jdbc.SynchronizeMappings"
|
||||||
|
value="buildSchema"/>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Output all the SQL for educational purposes, but set the
|
||||||
|
general logging level to only show warnings.
|
||||||
|
-->
|
||||||
|
<sysproperty key="openjpa.Log"
|
||||||
|
value="DefaultLevel=WARN,SQL=TRACE"/>
|
||||||
|
</java>
|
||||||
|
</target>
|
||||||
|
</project>
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package hellojpa;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.persistence.*;
|
||||||
|
import org.osgi.framework.BundleActivator;
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A very simple, stand-alone program that stores a new entity in the
|
||||||
|
* database and then performs a query to retrieve it.
|
||||||
|
*/
|
||||||
|
public class Main implements BundleActivator {
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// Create a new EntityManagerFactory using the System properties.
|
||||||
|
// The "hellojpa" name will be used to configure based on the
|
||||||
|
// corresponding name in the META-INF/persistence.xml file
|
||||||
|
EntityManagerFactory factory = Persistence.
|
||||||
|
createEntityManagerFactory("hellojpa", System.getProperties());
|
||||||
|
|
||||||
|
// Create a new EntityManager from the EntityManagerFactory. The
|
||||||
|
// EntityManager is the main object in the persistence API, and is
|
||||||
|
// used to create, delete, and query objects, as well as access
|
||||||
|
// the current transaction
|
||||||
|
EntityManager em = factory.createEntityManager();
|
||||||
|
|
||||||
|
// Begin a new local transaction so that we can persist a new entity
|
||||||
|
em.getTransaction().begin();
|
||||||
|
|
||||||
|
// Create and persist a new Message entity
|
||||||
|
em.persist(new Message("Hello Persistence!"));
|
||||||
|
|
||||||
|
// Commit the transaction, which will cause the entity to
|
||||||
|
// be stored in the database
|
||||||
|
em.getTransaction().commit();
|
||||||
|
|
||||||
|
// It is always good practice to close the EntityManager so that
|
||||||
|
// resources are conserved.
|
||||||
|
em.close();
|
||||||
|
|
||||||
|
// Create a fresh, new EntityManager
|
||||||
|
EntityManager em2 = factory.createEntityManager();
|
||||||
|
|
||||||
|
// Perform a simple query for all the Message entities
|
||||||
|
Query q = em2.createQuery("select m from Message m");
|
||||||
|
|
||||||
|
// Go through each of the entities and print out each of their
|
||||||
|
// messages, as well as the date on which it was created
|
||||||
|
for (Message m : (List<Message>) q.getResultList()) {
|
||||||
|
System.out.println(m.getMessage()
|
||||||
|
+ " (created on: " + m.getCreated() + ")");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Again, it is always good to clean up after ourselves
|
||||||
|
em2.close();
|
||||||
|
factory.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void start(BundleContext context) {
|
||||||
|
System.out.println("Bundle start");
|
||||||
|
main(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop(BundleContext context) {
|
||||||
|
System.out.println("Bundle stop");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package hellojpa;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import javax.persistence.*;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A very simple persistent entity that holds a "message", has a
|
||||||
|
* "created" field that is initialized to the time at which the
|
||||||
|
* object was created, and an id field that is initialized to the
|
||||||
|
* current time.
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
public class Message {
|
||||||
|
@Id
|
||||||
|
private long id = System.currentTimeMillis();
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
@Basic
|
||||||
|
private Date created = new Date();
|
||||||
|
|
||||||
|
public Message() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Message(String msg) {
|
||||||
|
message = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long val) {
|
||||||
|
id = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMessage(String msg) {
|
||||||
|
message = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMessage() {
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreated(Date date) {
|
||||||
|
created = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getCreated() {
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
<project name="hellojpa" default="run">
|
||||||
|
<property name="example" value="hellojpa"/>
|
||||||
|
<import file="../build.xml"/>
|
||||||
|
</project>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
version="2.0">
|
||||||
|
|
||||||
|
<persistence-unit name="hellojpa">
|
||||||
|
<description>PU for hellojpa</description>
|
||||||
|
<class>hellojpa</class>
|
||||||
|
<properties>
|
||||||
|
<property name="openjpa.DynamicEnhancementAgent"
|
||||||
|
value="false"/>
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
|
|
||||||
|
</persistence>
|
||||||
|
|
|
@ -35,6 +35,6 @@
|
||||||
<module>examples</module>
|
<module>examples</module>
|
||||||
<module>tck</module>
|
<module>tck</module>
|
||||||
<module>validation</module>
|
<module>validation</module>
|
||||||
<!-- <module>osgi-itests</module> -->
|
<module>osgi-itests</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
||||||
|
|
Loading…
Reference in New Issue