We have created a sample app which transfers money between
two bank account databases. This task is fulfilled by an ejb method.
Lets called first bank as Akila and the other banks as Sithum. We need to create two different databases for two different banks. then we need two create two different data source as describe earlier. But in this case, we used XA-datasource. So lets start implement our sample application.
First we are going to create two datasources for two banks called akila-ds.xml and sithum-ds.xml. I am going to show only one -ds.xml file. But you have to do is, you can change jndi name only.
<?xml version="1.0"
encoding="UTF-8"?>
<datasources>
<xa-datasource>
<jndi-name>jdbc/akilads</jndi-name>
<xa-datasource-property
name="URL">jdbc:mysql://localhost:3306/mazhar_db</xa-datasource-property>
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
<user-name>root</user-name>
<password></password>
<track-connection-by-tx>true</track-connection-by-tx>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
<min-pool-size>1</min-pool-size>
<max-pool-size>10</max-pool-size>
<idle-timeout-minutes>10</idle-timeout-minutes>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</xa-datasource>
Above file contains the data source for akila_db. By editing jndi name and the URL we can
create a data source file for the other bank. Main difference of this file with
the previous datasource file is that this contains ‘xa-datasource’ instead of
‘local-tx-datasource’. We need ‘xa-datasource’ here because we have to handle a
transaction between two databases. Don’t forget to begin the jndi name with
‘jdbc/’ .
In order to make a ‘mysql jdbc connection’ with ‘jboss’ we
have to copy and paste ‘mysql-connector-java-5.1.13-bin.jar’ in
jbossas/server/xxx/lib folder.
Now we need to do some coding in our application. So create a new enterprise application. Then go to ejb and write down following code.
Context initCnt = new InitialContext ();
DataSource ds = (DataSource)
initCnt.lookup("java:jdbc/"+from+"bankds");
Then we have to create a database
connection and make use of it.
ds.getConnection().createStatement().executeUpdate("Update
user_amount set amount=amount-"+amount+ " WHERE
user='"+user1+"'");
This ‘getConnection()’ method gets
a connection from connection pool and releases it as configured. Connection
pool is created by the ‘-ds.xml’ file definition.
In addition to this we have to
handle some sql exceptions.
Not only the ejb but also the
web.xml file should be modified to make database connections. Add this code
inside the ‘<webapp>’ tag
<resource-ref>
<description>Oracle
Datasource</description>
<res-ref-name>jdbc/mazhards</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>Oracle
Datasource</description>
<res-ref-name>jdbc/zaheerds</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Finally following code should be added to the ‘jboss-web.xml
file’
<resource-ref>
<res-ref-name>jdbc/akilads</res-ref-name>
<jndi-name>java:/mazhards</jndi-name>
</resource-ref>
<resource-ref>
<res-ref-name>jdbc/sithumds</res-ref-name>
<jndi-name>java:/zaheerds</jndi-name>
</resource-ref>
Now open up your browser and do the transaction.
=================================================
So I know that i can write up to 140 characters in this box.
http://bit.ly/RgNp89
=================================================
=================================================
So I know that i can write up to 140 characters in this box.
http://bit.ly/RgNp89
=================================================