org.springframework.jndi
Class JndiObjectTargetSource

java.lang.Object
  extended by org.springframework.jndi.JndiAccessor
      extended by org.springframework.jndi.JndiLocatorSupport
          extended by org.springframework.jndi.JndiObjectLocator
              extended by org.springframework.jndi.JndiObjectTargetSource
All Implemented Interfaces:
TargetClassAware, TargetSource, InitializingBean

public class JndiObjectTargetSource
extends JndiObjectLocator
implements TargetSource

AOP TargetSource that provides configurable JNDI lookups for getTarget() calls.

Can be used as alternative to JndiObjectFactoryBean, to allow for relocating a JNDI object lazily or for each operation (see "lookupOnStartup" and "cache" properties). This is particularly useful during development, as it allows for hot restarting of the JNDI server (for example, a remote JMS server).

Example:

 <bean id="queueConnectionFactoryTarget" class="org.springframework.jndi.JndiObjectTargetSource">
   <property name="jndiName" value="JmsQueueConnectionFactory"/>
   <property name="lookupOnStartup" value="false"/>
 </bean>

 <bean id="queueConnectionFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
   <property name="proxyInterfaces" value="javax.jms.QueueConnectionFactory"/>
   <property name="targetSource" ref="queueConnectionFactoryTarget"/>
 </bean>
A createQueueConnection call on the "queueConnectionFactory" proxy will cause a lazy JNDI lookup for "JmsQueueConnectionFactory" and a subsequent delegating call to the retrieved QueueConnectionFactory's createQueueConnection.

Alternatively, use a JndiObjectFactoryBean with a "proxyInterface". "lookupOnStartup" and "cache" can then be specified on the JndiObjectFactoryBean, creating a JndiObjectTargetSource underneath (instead of defining separate ProxyFactoryBean and JndiObjectTargetSource beans).

Since:
1.1
Author:
Juergen Hoeller
See Also:
setLookupOnStartup(boolean), setCache(boolean), AdvisedSupport.setTargetSource(org.springframework.aop.TargetSource), JndiObjectFactoryBean.setProxyInterface(java.lang.Class)

Field Summary
 
Fields inherited from class org.springframework.jndi.JndiLocatorSupport
CONTAINER_PREFIX
 
Fields inherited from class org.springframework.jndi.JndiAccessor
logger
 
Constructor Summary
JndiObjectTargetSource()
           
 
Method Summary
 void afterPropertiesSet()
          Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).
 Object getTarget()
          Return a target instance.
 Class<?> getTargetClass()
          Return the type of targets returned by this TargetSource.
 boolean isStatic()
          Will all calls to TargetSource.getTarget() return the same object?
 void releaseTarget(Object target)
          Release the given target object obtained from the TargetSource.getTarget() method.
 void setCache(boolean cache)
          Set whether to cache the JNDI object once it has been located.
 void setLookupOnStartup(boolean lookupOnStartup)
          Set whether to look up the JNDI object on startup.
 
Methods inherited from class org.springframework.jndi.JndiObjectLocator
getExpectedType, getJndiName, lookup, setExpectedType, setJndiName
 
Methods inherited from class org.springframework.jndi.JndiLocatorSupport
convertJndiName, isResourceRef, lookup, lookup, setResourceRef
 
Methods inherited from class org.springframework.jndi.JndiAccessor
getJndiEnvironment, getJndiTemplate, setJndiEnvironment, setJndiTemplate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JndiObjectTargetSource

public JndiObjectTargetSource()
Method Detail

setLookupOnStartup

public void setLookupOnStartup(boolean lookupOnStartup)
Set whether to look up the JNDI object on startup. Default is "true".

Can be turned off to allow for late availability of the JNDI object. In this case, the JNDI object will be fetched on first access.

See Also:
setCache(boolean)

setCache

public void setCache(boolean cache)
Set whether to cache the JNDI object once it has been located. Default is "true".

Can be turned off to allow for hot redeployment of JNDI objects. In this case, the JNDI object will be fetched for each invocation.

See Also:
setLookupOnStartup(boolean)

afterPropertiesSet

public void afterPropertiesSet()
                        throws NamingException
Description copied from interface: InitializingBean
Invoked by a BeanFactory after it has set all bean properties supplied (and satisfied BeanFactoryAware and ApplicationContextAware).

This method allows the bean instance to perform initialization only possible when all bean properties have been set and to throw an exception in the event of misconfiguration.

Specified by:
afterPropertiesSet in interface InitializingBean
Overrides:
afterPropertiesSet in class JndiObjectLocator
Throws:
NamingException

getTargetClass

public Class<?> getTargetClass()
Description copied from interface: TargetSource
Return the type of targets returned by this TargetSource.

Can return null, although certain usages of a TargetSource might just work with a predetermined target class.

Specified by:
getTargetClass in interface TargetClassAware
Specified by:
getTargetClass in interface TargetSource
Returns:
the type of targets returned by this TargetSource

isStatic

public boolean isStatic()
Description copied from interface: TargetSource
Will all calls to TargetSource.getTarget() return the same object?

In that case, there will be no need to invoke TargetSource.releaseTarget(Object), and the AOP framework can cache the return value of TargetSource.getTarget().

Specified by:
isStatic in interface TargetSource
Returns:
true if the target is immutable
See Also:
TargetSource.getTarget()

getTarget

public Object getTarget()
Description copied from interface: TargetSource
Return a target instance. Invoked immediately before the AOP framework calls the "target" of an AOP method invocation.

Specified by:
getTarget in interface TargetSource
Returns:
the target object, which contains the joinpoint

releaseTarget

public void releaseTarget(Object target)
Description copied from interface: TargetSource
Release the given target object obtained from the TargetSource.getTarget() method.

Specified by:
releaseTarget in interface TargetSource
Parameters:
target - object obtained from a call to TargetSource.getTarget()