1 /** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one or more 4 * contributor license agreements. See the NOTICE file distributed with 5 * this work for additional information regarding copyright ownership. 6 * The ASF licenses this file to You under the Apache License, Version 2.0 7 * (the "License"); you may not use this file except in compliance with 8 * the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package org.apache.geronimo.naming.reference; 20 21 import java.util.Map; 22 23 import javax.naming.NameNotFoundException; 24 25 import org.apache.geronimo.kernel.repository.Artifact; 26 import org.apache.geronimo.kernel.Kernel; 27 import org.apache.geronimo.kernel.GBeanNotFoundException; 28 import org.apache.geronimo.gbean.AbstractNameQuery; 29 import org.apache.geronimo.gbean.AbstractName; 30 31 /** 32 * @version $Rev: 470597 $ $Date: 2006-11-02 15:30:55 -0800 (Thu, 02 Nov 2006) $ 33 */ 34 public class PersistenceContextReference extends ConfigurationAwareReference { 35 36 private boolean transactionScoped; 37 private Map properties; 38 39 public PersistenceContextReference(Artifact configId, AbstractNameQuery abstractNameQuery, boolean transactionScoped, Map properties) { 40 super(configId, abstractNameQuery); 41 this.transactionScoped = transactionScoped; 42 this.properties = properties; 43 } 44 45 public String getClassName() { 46 return "javax.persistence.EntityManager"; 47 } 48 49 public Object getContent() throws NameNotFoundException { 50 Kernel kernel = getKernel(); 51 52 AbstractName target; 53 try { 54 target = resolveTargetName(); 55 } catch (GBeanNotFoundException e) { 56 throw (NameNotFoundException) new NameNotFoundException("Could not resolve name query: " + abstractNameQueries).initCause(e); 57 } 58 59 Object entityManager; 60 try { 61 entityManager = kernel.invoke(target, "getEntityManager", new Object[] {Boolean.valueOf(transactionScoped), properties}, new String[] {boolean.class.getName(), Map.class.getName()}); 62 } catch (Exception e) { 63 throw (IllegalStateException) new IllegalStateException("Could not get entityManager").initCause(e); 64 } 65 if (entityManager == null) { 66 throw new IllegalStateException("entity manager not returned. Target " + target + " not started"); 67 } 68 return entityManager; 69 } 70 }