|
EclipseLink 1.1.0_ 1.1.0.r3634 API Reference | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.eclipse.persistence.queries.MethodBaseQueryRedirector
public class MethodBaseQueryRedirector
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:
invokeQuery method does not need to implement
QueryRedirector.
invokeQuery method can have any name.
invokeQuery method can alternatively be defined to accept only
Session session and Vector arguments as parameters.
invokeQuery method is called
dynamically.
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.Methodmethod
protected java.lang.ClassmethodClass
protected java.lang.StringmethodClassName
protected java.lang.StringmethodName
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.MethodgetMethod()
INTERNAL: Returns the static method.java.lang.ClassgetMethodClass()
PUBLIC: Returns the class to execute the static method on.java.lang.StringgetMethodClassName()
INTERNAL: Returns the class to execute the static method on.java.lang.StringgetMethodName()
PUBLIC: Returns the name of the static method.protected voidinitializeMethod(DatabaseQuery query)
INTERNAL: Set the method.java.lang.ObjectinvokeQuery(DatabaseQuery query, Record arguments, Session session)
INTERNAL: Call the static method to execute the query.protected voidsetMethod(java.lang.reflect.Method newMethod)
INTERNAL: Sets the static method.voidsetMethodClass(java.lang.Class newMethodClass)
PUBLIC: Sets the class to execute the static method on.voidsetMethodClassName(java.lang.String newMethodClassName)
INTERNAL: Sets the class to execute the static method on.voidsetMethodName(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:
invokeQueryin interfaceQueryRedirector
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.
Overview Package Class Tree Serialized Deprecated Index Help EclipseLink 1.1.0_ 1.1.0.r3634 API Reference PREV CLASS NEXT CLASS FRAMES NO FRAMES SUMMARY: NESTED | FIELD | CONSTR | METHOD DETAIL: FIELD | CONSTR | METHOD