Add Delete and update queries
diff --git a/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/PersistenceContext.java b/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/PersistenceContext.java
index cdf9133..604cf20 100644
--- a/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/PersistenceContext.java
+++ b/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/PersistenceContext.java
@@ -461,7 +461,7 @@
* @return
*/
public Object query(String name, Map<?, ?> parameters) {
- return query(name, parameters, null, false);
+ return query(name, parameters, null, false, false);
}
/**
@@ -474,7 +474,7 @@
* @return
*/
@SuppressWarnings("rawtypes")
- public Object query(String name, Map<?, ?> parameters, Map<String, ?> hints, boolean returnSingleResult) {
+ public Object query(String name, Map<?, ?> parameters, Map<String, ?> hints, boolean returnSingleResult, boolean executeUpdate) {
EntityManager em = getEmf().createEntityManager();
try{
Query query = em.createNamedQuery(name);
@@ -500,7 +500,9 @@
query.setHint(key, hints.get(key));
}
}
- if (returnSingleResult){
+ if (executeUpdate){
+ return query.executeUpdate();
+ } else if (returnSingleResult){
return query.getSingleResult();
} else {
return query.getResultList();
diff --git a/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/Service.java b/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/Service.java
index 683bcd5..e676dfe 100644
--- a/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/Service.java
+++ b/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/Service.java
@@ -266,6 +266,18 @@
return new StreamingOutputMarshaller(app, entity, hh.getAcceptableMediaTypes());
}
+ @DELETE
+ @Path("{context}/entity/{type}")
+ public Response delete(@PathParam("context") String persistenceUnit, @PathParam("type") String type, @Context HttpHeaders hh, @Context UriInfo ui) {
+ ResponseBuilder rb = new ResponseBuilderImpl();
+ PersistenceContext app = get(persistenceUnit, ui.getBaseUri());
+ String tenantId = getTenantId(hh);
+ Object id = IdHelper.buildId(app, type, ui.getQueryParameters());
+ app.delete(tenantId, type, id);
+ rb.status(com.sun.jersey.api.client.ClientResponse.Status.OK);
+ return rb.build();
+ }
+
@GET
@Path("{context}/query")
public StreamingOutput adhocQuery(@PathParam("context") String persistenceUnit, @Context HttpHeaders hh, @Context UriInfo ui) {
@@ -278,19 +290,27 @@
long millis = System.currentTimeMillis();
System.out.println("Start Named Query " + name);
PersistenceContext app = get(persistenceUnit, ui.getBaseUri());
- Object result = app.query(name, Service.getParameterMap(ui), Service.getHintMap(ui), false);
+ Object result = app.query(name, Service.getParameterMap(ui), Service.getHintMap(ui), false, false);
System.out.println("Named Query " + name + " Marshalling. time: " + (System.currentTimeMillis() - millis));
return new StreamingOutputMarshaller(app, result, hh.getAcceptableMediaTypes());
}
+ @POST
+ @Path("{context}/query/{name}")
+ public StreamingOutput namedQueryUpdate(@PathParam("context") String persistenceUnit, @PathParam("name") String name, @Context HttpHeaders hh, @Context UriInfo ui) {
+ PersistenceContext app = get(persistenceUnit, ui.getBaseUri());
+ Object result = app.query(name, Service.getParameterMap(ui), Service.getHintMap(ui), false, true);
+ return new StreamingOutputMarshaller(app, result, hh.getAcceptableMediaTypes());
+ }
+
@GET
@Path("{context}/singleResultQuery/{name}")
@Produces(MediaType.WILDCARD)
public StreamingOutput namedQuerySingleResult(@PathParam("context") String persistenceUnit, @PathParam("name") String name, @Context HttpHeaders hh, @Context UriInfo ui) {
PersistenceContext app = get(persistenceUnit, ui.getBaseUri());
- Object result = app.query(name, Service.getParameterMap(ui), Service.getHintMap(ui), true);
+ Object result = app.query(name, Service.getParameterMap(ui), Service.getHintMap(ui), true, false);
return new StreamingOutputMarshaller(app, result, hh.getAcceptableMediaTypes());
}
diff --git a/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/util/StreamingOutputMarshaller.java b/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/util/StreamingOutputMarshaller.java
index 5ef7963..d284e3c 100644
--- a/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/util/StreamingOutputMarshaller.java
+++ b/JPA-RS/org.eclipse.persistence.jpars/src/org/eclipse/persistence/jpa/rs/util/StreamingOutputMarshaller.java
@@ -64,7 +64,7 @@
public void write(OutputStream output) throws IOException, WebApplicationException {
long millis = System.currentTimeMillis();
System.out.println("StreamingOutputMarshaller About to write ");
- if (this.context != null && this.context.getJAXBContext() != null && this.result != null && !this.mediaType.equals(MediaType.WILDCARD_TYPE)) {
+ if (this.context != null && this.context.getJAXBContext() != null && this.result != null && !(this.result instanceof Integer) && !this.mediaType.equals(MediaType.WILDCARD_TYPE)) {
try {
Marshaller marshaller = createMarshaller(context, mediaType);
if (result instanceof Collection) {