001 /** 002 * 003 * Licensed to the Apache Software Foundation (ASF) under one or more 004 * contributor license agreements. See the NOTICE file distributed with 005 * this work for additional information regarding copyright ownership. 006 * The ASF licenses this file to You under the Apache License, Version 2.0 007 * (the "License"); you may not use this file except in compliance with 008 * the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 package org.apache.geronimo.persistence; 019 020 import javax.persistence.EntityManager; 021 import javax.persistence.FlushModeType; 022 import javax.persistence.Query; 023 import javax.persistence.TemporalType; 024 import java.util.Calendar; 025 import java.util.Date; 026 import java.util.List; 027 028 /** 029 * The JtaQuery is a wrapper around a query and and entity manager that automatically closes the entity managers 030 * when the query is finished. This implementation is only for non-transaction queryies 031 */ 032 public class NoTxQueryWrapper implements Query { 033 private final EntityManager entityManager; 034 private final Query query; 035 036 public NoTxQueryWrapper(EntityManager entityManager, Query query) { 037 this.entityManager = entityManager; 038 this.query = query; 039 } 040 041 public List getResultList() { 042 try { 043 return query.getResultList(); 044 } finally { 045 entityManager.close(); 046 } 047 } 048 049 public Object getSingleResult() { 050 try { 051 return query.getSingleResult(); 052 } finally { 053 entityManager.close(); 054 } 055 } 056 057 public int executeUpdate() { 058 try { 059 return query.executeUpdate(); 060 } finally { 061 entityManager.close(); 062 } 063 } 064 065 public Query setMaxResults(int i) { 066 query.setMaxResults(i); 067 return this; 068 } 069 070 public Query setFirstResult(int i) { 071 query.setFirstResult(i); 072 return this; 073 } 074 075 public Query setFlushMode(FlushModeType flushModeType) { 076 query.setFlushMode(flushModeType); 077 return this; 078 } 079 080 public Query setHint(String s, Object o) { 081 query.setHint(s, o); 082 return this; 083 } 084 085 public Query setParameter(String s, Object o) { 086 query.setParameter(s, o); 087 return this; 088 } 089 090 public Query setParameter(String s, Date date, TemporalType temporalType) { 091 query.setParameter(s, date, temporalType); 092 return this; 093 } 094 095 public Query setParameter(String s, Calendar calendar, TemporalType temporalType) { 096 query.setParameter(s, calendar, temporalType); 097 return this; 098 } 099 100 public Query setParameter(int i, Object o) { 101 query.setParameter(i, o); 102 return this; 103 } 104 105 public Query setParameter(int i, Date date, TemporalType temporalType) { 106 query.setParameter(i, date, temporalType); 107 return this; 108 } 109 110 public Query setParameter(int i, Calendar calendar, TemporalType temporalType) { 111 query.setParameter(i, calendar, temporalType); 112 return this; 113 } 114 }