A user can generate queries dynamically at runtime without having to redeploy the appropriate EJB or hard-code the query into the user application. A properties object can be generated to accept the query settings from the user. These settings can be extracted at runtime when the appropriate finder method is invoked, such that the desired query statement, such as a SQL statement, can be generated and executed against the database.
This description is not intended to be a complete description of, or limit the scope of, the invention. Other features, aspects, and objects of the invention can be obtained from a review of the specification, the figures, and the claims.
|
9. A system for generating dynamic queries, comprising:
a client computer that provides a properties object which contains settings for a query specified by a user, wherein the properties object is generated at runtime and receives the settings from dynamic user input at runtime;
a server computer that communicates with the client computer and a database, the server computer providing a bean associated with the database; and
a finder method that specifies the query to be executed against the database, the finder method invoked on the bean provided by the server computer;
a descriptor that contains an enable dynamic queries element, wherein the enable dynamic queries element has a value of either true or false for enabling the query, such that invoking queries when the enable dynamic queries element has a value of false results in a remote or local exception being thrown depending on whether the queries submitted after setting the enable dynamic queries element were invoked from a local interface or a remote interface, wherein the dynamic queries element is specifiable by an enable-dynamic-queries parsed character data (PCDATA) tag, wherein said tag signifies that the dynamic queries element contains character data parsed by an extensible markup language (XML) parser;
wherein upon invocation of the finder method, the server computer extracts the settings contained in the properties object and parses the finder method in order to dynamically generate the query to be sent to the database; and
a collection of results that is returned from the database in response to the finder method, said finder method being invoked on a query home interface used to execute dynamic queries.
1. A system for dynamically generating a query to be executed on a database, comprising:
a properties object that contains settings for a query as specified by a user, wherein the properties object is generated at runtime and receives the settings from dynamic user input received at runtime;
a finder method for initiating the query;
a descriptor that contains an enable dynamic queries element, wherein the enable dynamic queries element has a value of either true or false for enabling the query, such that invoking queries when the enable dynamic queries element has a value of false results in a remote or local exception being thrown depending on whether the queries submitted after setting the enable dynamic queries element were invoked from a local interface or a remote interface and wherein the dynamic queries element is specifiable by an enable-dynamic-queries parsed character data (PCDATA) tag, wherein said tag signifies that the dynamic queries element contains character data parsed by an extensible markup language (XML) parser;
a server computer that queries the database, the server computer receiving a call from the finder method and reading the settings from the properties object in order to generate the appropriate SQL query statements to be sent to the database, wherein the SQL query statements are generated by parsing the finder method and wherein options that are set for the SQL query statements are specified in the settings contained in the properties object;
a database connected to the server computer for executing the dynamically generated SQL query statements; and
a collection of results that is returned from the database in response to the finder method, said finder method being invoked on a query home interface used to execute dynamic queries, wherein the collection of results is stored on the server computer.
2. A system according to
a user interface that allows a user to specify the settings in the property object.
3. A system according to
a client containing the properties object and the finder method.
4. A system according to
a bean associated with the database upon which the finder method is invoked.
6. The system of
7. The system of
8. The system of
10. A system according to
11. A system according to
a user interface on the client computer for allowing the user to specify the settings contained in the properties object.
12. A system according to
13. A system according to
14. A system according to
a properties key containing entries wherein each entry specifies a setting for the query.
|
This application is a divisional application of U.S. patent application Ser. No. 10/341,107, entitled SYSTEMS AND METHODS FOR DYNAMIC QUERYING, inventors Matthew Shinn, Seth White, and Robert Woollen, filed Jan. 13, 2003, which claims priority to U.S. Provisional Patent Application No. 60/349,432, filed Jan. 18, 2002, entitled ASYSTEMS AND METHODS FOR DYNAMIC QUERYING, both of which are incorporated herein by reference.
A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document of the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever.
The present invention relates to executing queries against a database.
The Enterprise JavaBean (EJB) specification, published by Sun Microsystems, Inc. of Palo Alto, Calif., describes ways in which a user can execute queries against a database, as well as ways in which a user can communicate queries to an EJB container. Presently, the EJB 2.0 specification forces users to hard-code finder queries into a deployment descriptor for an EJB. A user develops a query before deploying the EJB. Once the EJB is deployed, the user is able to execute the query. A problem exists with this approach, however, in that it is necessary to redeploy the EJB every time the user wishes to run a new query.
Systems and methods in accordance with one embodiment of the present invention can allow a user to dynamically generate a query to be executed against a database. A properties object can be generated that holds settings for the query, which can be specified by a user at runtime. When the query is to be executed, the user or application can invoke an appropriate finder method. The server receiving the call from the finder method can extract the user-specified settings from the properties object and parse the finder method in order to generate a query statement. The server can then execute the query statement on the database and return the appropriate results. The generating of the properties object and the query statement can happen at runtime.
Other features, aspects, and objects of the invention can be obtained from a review of the specification, the figures, and the claims.
Systems and methods in accordance with one embodiment of the present invention can allow a user to define a query programmatically rather than defining the query statically. Static queries are defined, for example, by hard-coding the static query into the deployment descriptor for an EJB. Programmatic queries, or “dynamic queries”, allow users to construct and execute queries in their application code. This can provide several benefits over static queries which utilize static finder methods.
One such benefit is the ability to create and execute new queries without having to update and redeploy an EJB. When deploying an EJB with static queries, each query is read and parsed in order to generate the SQL to be sent to the database. Finder methods can be utilized in executing the query, which can be defined in the home interface of an entity bean. An example of a finder method is findByPrimaryKey( ), which can accept an instance of a primary key and return an instance of that entity type (or throw an exception). Additional finder methods can be defined in local home or remote home interfaces, with each finder method being associated with a query in the deployment descriptor. With dynamic queries, however, the query and corresponding SQL can be generated at runtime.
Another benefit is that the size of an EJB deployment descriptor is reduced. Since the finder queries can be created dynamically, they do not have to be statically defined in the deployment descriptor. For some applications this approach may be a little slower, but the added flexibility will outweigh the slight hit in performance for many users.
One system and method for implementing dynamic queries utilizes the generation of a class such as an ejbHome class. Such a class can be used to implement an extra interface with a method that can execute the query. As shown in
A method that can be used in accordance with the system of
One embodiment can be implemented through a simple API. To enable the use of dynamic queries, users can add an element to their deployment descriptor, such as:
<!ELEMENT enable-dynamic-queries (#PCDATA)>
The enable-dynamic-queries element can be a sub-element of a descriptor such as entity-descriptor. The value of enable-dynamic-queries can be either “true” or “false” in this embodiment. Invoking a dynamic query when dynamic queries have not been enabled can result in an exception being thrown, such as java.rmi.AccessException or javax.ejb.AccessLocalException, depending on whether it was invoked from a Remote or Local interface.
A generated implementation class, such as Homelmpl that can be used for all EJB 2.0 Container-Managed Persistence (CMP) beans, can implement a new interface such as QueryHome. A QueryHome interface can declare a single method, such as:
public
Object executeQuery(String query, Properties props) throws
FinderException, RemoteException;
There can also be a local version of QueryHome which may be referred to as QueryLocalHome. The only difference between the interfaces can be the “throws” clause of the executeQuery method. The QueryLocalHome iinterface can declare a single method:
public
Object executeQuery(String query, Properties props) throws
FinderException, EJBException;
The application code can make use of this interface as follows:
InitialContext ic = new InitialContext( );
FooHome fh = (FooHome)ic.lookup(“fooHome”)’
QueryHome qh = (QueryHome)fh;
String query = “SELECT OBJECT(e) FROM EmployeeBean e
WHERE e.name = ‘rob’ “;
Properties props = new Properties( );
props.setProperty(DynamicQuery.MAX_ELEMENTS, “10”);
Collection results = (Collection)qh.executeQuery(query, props);
All options that can currently be specified for a static finder can be set in a Properties object passed to the executeQuery method. The Properties key for all valid options can be defined in a DynamicQuery interface. A list of some valid entries is as follows:
Property:
Value:
Description:
GROUP_NAME
String
The name of the field-group
whose fields are to be loaded
into the cache upon execution of
the query. Note that in order for
this to work, a finders-load-bean
or equivalent option may need to
be enabled for the EJB.
MAX_ELEMENTS
int
The max-elements attribute is
used to specify the maximum
number of elements that should
be returned by a multi-valued
query. This option can be similar
to the maxRows feature of
JDBC.
INCLUDE_UPDATES
boolean
The include-updates tag is used
to specify that updates made
during the current transaction
must be reflected in the result of
a query.
SQL_SELECT_DISTINCT
boolean
Used to control whether the gen-
erated SQL ‘SELECT’ will con-
tain a ‘DISTINCT’ qualifier.
Use of the DISTINCT qualifier
will cause the RDBMS to return
unique rows.
RETURN_TYPE
String
Indicates the return type of the
executeQuery method. Legal
values include Collection,
CursoredCollection, and
ResultSet. The default value is
java.util.Collection.
NEW_TRANSACTION
boolean
Indicates whether a new trans-
action should be started for the
execution of the DynamicQuery
ISOLATION_LEVEL
String
Indicates the isolation level to be
used if a new transaction is
started
RESULT_TYPE_MAPPING
String
Indicates whether EJBObjects or
EJBLocalObjects should be re-
turned. The legal values are
Local and Remote. If the query
was executed on QueryHome,
EJBObjects will always be re-
turned. If the query was exe-
cuted on QueryLocalHome,
EJBLocalObjects will be re-
turned by default. A result-type-
mapping of Remote can be spe-
cified in this case if EJBObjects
are desired.
Ideally, dynamic queries execute nearly as fast as static queries. Dynamic queries can invariably be somewhat slower since the queries can require parsing at runtime, whereas static queries are parsed during deployment. The speed of dynamic queries can be increased, such as by extending them to take query parameters and caching the parsed query String.
The foregoing description of preferred embodiments of the present invention has been provided for the purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise forms disclosed. Many modifications and variations will be apparent to one of ordinary skill in the relevant arts. The embodiments were chosen and described in order to best explain the principles of the invention and its practical application, thereby enabling others skilled in the art to understand the invention for various embodiments and with various modifications that are suited to the particular use contemplated. It is intended that the scope of the invention be defined by the claims and their equivalence.
White, Seth, Shinn, Matthew, Woollen, Robert
Patent | Priority | Assignee | Title |
Patent | Priority | Assignee | Title |
5499371, | Jul 21 1993 | Progress Software Corporation | Method and apparatus for automatic generation of object oriented code for mapping relational data to objects |
6199195, | Jul 08 1999 | Leidos, Inc | Automatically generated objects within extensible object frameworks and links to enterprise resources |
6266666, | Sep 08 1998 | SYBASE, INC | Component transaction server for developing and deploying transaction- intensive business applications |
6308179, | Aug 31 1998 | GOOGLE LLC | User level controlled mechanism inter-positioned in a read/write path of a property-based document management system |
6442541, | Jun 28 1999 | LinkedIn Corporation | Universal database adapters |
6466933, | Sep 21 1999 | International Business Machines Corporation | Delayed delivery of query results or other data from a federated server to a federated client until such information is needed |
6505200, | Jul 06 2000 | KING COM LTD | Application-independent data synchronization technique |
6539396, | Aug 31 1999 | Accenture Global Services Limited | Multi-object identifier system and method for information service pattern environment |
6571282, | Aug 31 1999 | Accenture Global Services Limited | Block-based communication in a communication services patterns environment |
6640244, | Aug 31 1999 | Accenture Global Services Limited | Request batcher in a transaction services patterns environment |
6687702, | Jun 15 2001 | SYBASE, INC | Methodology providing high-speed shared memory access between database middle tier and database server |
6694328, | Jan 13 2000 | International Business Machines Corporation | Method for creating queries on version objects |
6748373, | May 01 2002 | Oracle International Corporation | System and method for adaptively optimizing queries |
6760719, | Sep 24 1999 | GOOGLE LLC | Method and apparatus for high speed parallel accessing and execution of methods across multiple heterogeneous data sources |
6823329, | Apr 02 2002 | SYBASE, INC , A CORPORATION OF DELAWARE | Database system providing methodology for acceleration of queries involving functional expressions against columns having enumerated storage |
6836889, | Aug 20 1999 | International Business Machines Corporation | Code wrapping to simplify access to and use of enterprise JAVA beans |
6971085, | Aug 31 2000 | International Business Machines Corporation | Object oriented structured query language (OOSQL) support for enterprise java beans |
6985899, | Nov 30 2000 | IBM Corporation | Method and system for composing a query for a database and traversing the database |
6996565, | Sep 06 2001 | International Business Machines Corporation | System and method for dynamically mapping dynamic multi-sourced persisted EJBs |
6999956, | Nov 16 2000 | THOUGHT, INC | Dynamic object-driven database manipulation and mapping system |
7089230, | Jun 07 2002 | International Business Machines Corporation | Method for efficient processing of multi-state attributes |
20030163460, | |||
20040111701, | |||
GB2339036, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Mar 30 2006 | BEA Systems, Inc. | (assignment on the face of the patent) | / | |||
Oct 08 2010 | BEA SYSTEMS, INC | Oracle International Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 025192 | /0244 |
Date | Maintenance Fee Events |
Feb 06 2013 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Feb 23 2017 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Sep 28 2020 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Sep 08 2012 | 4 years fee payment window open |
Mar 08 2013 | 6 months grace period start (w surcharge) |
Sep 08 2013 | patent expiry (for year 4) |
Sep 08 2015 | 2 years to revive unintentionally abandoned end. (for year 4) |
Sep 08 2016 | 8 years fee payment window open |
Mar 08 2017 | 6 months grace period start (w surcharge) |
Sep 08 2017 | patent expiry (for year 8) |
Sep 08 2019 | 2 years to revive unintentionally abandoned end. (for year 8) |
Sep 08 2020 | 12 years fee payment window open |
Mar 08 2021 | 6 months grace period start (w surcharge) |
Sep 08 2021 | patent expiry (for year 12) |
Sep 08 2023 | 2 years to revive unintentionally abandoned end. (for year 12) |