Author: ningjiang
Date: Wed Sep 9 13:18:18 2009
New Revision: 812942
URL: http://svn.apache.org/viewvc?rev=812942&view=rev
Log:
CAMEL-1998 Added OSGi integration test for camel-jpa
Added:
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/JpaRouteTest.java
(with props)
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/SendEmail.java
(with props)
camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/
camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/persistence.xml
(with props)
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml
(with props)
Modified:
camel/trunk/tests/camel-itest-osgi/pom.xml
Modified: camel/trunk/tests/camel-itest-osgi/pom.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/pom.xml?rev=812942&r1=812941&r2=812942&view=diff
==============================================================================
--- camel/trunk/tests/camel-itest-osgi/pom.xml (original)
+++ camel/trunk/tests/camel-itest-osgi/pom.xml Wed Sep 9 13:18:18 2009
@@ -99,6 +99,11 @@
<artifactId>camel-servlet</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-jpa</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>org.apache.camel.tests</groupId>
<artifactId>org.apache.camel.tests.mock-javamail_1.7</artifactId>
@@ -125,7 +130,11 @@
<version>1.1</version>
<scope>test</scope>
</dependency>
-
+ <dependency>
+ <groupId>org.apache.openjpa</groupId>
+ <artifactId>openjpa-persistence-jdbc</artifactId>
+ <scope>test</scope>
+ </dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Added:
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/JpaRouteTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/JpaRouteTest.java?rev=812942&view=auto
==============================================================================
---
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/JpaRouteTest.java
(added)
+++
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/JpaRouteTest.java
Wed Sep 9 13:18:18 2009
@@ -0,0 +1,161 @@
+/**
+ * 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 org.apache.camel.itest.osgi.jpa;
+
+import java.util.List;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.camel.spring.SpringCamelContext;
+import org.apache.camel.spring.SpringRouteBuilder;
+import org.junit.After;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Inject;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.osgi.framework.BundleContext;
+import org.springframework.orm.jpa.JpaTemplate;
+import org.springframework.orm.jpa.JpaTransactionManager;
+import
org.springframework.osgi.context.support.OsgiBundleXmlApplicationContext;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.TransactionCallback;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import static org.ops4j.pax.exam.CoreOptions.felix;
+import static org.ops4j.pax.exam.CoreOptions.knopflerfish;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.wrappedBundle;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.profile;
+import static org.ops4j.pax.exam.container.def.PaxRunnerOptions.scanFeatures;
+
+...@runwith(JUnit4TestRunner.class)
+public class JpaRouteTest extends OSGiIntegrationTestSupport {
+ protected static final String SELECT_ALL_STRING = "select x from " +
SendEmail.class.getName() + " x";
+
+ protected OsgiBundleXmlApplicationContext applicationContext;
+
+ @Inject
+ protected BundleContext bundleContext;
+ protected JpaTemplate jpaTemplate;
+
+ @Test
+ public void testRouteJpa() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+
+ template.sendBody("direct:start", new
SendEmail("[email protected]"));
+
+ assertMockEndpointsSatisfied();
+ assertEntityInDB();
+ }
+
+ @After
+ public void tearDown() {
+ try {
+ super.tearDown();
+ if (applicationContext != null) {
+ if (applicationContext.isActive()) {
+ applicationContext.destroy();
+ }
+ applicationContext = null;
+ }
+ } catch (Exception exception) {
+ // Don't throw the exception in the tearDown method
+ }
+ }
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ applicationContext = new OsgiBundleXmlApplicationContext(
+ new
String[]{"org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml"});
+ if (bundleContext != null) {
+ applicationContext.setBundleContext(bundleContext);
+ applicationContext.refresh();
+ }
+ cleanupRepository();
+ return SpringCamelContext.springCamelContext(applicationContext);
+ }
+
+ private void assertEntityInDB() throws Exception {
+ jpaTemplate = (JpaTemplate)applicationContext.getBean("jpaTemplate",
JpaTemplate.class);
+
+ List list = jpaTemplate.find(SELECT_ALL_STRING);
+ assertEquals(1, list.size());
+
+ assertIsInstanceOf(SendEmail.class, list.get(0));
+ }
+
+ protected void cleanupRepository() {
+ jpaTemplate = (JpaTemplate)applicationContext.getBean("jpaTemplate",
JpaTemplate.class);
+
+ TransactionTemplate transactionTemplate = new TransactionTemplate();
+ transactionTemplate.setTransactionManager(new
JpaTransactionManager(jpaTemplate.getEntityManagerFactory()));
+
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
+
+ transactionTemplate.execute(new TransactionCallback() {
+ public Object doInTransaction(TransactionStatus arg0) {
+ List list = jpaTemplate.find(SELECT_ALL_STRING);
+ for (Object item : list) {
+ jpaTemplate.remove(item);
+ }
+ jpaTemplate.flush();
+ return Boolean.TRUE;
+ }
+ });
+ }
+
+ @Configuration
+ public static Option[] configure() {
+ Option[] options = options(
+ // install the spring dm profile
+ profile("spring.dm").version("1.2.0"),
+ // this is how you set the default log level when using pax
logging (logProfile)
+
org.ops4j.pax.exam.CoreOptions.systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"),
+
//org.ops4j.pax.exam.CoreOptions.systemProperty("org.apache.servicemix.specs.debug").value("true"),
+
mavenBundle().groupId("net.sourceforge.serp").artifactId("com.springsource.serp").version("1.13.1"),
+ // using the features to install the camel components
+ scanFeatures(mavenBundle().groupId("org.apache.camel.karaf").
+
artifactId("features").versionAsInProject().type("xml/features"),
+ "camel-core", "camel-osgi", "camel-spring",
"camel-test", "camel-jpa"),
+
+ /* This the camel-jpa needed bundles
+
mavenBundle().groupId("org.apache.servicemix.specs").artifactId("org.apache.servicemix.specs.java-persistence-api-1.1.1").version("1.4-SNAPSHOT"),
+
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.openjpa").version("1.2.1_1-SNAPSHOT"),
+
mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-jta_1.1_spec").version("1.1.1"),
+
mavenBundle().groupId("org.apache.camel").artifactId("camel-jpa").version("2.1-SNAPSHOT"),
+
mavenBundle().groupId("org.springframework").artifactId("spring-jdbc").version("2.5.6"),
+
mavenBundle().groupId("org.springframework").artifactId("spring-tx").version("2.5.6"),
+
mavenBundle().groupId("org.springframework").artifactId("spring-orm").version("2.5.6"),
+
mavenBundle().groupId("commons-lang").artifactId("commons-lang").version("2.4"),
+
mavenBundle().groupId("commons-collections").artifactId("commons-collections").version("3.2.1"),
+
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.ant").version("1.7.0_1"),
+
mavenBundle().groupId("commons-pool").artifactId("commons-pool").version("1.4"),
+
mavenBundle().groupId("org.apache.geronimo.specs").artifactId("geronimo-jms_1.1_spec").version("1.1.1"),*/
+
mavenBundle().groupId("org.apache.derby").artifactId("derby").version("10.4.2.0"),
+
+
+ knopflerfish());
+
+ return options;
+ }
+}
\ No newline at end of file
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/JpaRouteTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/JpaRouteTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/SendEmail.java
URL:
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/SendEmail.java?rev=812942&view=auto
==============================================================================
---
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/SendEmail.java
(added)
+++
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/SendEmail.java
Wed Sep 9 13:18:18 2009
@@ -0,0 +1,62 @@
+/**
+ * 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 org.apache.camel.itest.osgi.jpa;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+/**
+ * Represents a task which is added to the database, then removed from the
database when it is consumed
+ *
+ * @version $Revision$
+ */
+...@entity
+public class SendEmail {
+ private Long id;
+ private String address;
+
+ public SendEmail() {
+ }
+
+ public SendEmail(String address) {
+ setAddress(address);
+ }
+
+ @Override
+ public String toString() {
+ return "SendEmail[id: " + getId() + " address: " + getAddress() + "]";
+ }
+
+ @Id
+ @GeneratedValue
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+}
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/SendEmail.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/jpa/SendEmail.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/persistence.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/persistence.xml?rev=812942&view=auto
==============================================================================
---
camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/persistence.xml
(added)
+++
camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/persistence.xml
Wed Sep 9 13:18:18 2009
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation.
+
+ Licensed 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="1.0"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
+
+ <persistence-unit name="camel" transaction-type="RESOURCE_LOCAL">
+ <!--
+ The default provider can be OpenJPA, or some other product.
+ This element is optional if OpenJPA is the only JPA provider
+ in the current classloading environment, but can be specified
+ in cases where there are multiple JPA implementations available.
+ -->
+ <provider>
+ org.apache.openjpa.persistence.PersistenceProviderImpl
+ </provider>
+
+ <class>org.apache.camel.itest.osgi.jpa.SendEmail</class>
+
+ <properties>
+ <property name="openjpa.ConnectionURL"
value="jdbc:derby:target/derby;create=true"/>
+ <property name="openjpa.ConnectionDriverName"
value="org.apache.derby.jdbc.EmbeddedDriver"/>
+ <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
+ <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO,
SQL=TRACE"/>
+ </properties>
+ </persistence-unit>
+</persistence>
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/persistence.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/persistence.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/resources/META-INF/persistence.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added:
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml
URL:
http://svn.apache.org/viewvc/camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml?rev=812942&view=auto
==============================================================================
---
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml
(added)
+++
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml
Wed Sep 9 13:18:18 2009
@@ -0,0 +1,48 @@
+<?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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:camel="http://camel.apache.org/schema/spring"
+ xsi:schemaLocation=
+ "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+ <bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
+ <property name="transactionManager">
+ <bean class="org.springframework.orm.jpa.JpaTransactionManager">
+ <property name="entityManagerFactory"
ref="entityManagerFactory"/>
+ </bean>
+ </property>
+ </bean>
+
+ <bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
+ <property name="entityManagerFactory" ref="entityManagerFactory"/>
+ </bean>
+
+ <bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
+ <property name="persistenceUnitName" value="camel"/>
+ </bean>
+
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="direct:start"/>
+ <to uri="jpa://org.apache.camel.itest.osgi.jpa.SendEmail"/>
+ <to uri="mock:result"/>
+ </route>
+ </camelContext>
+</beans>
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
camel/trunk/tests/camel-itest-osgi/src/test/resources/org/apache/camel/itest/osgi/jpa/springJpaRouteTest.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml