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>
|
||||
<artifactId>openjpa-integration-osgi-itests</artifactId>
|
||||
<version>2.0.0-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>OpenJPA Integration Tests - OSGi</name>
|
||||
<description>OpenJPA Integration Tests - OSGi</description>
|
||||
|
||||
|
@ -42,8 +44,14 @@
|
|||
<groupId>org.apache.openjpa</groupId>
|
||||
<artifactId>openjpa</artifactId>
|
||||
<version>${version}</version>
|
||||
<scope>test</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-jpa_2.0_spec</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-jms_1.1_spec</artifactId>
|
||||
|
@ -52,12 +60,7 @@
|
|||
<dependency>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-jta_1.1_spec</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
<artifactId>geronimo-jpa_2.0_spec</artifactId>
|
||||
<scope>test</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.geronimo.specs</groupId>
|
||||
|
@ -75,12 +78,11 @@
|
|||
<groupId>commons-lang</groupId>
|
||||
<artifactId>commons-lang</artifactId>
|
||||
<version>2.4</version>
|
||||
<scope>test</scope>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-pool</groupId>
|
||||
<artifactId>commons-pool</artifactId>
|
||||
<version>1.4</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- Testcase depends -->
|
||||
|
@ -155,6 +157,7 @@
|
|||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>org.osgi.core</artifactId>
|
||||
<version>1.2.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- Apache Felix framework -->
|
||||
<dependency>
|
||||
|
@ -194,6 +197,11 @@
|
|||
|
||||
<build>
|
||||
<resources>
|
||||
<!-- for source jar -->
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
<!-- for test jar -->
|
||||
<resource>
|
||||
<directory>src/test/resources</directory>
|
||||
</resource>
|
||||
|
@ -210,6 +218,49 @@
|
|||
</resources>
|
||||
|
||||
<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>
|
||||
<groupId>org.apache.servicemix.tooling</groupId>
|
||||
<artifactId>depends-maven-plugin</artifactId>
|
||||
|
@ -223,11 +274,46 @@
|
|||
</execution>
|
||||
</executions>
|
||||
</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>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<configuration>
|
||||
<forkMode>pertest</forkMode>
|
||||
<argLine>${surefire.jvm.args}</argLine>
|
||||
<excludes>
|
||||
<!-- exclude everything for now.... -->
|
||||
<exclude>org/apache/openjpa/**/Test*.java</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</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>tck</module>
|
||||
<module>validation</module>
|
||||
<!-- <module>osgi-itests</module> -->
|
||||
<module>osgi-itests</module>
|
||||
</modules>
|
||||
</project>
|
||||
|
|
Loading…
Reference in New Issue