EclipseLink 2.4.2, build 'v20130514-5956486' API Reference

org.eclipse.persistence.queries
Class MethodBaseQueryRedirector

java.lang.Object
  extended by org.eclipse.persistence.queries.MethodBaseQueryRedirector
All Implemented Interfaces:
java.io.Serializable, QueryRedirector

public class MethodBaseQueryRedirector
extends java.lang.Object
implements QueryRedirector

Purpose: Allows a class to be a QueryRedirector without implementing QueryRedirector.

Description: Normally to define a Redirector a Class must implement QueryRedirector and the required QueryRedirector.invokeQuery(DatabaseQuery, Record, Session).

To maintain transparency it is possible to instead only define a static method that takes the same arguments as invokeQuery.

An instance of MethodBaseQueryRedirector can be constructed, taking the name of that static method and the Class in which it is defined as parameters.

Whenever invokeQuery is called on this instance reflection will automatically be used to invoke the custom method instead.

Advantages:

Disadvantages:

Example:

// First create a named query, define a redirector for it, and add the query // to the query manager. ReadObjectQuery query = new ReadObjectQuery(Employee.class); query.setName("findEmployeeByAnEmployee"); query.addArgument("employee"); MethodBaseQueryRedirector redirector = new MethodBaseQueryRedirector(QueryRedirectorTest.class, "findEmployeeByAnEmployee"); query.setRedirector(redirector); ClassDescriptor descriptor = getSession().getDescriptor(query.getReferenceClass()); descriptor.getQueryManager().addQuery(query.getName(), query); // Now execute the query by name, passing in an Employee as an argument. Vector arguments = new Vector(); arguments.addElement(employee); objectFromDatabase = getSession().executeQuery("findEmployeeByAnEmployee", Employee.class, arguments); // Note this Class does not implement QueryRedirector or method invokeQuery. public class QueryRedirectorTest { public static Object findEmployeeByAnEmployee(DatabaseQuery query, Record arguments, Session session) { ((ReadObjectQuery) query).setSelectionObject(arguments.get("employee")); return session.executeQuery(query); } }

See Also:
QueryRedirector, Serialized Form
Author:
James Sutherland
Since:
TOPLink/Java 3.0

Field Summary
protected  java.lang.reflect.Method method
           
protected  java.lang.Class methodClass
           
protected  java.lang.String methodClassName
           
protected  java.lang.String methodName
           
 
Constructor Summary
MethodBaseQueryRedirector()
          PUBLIC: Returns a new query redirector.
MethodBaseQueryRedirector(java.lang.Class methodClass, java.lang.String methodName)
          PUBLIC: Returns a new query redirector based on the static method in methodClass.
 
Method Summary
protected  java.lang.reflect.Method getMethod()
          INTERNAL: Returns the static method.
 java.lang.Class getMethodClass()
          PUBLIC: Returns the class to execute the static method on.
 java.lang.String getMethodClassName()
          INTERNAL: Returns the class to execute the static method on.
 java.lang.String getMethodName()
          PUBLIC: Returns the name of the static method.
protected  void initializeMethod(DatabaseQuery query)
          INTERNAL: Set the method.
 java.lang.Object invokeQuery(DatabaseQuery query, Record arguments, Session session)
          INTERNAL: Call the static method to execute the query.
protected  void setMethod(java.lang.reflect.Method newMethod)
          INTERNAL: Sets the static method.
 void setMethodClass(java.lang.Class newMethodClass)
          PUBLIC: Sets the class to execute the static method on.
 void setMethodClassName(java.lang.String newMethodClassName)
          INTERNAL: Sets the class to execute the static method on.
 void setMethodName(java.lang.String newMethodName)
          PUBLIC: Sets the name of the static method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

methodClass

protected java.lang.Class methodClass

methodClassName

protected java.lang.String methodClassName

methodName

protected java.lang.String methodName

method

protected transient java.lang.reflect.Method method
Constructor Detail

MethodBaseQueryRedirector

public MethodBaseQueryRedirector()
PUBLIC: Returns a new query redirector.


MethodBaseQueryRedirector

public MethodBaseQueryRedirector(java.lang.Class methodClass,
                                 java.lang.String methodName)
PUBLIC: Returns a new query redirector based on the static method in methodClass.

Method Detail

getMethod

protected java.lang.reflect.Method getMethod()
INTERNAL: Returns the static method.


getMethodClass

public java.lang.Class getMethodClass()
PUBLIC: Returns the class to execute the static method on.


getMethodClassName

public java.lang.String getMethodClassName()
INTERNAL: Returns the class to execute the static method on.


getMethodName

public java.lang.String getMethodName()
PUBLIC: Returns the name of the static method. This method must be public, static and have argument of DatabaseQuery, Vector, Session.

See Also:
setMethodName(java.lang.String)

initializeMethod

protected void initializeMethod(DatabaseQuery query)
                         throws QueryException
INTERNAL: Set the method.

Throws:
QueryException

invokeQuery

public java.lang.Object invokeQuery(DatabaseQuery query,
                                    Record arguments,
                                    Session session)
INTERNAL: Call the static method to execute the query.

Specified by:
invokeQuery in interface QueryRedirector

setMethod

protected void setMethod(java.lang.reflect.Method newMethod)
INTERNAL: Sets the static method.


setMethodClass

public void setMethodClass(java.lang.Class newMethodClass)
PUBLIC: Sets the class to execute the static method on.


setMethodClassName

public void setMethodClassName(java.lang.String newMethodClassName)
INTERNAL: Sets the class to execute the static method on.


setMethodName

public void setMethodName(java.lang.String newMethodName)
PUBLIC: Sets the name of the static method.

This method must be public, static and have arguments of DatabaseQuery, Record, and Session.

The DatabaseQuery argument is the query that is currently being executed.

The Record will contain the Argument names added to the Query through addArgument(Sting) or, in the case of an Object query, the object attribute field names. These names will reference the argument values passed into the query, or in the case of an Object Query the values from the object.

The session argument is the session that the query is currently being executed on.

Alternatively the method can take only (Session session, Vector arguments) as parameters.


EclipseLink 2.4.2, build 'v20130514-5956486' API Reference