Home | Ajax | BioInformatics | Dojo | EAI | EJB | Hibernate | J2ME | Java | Java Glossary | Java Servlets | JavaScript | Jboss | JDBC | JDO | Jmeter | JSF | JSP | JUnit | Maven | MySQL | Spring Framework | SQL | Struts | Technology | WAP | Web Services | XML
 
 
Search All Tutorials

 
Programming Tutorials: Ajax | Articles | JSP | Bioinformatics | Database | Free Books | Hibernate | J2EE | J2ME | Java | JavaScript | JDBC | JMS | Linux | MS Technology | PHP | RMI | Web-Services | Servlets | Struts | UML
 
Spring Framework
  JDO Tutorials
  EAI Articles
  Struts Tutorials
  Java Tutorials
  Java Certification
  Java Applet
Questions
Comments

SPRING .... HITTING DATABASE

by Farihah Noushene B.E.,

                         

PART-III

(PUBLISHED IN DEVELOPER IQ - September2005)

Now we will move on to the main process of any enterprise application: Data Persistence. For this we have to initialize our data access framework, manage resources, handle various exceptions and if anything goes wrong, we must roll-back so as to save the existing data.

Spring comes with a family of data access frameworks that integrates well will variety of data access technologies like JDBC, Java Data Objects and Object Relational Mapping (ORM) tools like Hibernate, OJB, iBatis etc.,

Many J2EE application servers and even web servers provide a 'dataSource' via Jndi name. To configure the spring bean with the Jndi name of our 'dataSource' and use its connection pooling facility 'JndiObjectFactoryBean' is used. When a DataSource is not present, we need a connection pooling bean that implements 'dataSource'. For this purpose we use 'dbcp.BasicDataSource' is used. By using this we can have a 'dataSource' with connection pooling independent of application server.

To perform unit-tests in our data access code, spring comes with a very lightweight 'dataSource' implementation class: 'DriverManagerDataSource'. This class can be easily configured for unit tests as,

DriverManagerDataSource    dataSource = new   DriverManagerDataSource();

dataSource.setDriverClassName(driver);

dataSource.setUrl(url);

dataSource.setUsername(username);

dataSource.setPassword(password);

These properties can be configured in the spring configuration file also.

----------------------------------------------

Spring comes with its own data access framework. Spring separates the fixed and variant parts of data access process into two distinct classes : template and callback. Template manages the fixed part of our framework like data connection, managing resources, controlling transaction etc., while the Callback defines the things that are specific to our application like creating statements, binding parameters etc.,

The template class of Spring is 'JdbcTemplate'. A 'dataSource' is provided inside JdbcTemplate.

An example of database connection using 'JdbcTemplate' is shown below. Here we are using 'MySql' database. The MySql database can be downloaded from http://www.mysql.com. Download mysql4.1 and MyODBC-3.51 (ODBC Connector) install these in the hard disk. For Mysql give a username('root') and a password ('sql').

Then start the 'My Sql Console Line Client' from programs and type the password.

The prompt will be changed to mysql,

mysql> show databases;

Two databases will be present default: mysql and test.

mysql> use test;

We will get message as 'Database changed'. Next create table in test database as follows

mysql> create table table1(name text, place text);

We will get the message 'Query OK, 0 rows affected'. Now we have created a table in mysql database, set the path and classpath as before  and edit the program

-----
f:\sprindemo\datacon.java

import javax.sql.*;

public interface datacon

{

    public DataSource dbcon();

}

----------------------------------------

f:\sprindemo\dataconimpl.java

import org.springframework.jdbc.core.*;

import org.springframework.jdbc.datasource.*;

import org.springframework.jdbc.object.*;

import org.springframework.jdbc.support.*;

import javax.sql.*;

public class dataconimpl implements datacon

{

   private DataSource dataSource;

   public void setDataSource(DataSource ds)

   {

      dataSource = ds;

   }

   public DataSource dbcon()

   {

      return dataSource;

   }

}

----------------------------------------

f:\sprindemo\datacon.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <bean id="dataSource"

      class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName">

       <value>sun.jdbc.odbc.JdbcOdbcDriver</value>

    </property>

    <property name="url">

       <value>jdbc:odbc:test</value>

    </property>

    <property name="username">

       <value>root</value>

    </property>

    <property name="password">

       <value>sql</value>

    </property>

  </bean>

  <bean   id="datacon"  class="dataconimpl">

    <property name="dataSource">

        <ref local="dataSource"/>

    </property>

  </bean>

