blob: cbbad449a72d8cc0b6cc2961be24625a19800b39 [file] [log] [blame]
/*
* 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.openejb.persistence;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import javax.persistence.Parameter;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* The JtaQuery is a wrapper around a query and and entity manager that automatically closes the entity managers
* when the query is finished. This implementation is only for non-transaction queryies
*/
public class JtaQuery implements Query {
private final EntityManager entityManager;
private final JtaEntityManager jtaEntityManager;
private final Query query;
public JtaQuery(EntityManager entityManager, JtaEntityManager jtaEntityManager, Query query) {
this.entityManager = entityManager;
this.jtaEntityManager = jtaEntityManager;
this.query = query;
}
private EntityManager getEntityManager() {
EntityManager em = entityManager;
if (!jtaEntityManager.isTransactionActive()) {
em = jtaEntityManager.getEntityManager();
}
return em;
}
public List getResultList() {
final EntityManager em = getEntityManager();
try {
return query.getResultList();
} finally {
jtaEntityManager.closeIfNoTx(em);
}
}
public Object getSingleResult() {
final EntityManager em = getEntityManager();
try {
return query.getSingleResult();
} finally {
jtaEntityManager.closeIfNoTx(em);
}
}
public int executeUpdate() {
final EntityManager em = getEntityManager();
try {
return query.executeUpdate();
} finally {
jtaEntityManager.closeIfNoTx(em);
}
}
public Query setMaxResults(int i) {
query.setMaxResults(i);
return this;
}
public Query setFirstResult(int i) {
query.setFirstResult(i);
return this;
}
public Query setFlushMode(FlushModeType flushModeType) {
query.setFlushMode(flushModeType);
return this;
}
public Query setHint(String s, Object o) {
query.setHint(s, o);
return this;
}
public Query setParameter(String s, Object o) {
query.setParameter(s, o);
return this;
}
public Query setParameter(String s, Date date, TemporalType temporalType) {
query.setParameter(s, date, temporalType);
return this;
}
public Query setParameter(String s, Calendar calendar, TemporalType temporalType) {
query.setParameter(s, calendar, temporalType);
return this;
}
public Query setParameter(int i, Object o) {
query.setParameter(i, o);
return this;
}
public Query setParameter(int i, Date date, TemporalType temporalType) {
query.setParameter(i, date, temporalType);
return this;
}
public Query setParameter(int i, Calendar calendar, TemporalType temporalType) {
query.setParameter(i, calendar, temporalType);
return this;
}
// JPA 2.0
/* (non-Javadoc)
* @see javax.persistence.Query#getFirstResult()
*/
public int getFirstResult() {
return query.getFirstResult();
}
/* (non-Javadoc)
* @see javax.persistence.Query#getFlushMode()
*/
public FlushModeType getFlushMode() {
return query.getFlushMode();
}
/* (non-Javadoc)
* @see javax.persistence.Query#getHints()
*/
public Map<String, Object> getHints() {
return query.getHints();
}
/* (non-Javadoc)
* @see javax.persistence.Query#getLockMode()
*/
public LockModeType getLockMode() {
return query.getLockMode();
}
/* (non-Javadoc)
* @see javax.persistence.Query#getMaxResults()
*/
public int getMaxResults() {
return query.getMaxResults();
}
/* (non-Javadoc)
* @see javax.persistence.Query#getParameter(java.lang.String)
*/
public Parameter<?> getParameter(String name) {
return query.getParameter(name);
}
/* (non-Javadoc)
* @see javax.persistence.Query#getParameter(int)
*/
public Parameter<?> getParameter(int position) {
return query.getParameter(position);
}
/* (non-Javadoc)
* @see javax.persistence.Query#getParameter(java.lang.String, java.lang.Class)
*/
public <T> Parameter<T> getParameter(String name, Class<T> type) {
return query.getParameter(name, type);
}
/* (non-Javadoc)
* @see javax.persistence.Query#getParameter(int, java.lang.Class)
*/
public <T> Parameter<T> getParameter(int position, Class<T> type) {
return query.getParameter(position, type);
}
/* (non-Javadoc)
* @see javax.persistence.Query#getParameterValue(javax.persistence.Parameter)
*/
public <T> T getParameterValue(Parameter<T> param) {
return query.getParameterValue(param);
}
/* (non-Javadoc)
* @see javax.persistence.Query#getParameterValue(java.lang.String)
*/
public Object getParameterValue(String name) {
return query.getParameterValue(name);
}
/* (non-Javadoc)
* @see javax.persistence.Query#getParameterValue(int)
*/
public Object getParameterValue(int position) {
return query.getParameterValue(position);
}
/* (non-Javadoc)
* @see javax.persistence.Query#getParameters()
*/
public Set<Parameter<?>> getParameters() {
return query.getParameters();
}
/* (non-Javadoc)
* @see javax.persistence.Query#isBound(javax.persistence.Parameter)
*/
public boolean isBound(Parameter<?> param) {
return query.isBound(param);
}
/* (non-Javadoc)
* @see javax.persistence.Query#setLockMode(javax.persistence.LockModeType)
*/
public Query setLockMode(LockModeType lockMode) {
return query.setLockMode(lockMode);
}
/* (non-Javadoc)
* @see javax.persistence.Query#setParameter(javax.persistence.Parameter, java.lang.Object)
*/
public <T> Query setParameter(Parameter<T> param, T value) {
return query.setParameter(param, value);
}
/* (non-Javadoc)
* @see javax.persistence.Query#setParameter(javax.persistence.Parameter, java.util.Calendar, javax.persistence.TemporalType)
*/
public Query setParameter(Parameter<Calendar> param, Calendar value, TemporalType temporalType) {
return query.setParameter(param, value, temporalType);
}
/* (non-Javadoc)
* @see javax.persistence.Query#setParameter(javax.persistence.Parameter, java.util.Date, javax.persistence.TemporalType)
*/
public Query setParameter(Parameter<Date> param, Date value, TemporalType temporalType) {
return query.setParameter(param, value, temporalType);
}
/* (non-Javadoc)
* @see javax.persistence.Query#unwrap(java.lang.Class)
*/
public <T> T unwrap(Class<T> cls) {
return query.unwrap(cls);
}
}