You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cm...@apache.org on 2011/02/06 23:43:07 UTC
svn commit: r1067791 - in /camel/trunk/components/camel-jpa/src:
main/java/org/apache/camel/component/jpa/
test/java/org/apache/camel/component/jpa/
Author: cmueller
Date: Sun Feb 6 22:43:06 2011
New Revision: 1067791
URL: http://svn.apache.org/viewvc?rev=1067791&view=rev
Log:
CAMEL-3634: Add option to set resultClass when using native query with camel-jpa
Added:
camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNativeQueryWithResultClassTest.java
Modified:
camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java
camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/QueryBuilder.java
Modified: camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java?rev=1067791&r1=1067790&r2=1067791&view=diff
==============================================================================
--- camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java (original)
+++ camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/JpaConsumer.java Sun Feb 6 22:43:06 2011
@@ -52,6 +52,7 @@ public class JpaConsumer extends Schedul
private String query;
private String namedQuery;
private String nativeQuery;
+ private Class resultClass;
private int maxMessagesPerPoll;
private volatile ShutdownRunningTask shutdownRunningTask;
private volatile int pendingExchanges;
@@ -242,6 +243,14 @@ public class JpaConsumer extends Schedul
public void setQuery(String query) {
this.query = query;
}
+
+ public Class getResultClass() {
+ return resultClass;
+ }
+
+ public void setResultClass(Class resultClass) {
+ this.resultClass = resultClass;
+ }
// Implementation methods
// -------------------------------------------------------------------------
@@ -278,7 +287,11 @@ public class JpaConsumer extends Schedul
} else if (namedQuery != null) {
return QueryBuilder.namedQuery(namedQuery);
} else if (nativeQuery != null) {
- return QueryBuilder.nativeQuery(nativeQuery);
+ if (resultClass != null) {
+ return QueryBuilder.nativeQuery(nativeQuery, resultClass);
+ } else {
+ return QueryBuilder.nativeQuery(nativeQuery);
+ }
} else {
Class<?> entityType = endpoint.getEntityType();
Modified: camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/QueryBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/QueryBuilder.java?rev=1067791&r1=1067790&r2=1067791&view=diff
==============================================================================
--- camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/QueryBuilder.java (original)
+++ camel/trunk/components/camel-jpa/src/main/java/org/apache/camel/component/jpa/QueryBuilder.java Sun Feb 6 22:43:06 2011
@@ -82,6 +82,22 @@ public abstract class QueryBuilder imple
}
};
}
+
+ /**
+ * Creates a native SQL query with a provided resultClass
+ */
+ public static QueryBuilder nativeQuery(final String nativeQuery, final Class resultClass) {
+ return new QueryBuilder() {
+ protected Query makeQueryObject(EntityManager entityManager) {
+ return entityManager.createNativeQuery(nativeQuery, resultClass);
+ }
+
+ @Override
+ public String toString() {
+ return "NativeQuery: " + nativeQuery + " resultClass:" + resultClass + getParameterDescription();
+ }
+ };
+ }
/**
* Specifies the parameters to the query
Added: camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNativeQueryWithResultClassTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNativeQueryWithResultClassTest.java?rev=1067791&view=auto
==============================================================================
--- camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNativeQueryWithResultClassTest.java (added)
+++ camel/trunk/components/camel-jpa/src/test/java/org/apache/camel/component/jpa/JpaWithNativeQueryWithResultClassTest.java Sun Feb 6 22:43:06 2011
@@ -0,0 +1,56 @@
+/**
+ * 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.component.jpa;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.examples.MultiSteps;
+
+/**
+ * @version $Revision: $
+ */
+public class JpaWithNativeQueryWithResultClassTest extends JpaWithNamedQueryTest {
+
+ /**
+ * We receive a MultiSteps object, because we call entityManager.createNativeQuery(nativeQuery, MultiSteps.class)
+ */
+ @Override
+ protected void assertReceivedResult(Exchange exchange) {
+ assertNotNull(exchange);
+ MultiSteps result = (MultiSteps) exchange.getIn().getBody();
+ assertNotNull("Received an object array", result);
+ assertEquals("address property", "foo@bar.com", result.getAddress());
+ }
+
+ /**
+ * Is still 1, because we receive an object array which has no @Consumed annotation
+ * as the MultiSteps class has.
+ */
+ @Override
+ protected int getUpdatedStepValue() {
+ return 2;
+ }
+
+ @Override
+ protected void assertURIQueryOption(JpaConsumer jpaConsumer) {
+ assertEquals("select * from MultiSteps where step = 1", jpaConsumer.getNativeQuery());
+ }
+
+ @Override
+ protected String getEndpointUri() {
+ return "jpa://" + MultiSteps.class.getName() + "?consumer.resultClass=org.apache.camel.examples.MultiSteps&consumer.nativeQuery=select * from MultiSteps where step = 1";
+ }
+}
\ No newline at end of file