001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with 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, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.apache.shiro.jndi; 020 021import org.apache.shiro.lang.util.Factory; 022 023import javax.naming.NamingException; 024 025/** 026 * A factory implementation intended to be used to look up objects in jndi. 027 * 028 * @param <T> 029 * @since 1.2 030 */ 031public class JndiObjectFactory<T> extends JndiLocator implements Factory<T> { 032 033 private String resourceName; 034 private Class<? extends T> requiredType; 035 036 @SuppressWarnings("unchecked") 037 public T getInstance() { 038 try { 039 if (requiredType != null) { 040 return requiredType.cast(this.lookup(resourceName, requiredType)); 041 } else { 042 return (T) this.lookup(resourceName); 043 } 044 } catch (NamingException e) { 045 final String typeName = requiredType != null ? requiredType.getName() : "object"; 046 throw new IllegalStateException("Unable to look up " + typeName + " with jndi name '" + resourceName + "'.", e); 047 } 048 } 049 050 public String getResourceName() { 051 return resourceName; 052 } 053 054 public void setResourceName(String resourceName) { 055 this.resourceName = resourceName; 056 } 057 058 public Class<? extends T> getRequiredType() { 059 return requiredType; 060 } 061 062 public void setRequiredType(Class<? extends T> requiredType) { 063 this.requiredType = requiredType; 064 } 065}