Click here to load reader

An XML Based JDBC Connector Servlet Framework

  • View
    24

  • Download
    0

Embed Size (px)

DESCRIPTION

An XML Based JDBC Connector Servlet Framework. By Narasimhan Rengaswamy. What is a JDBC Connector Servlet(JCS)?. A Java servlet that provides an XML based scripting interface to JDBC data sources - PowerPoint PPT Presentation

Text of An XML Based JDBC Connector Servlet Framework

  • An XML Based JDBC Connector Servlet FrameworkBy Narasimhan Rengaswamy

  • What is a JDBC Connector Servlet(JCS)? A Java servlet that provides an XML based scripting interface to JDBC data sources

    Allows JSP and servlet developers to achieve a separation between server side presentation logic and their data access(SQL) logic

  • Brief Idea about JDBCAn API used to write database clients(from applets to servlets, EJBs), connect to a relational database, execute SQL statements and process the results extractedDatabase connectivity is not just connecting to database and executing statements but also optimizing network resources using connection pooling and distributed transactions(e.g.WebLogic Enterprise CORBA Java and WebLogic Enterprise EJB applications)

  • ServletA Java servlet contains the application code that executes on the server in response to an event. A servlet receives events from the web application page, performs the appropriate actions, and then subsequently outputs data dynamically to the application's presentation layout model by invoking a Java Server Page (JSP)

  • Servlets(Contd.)Are Http request handlers which provide full access to Java APIs and endow web programmers with a powerful tool for creating dynamic Web pagesA servlet is a Java component that can be plugged into a Java-enabled web server to provide custom services

  • A little about XML

    XML, the Extensible Markup Language, is the universal syntax for describing and structuring data, independent from application logic. XML is a method for putting structured data in a text file

  • Case Study Two Sections

    1. Implementing the JDBC Connector Servlet 2. Using the JDBC Connector Servlet

  • Implementing the JDBC Connector ServletDetermine Frameworks Functional RequirementsDesign a High Level ArchitectureDesign the tools scripting FrameworkDesign and develop the Java classes that implement the scripting frameworkDesign and develop other artifacts to deploy framework to J2EE containers

  • (Contd)

    Package the frameworks binaries for deployment to servlet engines and application servers that support J2EE

    Deploy JCS to a J2EE web container

  • Frameworks Functional RequirementsJCS should provide mechanism to Query a Database and return the result back to the browser.The output can be a XML document.Allow to view in a WAP device in a WML formatJCS must be able to execute INSERT,UPDATE and DELETE statements

  • (Contd)

    Must allow HTML form,CGI and custom variables in JCS query files Allow HTTP GET or POST between the HTML form and a JCS QuerySupport SSI(Server Side Includes) e.g. Library files

  • (Contd)Must accommodate default content to send to the browser e.g. if the select statements does not return the resultSupport Exception and redirecting of pages when error occursShould allow JCS queries within JSP applications by providing a bean interface and custom tagMust provide tags to generate unique Ids(e.g. primary key)

  • The JCS Architecture HTTP

    Appropriate ConnectorWeb ClientsWeb Server(Apache,IIS)Servlet Engine(Tomcat, various J2EE App Servers)

    JDBC Connector Servlet

    jcs EngineJSP Custom TagJava Server Pages

    Relational Databases

  • (Contd)Step 1:Remote Browser requests URL for the XML based queries.Step 2:Servlet Engine dispatch it to JDBC Connector ServletStep 3:JDBC Connector Servlet Instantiates JCS engine and parse the query and get back the result

  • JCS Scripting FrameworkJCS provides a scripting framework to write web-based JDBC queries JDBC queries are XML documents with special tags containing database connection parameters, SQL code and outputDesign of this XML schema is done by first creating a jcs namespace

  • Snapshot of a JCS Query

  • (contd) SELECT * FROM guestbook WHERE ID = #FORM.id#

  • (Contd)

    Use #FIELD_NAME# to insert the contents of a particular field

    ] ]>

  • JCS Query Tags

    Database connectivity parameter tagsThe SQL tagOutput definition tagsSpecial function tagsTemplate-specific tags

  • Database Connectivity TagsContains parameters to connect to what database, which JDBC driver to use and support authenticationTag names jcs:jdbc_driverjcs:jdbc_urljcs:jdbc_uidjcs:jdbc_pwd

  • The SQL Tag

    Contains tag

  • Output Definition Tags

    Jcs:mime_typeJcs:redirect_urlJcs:templateJcs:empty_resultset_outputJcs:error_pageJcs:maxrows

  • Special function tagsJcs:encode_sqlDoubles up single quote characters to replace them with two consecutive single quote charactersJcs:line_break_characterto handle carriage return and line feed characters in data retrieved from database(currently supports HTML only but future enhancement would be an XHTML)

  • Template specific tags

    loops through the rows of data returned from the query

    creates a server-side include reference within a JCS output template

  • Variable Types JCS supports variable types to access dynamic data.Variable names are case sensitiveForm VariablesResultset Field VariablesCGI VariablesSystem VariablesCustom VariablesVariables take the form #form.variablename#

  • Form VariablesVariables passed by client to the server via HTTP GET and POST methodSample JCS query form handler named guestbook_add.jcs

    jdbc:odbc:guestbookINSERT INTO guestbook (ID, fname, lname , comments, host, date) VALUES (#SYSTEM.UID#,#form.fname#, #form.lname# , #form.lname# , #form.comments# ,CGI.REMOTE_ADDR#,NOW())

  • Resultset Field VariablesIt takes the form #fieldname#Used in output templates to reference values of a given records fieldsSample code

    templates\header.inc

    #fname# #lname#s Guestbook EntryComments: #comments#

    Date entered: #date#Originating Host: #host#Delete this entry

    templates\footer.inc

  • CGI VariablesUses form variables in #cgi.variablename# formatVariable names

    #CGI.REMOTE_ADDR##CGI.SERVER_PROTOCOL##CGI.QUERY_STRING##CGI.REMOTE_USER##CGI.SERVER_NAME##CGI.SERVER_PORT##CGI.REMOTE_HOST#

  • System Variables#system.date#Servers current date

    #system.UID#Generates a unique id

  • Java Classes that implement JCSGrouped into threeClasses providing functionality to reuse in other applications1) FunctionLib class from com.jresources.util package2) XMLSerializableResultset class from com.jresources.jdbc package

  • Core JCS functionality classes

    jcsRuntimeException classjcsQuery classjcsTemplateParser classjcsEngine class

    from com.jresources.jcs package

  • Classes providing server-sidepresentation services

    jcsCustomTag classjcsCustomTagOutput classJDBCConnectorServlet class

  • Functionality of FunctionLib class Unique Id generationXML parsing and file I/OMethods used aregenerateUID()OpenFile()getCDATASection() to parse jcs:template and jcs:empty_resultset_output tagsHTMLLineBreak() replaces a carriage return character with an HTML tag

  • XMLSerializableResultSet class

    Serializes a JDBC resultset as a XML documentMethod used isgetXML()

  • Core JCS functionality classesjcsRuntimeException class Method:jcsRuntimeException()

  • (Contd)jcsQuery classHow it works:Constants DEFAULT_JDBC_DRIVER (set to ODBC-JDBC bridge) and DEFAULT_MIME_TYPE (set to text/html) are declaredInstantiate the class using default constructor setJCSQueryContent() to parse the JCS query and initialize the instance variablesCODE:package com.jresources.jcs;import com.resources.util.FunctionLib;public class jcsQuery {//constantspublic static final String DEFAULT_JDBC_DRIVER = sun.jdbc.odbc.JdbcOdbcDriver ;public static final String DEFAULT_MIME_TYPE = text/html ;

  • (Contd)//the JCS Query raw XMLprivate String jcsQueryContent;

    //Read-only instance variablesprivate String strMIMEType = this.DEFAULT_MIME_TYPE;private String JDBCDriver = this.DEFAULT_JDBC_DRIVER;private String JDBCURL;private String UID;private String PWD;private String SQL;private String qrydoc;private String templateDoc;private String redirectURL;private String errorPage;private String emptyResultsetOutput;private int maxRows = -1 ;private boolean htmlLineBreakFlag = false;

  • jcsTemplateParser ClassHas two constructors

    parseTemplate()setFilename()setTagname()setTemplate()

  • Class JCSEngineUses processRequest()processSSI()executeUpdate()executeQuery()

  • Class jcsCustomTagProvides functionality for custom JSP tagAllows pages written in JSP 1.1. to execute JCS queriesTag has two attributesurloutputvariable

  • Class jcsCustomTagOutputProvides an interface to the host JSP page to access the contents of output variableMethod:getVariableInfo()

Search related