</beans>

----------------------------------------

f:\sprindemo\springservlet.java

import java.io.*;

import javax.sql.*;

import java.sql.*;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import org.springframework.beans.factory.*;

import org.springframework.beans.factory.xml.*;

import org.springframework.core.io.*;

import org.springframework.jdbc.core.*;

import org.springframework.jdbc.datasource.*;

import org.springframework.jdbc.object.*;

import org.springframework.jdbc.support.*;

public class springservlet extends HttpServlet

{

   public void doPost(HttpServletRequest req,HttpServletResponse resp)

                throws ServletException,IOException                                                 

   {

      resp.setContentType("text/html");

      PrintWriter out = resp.getWriter();

      String a = req.getParameter("text1");

      String b = req.getParameter("text2");

      String c = req.getParameter("combo1");

      String d = req.getParameter("combo2");

      try

      {

         System.out.println("Wait...");

         Resource  res = new ClassPathResource("datacon.xml");

         BeanFactory  factory = new   XmlBeanFactory(res);

         datacon bean1 = (datacon)factory.getBean("datacon");

         DataSource ds=bean1.dbcon();

         if(d.equals("add"))

         {

            JdbcTemplate   jt = new  JdbcTemplate(ds);

            jt.execute("insert into table1 values('"+a+"','"+b+"') ");

            out.println("Record Added");

         }

         if(d.equals("delete"))

         {

            JdbcTemplate   jt = new JdbcTemplate(ds);

            jt.execute("delete from table1 where name='"+a+"' ");

            out.println("Record Deleted");

         }

         if(d.equals("find"))

         {

            List  list1;

            JdbcTemplate   jt = new  JdbcTemplate(ds);

            list1=jt.queryForList("select * from table1 where name='"+a+"'");

            Iterator i=list1.iterator();

            while(i.hasNext())

            {

               Object  ob = i.next();

               out.println(ob.toString());

            }

         }

         if(d.equals("update"))

         {

            if(c.equals("name"))

            {

               JdbcTemplate   jt = new  JdbcTemplate(ds);

               jt.execute("update table1 set table1.place='"+b+"'where

                                             table1.name='"+a+"' ");

           }

           if(c.equals("place"))

           {

               JdbcTemplate   jt = new  JdbcTemplate(ds);

               jt.execute("update table1 set table1.name='"+a+"'where

                                             table1.place='"+b+"' ");

           }

           out.println("Record Updated");

         }

      }

      catch(Exception e1)

            {System.out.println(""+e1);}

   }

}

----------------------------------------

f:\sprindemo\springservlet.htm

<html>

<body bgcolor="pink">

<form    method=post 

         action="http://localhost:8080/

                 servlet/springservlet">

Name      :  <input type=text name="text1">  <br><br>

Place      :  <input type=text name="text2">  <br><br>

Criterion :

    <select name="combo1" size=1>

         <option value="name">Name

         <option value="place">Place

    </select>                 <br><br>

    <select name="combo2" size=1>

         <option value="add">Add

         <option value="delete">Remove

         <option value="find">Find

         <option value="update">Update

    </select>                 <br><br>

    <input type=submit>

</form>

</body>

</html>

The deployment procedure is same as before compile the all the files datacon.java, dataconimpl.java and springservlet.java and copy all the class files and the xml file datacon.xml  to g:\tomcat5\webapps\root\web-inf\classes. Copy the html file to g:\tomcat5\webapps\root. Add entry to web.xml file.

Start Tomcat server and open browser

and type url as http://localhost:8080/ servletclient.htm. We will get a two textboxes, two comboboxes and a 'submit' button. Type name and place in textboxes, select 'add' from combobox and click 'submit' button. We will get message as 'Record Added'

----------------------------------------
Spring provides integration for many of the ORM frameworks like Hibernate, JDO, Apache OJB and iBATIS SQL Maps.

For mapping the hibernate resources, an instance of 'SessionFactory' is needed, 'LocalSessionFactoryBean' is used for this purpose and its properties 'hibernateProperties', 'mappingResources' and 'mappingDirectoryLocation' are set. Like Spring's DAO framework, here we have 'HibernateTemplate' to create an object of 'SessionFactory'. To access the data with 'HibernateTemplate' 'execute(HibernateCallback)' method is used.

Similar to the 'SessionFactory' of hibernate, JDO has 'PersistenceManager Factory'. It can be configured by using 'LocalPersistenceManagerFactoryBean'. Also 'JDOTemplate' to create an object of 'PersistenceManagerFactory'. To access the data with 'JDOTemplate' 'execute(JDOCallback)' method is used.

For iBATIS, we have to configure a 'SQLMapClient' by using 'SQLMapClientFactoryBean' and its properties  'configLocation' and 'dataSource' are set. Here also we have 'SQLMapClientTemplate'.

To access the data 'execute(SQLMapClientCallback)' method is used.

The only property that we need to change to integrate Spring with OJB is 'ConnectionFactoryClass' and it is done by using 'LocalDataSourceConnectionFactory'.

In the next article we shall see how to use a RMI service in Spring and how to export any Spring managed bean as RMI.

---------------------------------------------

                         

Facing Programming Problem?
Add This Tutorial To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 

Current Comments

5 comments so far (post your own) View All Comments Latest 10 Comments:

Hi,

We will try to fix the example. If you get success in running the code. Please send it to us.

Thanks

Posted by Deepak Kumar on Wednesday, 06.4.08 @ 20:41pm | #62104

hi, its a great thing thing that we are good code on the net thru roseindia, but what is the benefit when these code are not upto mark, always throw an exception.Like ur this spring code, i change it so many times and give proper inputs, bt still this code is not worth me...

Plz do needful help...

Posted by Amit kumar Kulshrestha on Wednesday, 06.4.08 @ 16:04pm | #62077

Hello RoseIndia,

I'm really happy by using roseindia website. please keep on updating all the document time to time. I will be highly grateful you will provoide the example in more details.

Regards
Manoj Kumar Maurya
MphasiS,Bangalore

Posted by Manoj Maurya on Wednesday, 05.28.08 @ 15:45pm | #61270

I appreciate the collection and maintaince of your website with good explaination on each individual techonlogy

Posted by raj on Wednesday, 05.14.08 @ 01:18am | #59743

Hello RoseIndia,

I'm really appreciating to saw roseindia website. as well helping and guiding a lot's of people from the challenges. please keep on updating all the technologies. though if possible could you please publish portal's web development a brief notes as well some sample application on your website. I'm eagerly looking for the new technogies in the website.

Regards
Ashok
Hexaware Technogies(Chennai)

Posted by Ashok on Monday, 05.12.08 @ 17:30pm | #59471

Leave your comment:

Name:

Email:

URL:

Title:

Comments:


Enter Code:

 

Note: Emails will not be visible or used in any way, and are not required. Please keep comments relevant. Any content deemed inappropriate or offensive may be edited and/or deleted.

No HTML code is allowed. Line breaks will be converted automatically. URLs will be auto-linked. Please use BBCode to format your text.

Hot Web Programming Job

Java String toLowerCase Example
Java String toCharArray Example
Java String substring Example
Java String indexOf Example
Java String startsWith Example
Java String hashCode Example
Java String matches Example
Java String length Example
Java String lastIndexOf Example
Java String isEmpty Example
Java String equalsIgnoreCase Example
Java String equals Example
Java String endsWith Example
Java String copyValueOf Example
Java String contentEquals Example
  EAI Articles
  Java Certification
Tell A Friend
Your Friend Name
Search Tutorials

 

 
 
Browse all Java Tutorials
Java JSP Struts Servlets Hibernate XML
Ajax JDBC EJB MySQL JavaScript JSF
Maven2 Tutorial JEE5 Tutorial Java Threading Tutorial Photoshop Tutorials Linux Technology
Technology Revolutions Eclipse Spring Tutorial Bioinformatics Tutorials Tools SQL
 

Home | JSP | EJB | JDBC | Java Servlets | WAP  | Free JSP Hosting  | Search Engine | News Archive | Jboss 3.0 tutorial | Free Linux CD's | Forum | Blogs

About Us | Advertising On RoseIndia.net  | Site Map

India News

Send your comments, Suggestions or Queries regarding this site at roseindia_net@yahoo.com.

Copyright © 2007. All rights reserved.