当前页面: 开发资料首页 → J2EE 专题 → 使用JBoss和PostgreSQL-----快速开发EJB和J2EE Web Application
使用JBoss和PostgreSQL-----快速开发EJB和J2EE Web Application
摘要: 使用JBoss和PostgreSQL-----快速开发EJB和J2EE Web Application
- package Dev.Dao;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.sql.ResultSet;
- import javax.naming.InitialContext;
- import javax.sql.DataSource;
- public class MysqlDao {
- public Connection getConnection() throws Exception {
- InitialContext ctx = new InitialContext();
- DataSource ds = (DataSource) ctx.lookup("java:/PostgresDS");
- Connection conn = null;
- Statement stmt = null;
- try {
- conn = ds.getConnection();
- } catch (SQLException sqlEx) {
- System.out.println("Error connect to pool.");
- }
- return conn;
- }
- public String getName(String id) throws Exception {
- Connection conn = null;
- Statement stmt = null;
- ResultSet rs = null;
- String name = "";
- try {
- conn = getConnection();
- if ( conn !=null )System.out.println("Get conecttion. "+ conn.toString());
- stmt = conn.createStatement();
- if ( stmt !=null )System.out.println("Get Statement. "+ stmt.toString());
- String sql = "SELECT * from users where id = '"+id+"'";
- System.out.println("Sql from getId(): "+sql);
- rs = stmt.executeQuery(sql);
- if ( rs !=null )System.out.println("Get result. ");
- if (rs.next()){
- name = rs.getString("name");
- }
- } catch (Exception sqlEx) {
- System.out.println("Error from getName().");
- System.out.println("Error from DAO.getName() :" + sqlEx.getMessage());
- }finally {
- if (conn != null) {
- try { conn.close(); } catch (Exception sqlEx) { }
- }
- }
- return name;
- }
- public String getCountry(String id) throws Exception {
- Connection conn = null;
- Statement stmt = null;
- String name = "";
- try {
- conn = getConnection();
- stmt = conn.createStatement();
- String sql = "SELECT * from users where id = '"+id+"'";
- System.out.println("Sql from getCountry(): "+sql);
- java.sql.ResultSet rs = stmt.executeQuery(sql);
- if (rs.next())
- {
- name = rs.getString("Country");
- }
- } catch (SQLException sqlEx) {
- System.out.println("Error from getCountry().");
- }finally {
- if (conn != null) {
- try { conn.close(); } catch (Exception sqlEx) { }
- }
- }
- return name;
- }
- }
/*
**
**NewDelegate.java
**
*/
- package Dev.Delegate;
- import java.lang.*;
- import Dev.First.*;
- public class NewDelegate {
- Dev.First.FirstSession bean = null;
-
- public NewDelegate( ){
- try {
- javax.naming.InitialContext ctx = new javax.naming.InitialContext();
- Object objref = ctx.lookup("ejb/FirstSession");
- Dev.First.FirstSessionHome testBean = (Dev.First.FirstSessionHome)
- javax.rmi.PortableRemoteObject.narrow
- (objref,Dev.First.FirstSessionHome.class);
- bean = testBean.create();
- System.out.println("From JSP");
- } catch (Exception NamingException) {
- NamingException.printStackTrace();
- }
- }
-
- public String Welcome() {
- String msg = "";
- try {
- msg = bean.Welcome();
- } catch (Exception NamingException) {
- NamingException.printStackTrace();
- }
- return msg;
- }
-
- public String getName(String id) {
- String name = "";
- try {
- name = bean.getName(id);
- } catch (Exception NamingException) { NamingException.printStackTrace();}
- return name;
- }
-
- public String getCountry(String id) {
- String country = "";
- try {
- country = bean.getCountry(id);
- } catch (Exception NamingException) { NamingException.printStackTrace();}
- return country;
- }
- }
/*
**
**FirstSession.java
**
*/
- package Dev.First;
- import java.lang.*;
- import java.rmi.RemoteException;
- import javax.ejb.CreateException;
- import javax.ejb.EJBException;
- import javax.ejb.SessionBean;
- import javax.ejb.SessionContext;
- public interface FirstSession extends javax.ejb.EJBObject{
- public String Welcome() throws java.rmi.RemoteException;
-
- public String getName(String id) throws java.rmi.RemoteException;
-
- public String getCountry(String id) throws java.rmi.RemoteException;
- }
/*
**
**FirstSessionHome.java
**
*/
- package Dev.First;
- import java.lang.*;
- import java.rmi.RemoteException;
- import javax.ejb.CreateException;
- import javax.ejb.EJBException;
- import javax.ejb.SessionBean;
- import javax.ejb.SessionContext;
- public interface FirstSessionHome extends javax.ejb.EJBHome{
- public FirstSession create() throws javax.ejb.CreateException, java.rmi.RemoteException;
- }
/*
**
**FirstSessionBean.java
**
*/
- package Dev.First;
- import java.rmi.RemoteException;
- import javax.ejb.CreateException;
- import javax.ejb.EJBException;
- import javax.ejb.SessionBean;
- import javax.ejb.SessionContext;
- public class FirstSessionBean implements SessionBean{
- public void ejbCreate() throws CreateException {
- }
- public String Welcome(){
- String msg="Hello! This My Session Bean From Jboss.";
- System.out.println(msg);
- return msg;
- }
- public String getName(String id){
- String name = "";
- System.out.println("From bean before getName :"+ name);
- try{
- Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();
- name = dao.getName(id);
- System.out.println("From bean after getName :"+ name);
- }catch(Exception e){ System.out.println(e.getMessage());}
- return name;
- }
- public String getCountry(String id){
- String country = "";
- try{
- Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();
- country = dao.getCountry(id);
- }catch(Exception e){ }
- return country;
- }
- public void setSessionContext( SessionContext aContext ) throws EJBException {
- }
- public void ejbActivate() throws EJBException {
- }
- public void ejbPassivate() throws EJBException {
- }
- public void ejbRemove() throws EJBException {
- }
- }
/*Don't put the following lines into index.jsp
**
**index.jsp
**
*/Don't put the above lines into index.jsp
- <%@page language="java" %>
- <%
- String msg = "";
- String msg1 = "";
- Dev.Delegate.NewDelegate nn = new Dev.Delegate.NewDelegate();
- if (request.getParameter("id") != null &&
- request.getParameter("id") != ""&&
- !request.getParameter("id").equals("")){
- String id = request.getParameter("id");
- String name = "";
- Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();
- name = nn.getName(id); //access database through session bean
- //name = dao.getName(id); //access database directly
- if(name!= null && !name.equals("")){
- msg1 ="Welcome " + name +" ! You are from "+ dao.getCountry(id)+ " .";
- }else{
- msg1 ="Please Check Your ID. : " + id;
- }
- }
- msg = nn.Welcome() ;
- %>
-
- <head>
- Welcome
- </head>
- <body bgcolor="#FFFFCC">
<%= msg %>
- <form ACTION="index.jsp" method="post">
Your ID:
- <input TYPE="TEXT" NAME="id" size = "10">
<input TYPE="SUBMIT" NAME="SUBMIT">
- </form>
- <%=(msg1 == "")? "":msg1 + "
Connect to Database OK." %>
- </body>
-
- <?xml version="1.0" encoding="UTF-8"?>
- ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
- "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
-
- First
- First
-
-
-
- My First Session Bean
- FirstSession
- Dev.First.FirstSessionHome
- Dev.First.FirstSession
- class>Dev.First.FirstSessionBeanclass>
- Stateless
- <transaction-type>Container</transaction-type>
-
-
-
-
-
- <?xml version="1.0" encoding="UTF-8"?>
- jboss PUBLIC "-//JBoss//DTD JBOSS//EN" "http://www.jboss.org/j2ee/dtd/jboss.dtd">
-
-
-
- FirstSession
- ejbFirstSession
-
-
-
-
-
- <?xml version="1.0" encoding="UTF-8"?>
- jboss-web PUBLIC "-//JBoss//DTD Web Application 2.2//EN"
- "http://www.jboss.org/j2ee/dtd/jboss-web.dtd">
-
-
- jdbcPostgresDS
- javax.sql.DataSource
- java:/PostgresDS
-
-
- <?xml version="1.0" encoding="ISO-8859-1"?>
- web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
- "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
-
-
- Postgresql driver
- jdbcPostgresDS
- javax.sql.DataSource
- Container
-
-
- <?xml version="1.0" encoding="ISO-8859-1"?>
-
- First
-
-
- First.war
- /First
-
-
-
- First.jar
-
-
编译JAVA源程序,生成class文件.
进入JAVA源程序目录, 运行:
javac -classpath %classpath%;%jboss%\server\default\deploy\First.ear\First.jar *.java
或者
javac -classpath %jboss%\server\default\deploy\First.ear\First.jar;%jboss%\client\jboss-j2ee.jar *.java
Copy 目录First.ear to jboss\server\default\deploy.
打开浏览器输入地址 http://localhost:8080/First
到此, 在浏览器看到: Hello! This My Session Bean From Jboss.
说明这个EJB工作了.
如果按按钮, 没反应或出错. 原因没安装配置数据库, 下面安装配置Postgres数据库
For Windows2000
下载 PgSQL731wina1.exe (http://www.postgresql.org),
Finally you will see the next line, you need enter the password for Administrator
最后你将看下一个行,你必须为用户Administrator输入password.
********************
Enter password of user `.\Administrator':123456
********************
记下此password, 我的口令是123456.
从开始菜单 > Programm > PostgresSQL > Adjust PostgresSQL Configuration file
它将在Wordpad中打开PostgresSQL Configuration文件, 找到下列行,
#
# Connection Parameters
#
#tcpip_socket = false
#ssl = false
#max_connections = 32
#superuser_reserved_connections = 2
#port = 5432
修改编辑:
#
# Connection Parameters
#
tcpip_socket = true
#ssl = false
#max_connections = 32
#superuser_reserved_connections = 2
port = 5432
接着,保存文件.
起动PostgresSQL服务器:
开始菜单>Programm>PostgresSQL>Utilies>Start PostgresSQL server
起动命令行:
开始菜单>Programm>PostgresSQL>Utilies>Command Shell
执行下列命令,准备数据,
Administrator@SAN /
$ dir
$ cd bin
$ createdb test
$ psql test
test=# create table users
test-# (name varchar(20),
test(# id varchar(20),
test(# country varchar(20));
test=# insert into users values ('Sam', '123', 'China');
test=# insert into users values ('Tom', '321', 'USA');
test=# insert into users values ('Sean', '231', 'France');
test=# select * from users;
name | id | country
------+-----+---------
Sam | 123 | China
Tom | 321 | USA
Sean | 231 | France
(3 rows)
test=#
到此, 数据准备就绪.
For RedHat:
以root登陆, 执行下列命令,准备数据,
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
Open and edit /usr/local/pgsql/data/pg_hba.conf
local all trust
host all 127.0.0.1 255.255.255.255 trust
just delete #, and save.
[root@localhost root]# su - postgres
-bash-2.05b$ /usr/bin/postmaster -i -D /usr/local/pgsql/data >logfile 2>&1 &
-bash-2.05b$ /usr/bin/createdb test
-bash-2.05b$ /usr/local/pgsql/bin/psql test
test=# .......the following same as Windows2000
到此, 数据准备就绪.
执行shutdown.bat or shutdown.sh, 停止Jboss Server.
找到JDBC drive.
为了在Jboss中使用连接池,需要拷贝jdbc drive 到Jboss/server/default/deploy , 在linux 我们能找到/usr/share/pgsql/pgjdbc2.jar,在wondows2000,我们能找到PostgreSQL\usr\share\ postgresql\java\postgresql.jar
把其中之一复制到Jboss/server/default/deploy
配置Jboss
(1) 复制 $Jboss/examples/jca/postgres-service.xml 到 $Jboss/server/default/deploy/
(2) 打开编辑Jboss/server/default/deploy/postgres-service.xml
PostgresDS
jdbc:postgresql://localhost/test
org.postgresql.Driver