快速开发EJB和J2EE Web应用

开发 后端
本文详细讲述了如何快速开发EJB和J2EE Web应用,并提供了一系列文件列表以及源文件。

开发J2EE Web应用的准备工作:

先安装JSDK,再安装JBoss.
安装JSDK,必须获得一套对应于用户的操作系统的JDK,
我的安装的文件目录是
Windows2000: d:\s1studio_jdk\j2sdk1.4.1
Linux: /root/s1studio_jdk/j2sdk1.4.1
为了用EJB, 需要一个j2ee-1.3.jar或者j2ee-1.2.jar,
如果安装了Sun One Studio 或者 J2EE (www.sun.com )这个文件已经有.
把这个文件放在classpath路径上.
或者使用jboss-j2ee.jar, 安装JBoss后在$JBoss\client中可找到.
建议安装Sun One Studio, 用Sun One Studio编译Java源程序,
不用设置classpath, 省去不少过程.

安装JBoss:
把JBoss的压缩包解开,放在任一目录上,
我的安装的文件目录是
/dose/jboss-3.0.4_tomcat-4.1.12 (REDHAT8.0)
E:\jboss-3.0.4_tomcat-4.1.12 (WINDOWS2000)
WINDOWS2000, linux共用同一套JBoss.

配置JBoss:
启动JBoss需要执行一个脚本文件:
linux:run.sh
WINDOWS对应的是:run.bat

(1)
在JBoss\bin\run.bat (for Windows)开头插入一行
set JAVA_HOME = d:\s1studio_jdk\j2sdk1.4.1
在JBoss\bin\run.sh (for Linux)开头插入一行
JAVA_HOME="/root/s1studio_jdk/j2sdk1.4.1"

或者
(2)设置系统环境变量JAVA_HOME,指向JDK

运行JBoss, run.sh或者run.bat
当看到启动JBoss的信息时,说明启动了.
服务器简单的测试:
JBoss默认的WEB端口为8080,我们可以在打开一个浏览器输入地址
http://localhost:8080/jmx-console
当在浏览器看到JBoss的信息时,说明安装配置JBoss成功了.

建立下面的目录和文件(注意大小写).

FIRST.EAR
|
|-----META-INF (application.XML)
|
|-----First.jar
| |-----META-INF (ejb-jar.xml,jboss.xml)
| `-----Dev
| |-----First(FirstSession.java, FirstSessionHome.java, FirstSessionBean.java)
| |-----Delegate(NewDelegate.java)
| `-----Dao(MySQLDao.java)
|
`-----First.war(index.JSP)
|
`-----WEB-INF (jboss-web.xml, web.xml)
|-----classes
`-----lib

编译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

Administrator
123456

在我的例子中,
windows2000, 用户:Administrator,password:123456
Linux(RH8.0), 用户:Postgres, 没有password
因为PostgresSQL和windows2000使用不同的default用户名,所以在linux和window2000中这文件不同.当然,你可以加相同的PostgresSQL用户名和password在linux和window2000中, 这样这文件就相同了.

保存文件.

(3) 打开编辑 $Jboss/server/default/conf/standardjbosscmp-jdbc.xml
找到:
java:/DefaultDS
Hypersonic SQL
加入:
java:/PostgresDS
Postgres
保存文件.

(4) open and edit $Jboss/server/default/conf/standardjaws.xml
找到:
java:/DefaultDS
Hypersonic SQL
false
加入:
java:/PostgresDS
Postgres
false
保存文件.

现在重启JBoss.
打开浏览器输入地址http://localhost:8080/First br> 输入ID,按按钮

#p#

附件:源文件代码

MysqlDao.java  

  1. package Dev.Dao;   
  2.  
  3. import java.sql.Connection;   
  4. import java.sql.SQLException;   
  5. import java.sql.Statement;   
  6. import java.sql.ResultSet;   
  7.  
  8. import javax.naming.InitialContext;   
  9. import javax.sql.DataSource;   
  10.  
  11.  
  12. public class MysqlDao {   
  13.  
  14.     public Connection getConnection() throws Exception {   
  15.  
  16.         InitialContext ctx = new InitialContext();   
  17.  
  18.         DataSource ds = (DataSource) ctx.lookup("java:/PostgresDS");   
  19.  
  20.  
  21.         Connection conn = null;   
  22.         Statement stmt = null;   
  23.  
  24.         try {   
  25.             conn = ds.getConnection();   
  26.  
  27.         } catch (SQLException sqlEx) {   
  28.             System.out.println("Error connect to pool.");   
  29.         }   
  30.  
  31.         return conn;   
  32.     }   
  33.  
  34.     public String getName(String id) throws Exception {   
  35.  
  36.         Connection conn = null;   
  37.         Statement stmt = null;   
  38.         ResultSet rs = null;   
  39.         String name = "";   
  40.  
  41.         try {   
  42.             conn = getConnection();   
  43.             if ( conn !=null )System.out.println("Get conecttion. "+ conn.toString());   
  44.             stmt = conn.createStatement();   
  45.             if ( stmt !=null )System.out.println("Get Statement. "+ stmt.toString());   
  46.             String sql = "SELECT * from users where id = '"+id+"'";   
  47.             System.out.println("Sql from getId(): "+sql);   
  48.            rs = stmt.executeQuery(sql);   
  49.             if ( rs !=null )System.out.println("Get result. ");   
  50.            if (rs.next()){   
  51.             name = rs.getString("name");   
  52.                }   
  53.  
  54.         } catch (Exception sqlEx) {   
  55.         System.out.println("Error from getName().");   
  56.                 System.out.println("Error from DAO.getName() :" + sqlEx.getMessage());   
  57.         }finally {   
  58.             if (conn != null) {   
  59.                try { conn.close(); } catch (Exception sqlEx) { }   
  60.             }   
  61.         }   
  62.         return name;   
  63.     }   
  64.  
  65.     public String getCountry(String id) throws Exception {   
  66.  
  67.         Connection conn = null;   
  68.         Statement stmt = null;   
  69.         String name = "";   
  70.  
  71.         try {   
  72.             conn = getConnection();   
  73.             stmt = conn.createStatement();   
  74.             String sql = "SELECT * from users where id = '"+id+"'";   
  75.             System.out.println("Sql from getCountry(): "+sql);   
  76.                java.sql.ResultSet rs = stmt.executeQuery(sql);   
  77.                if (rs.next())   
  78.             {   
  79.                    name = rs.getString("Country");   
  80.               }   
  81.  
  82.         } catch (SQLException sqlEx) {   
  83.             System.out.println("Error from getCountry().");   
  84.         }finally {   
  85.             if (conn != null) {   
  86.                try { conn.close(); } catch (Exception sqlEx) { }   
  87.             }   
  88.         }   
  89.         return name;   
  90.     }   
  91.  
  92. }   
  1. /*  
  2. **  
  3. **NewDelegate.java   
  4. **  
  5. */  
  6. package Dev.Delegate;   
  7.  
  8. import java.lang.*;   
  9. import Dev.First.*;   
  10.  
  11.  
  12. public class NewDelegate {   
  13.  
  14.     Dev.First.FirstSession bean = null;   
  15.        
  16.     public NewDelegate( ){   
  17.        try {   
  18.        javax.naming.InitialContext ctx = new javax.naming.InitialContext();   
  19.        Object objref = ctx.lookup("ejb/FirstSession");   
  20.        Dev.First.FirstSessionHome testBean = (Dev.First.FirstSessionHome)   
  21.           javax.rmi.PortableRemoteObject.narrow   
  22.           (objref,Dev.First.FirstSessionHome.class);   
  23.        bean = testBean.create();   
  24.        System.out.println("From JSP");   
  25.     } catch (Exception NamingException) {   
  26.            NamingException.printStackTrace();   
  27.     }   
  28.     }   
  29.      
  30.     public String Welcome() {   
  31.     String msg = "";   
  32.     try {   
  33.             msg = bean.Welcome();   
  34.     } catch (Exception NamingException) {    
  35.            NamingException.printStackTrace();   
  36.          }   
  37.            return msg;   
  38.     }   
  39.        
  40.     public String getName(String id) {   
  41.     String name = "";   
  42.     try {   
  43.             name = bean.getName(id);   
  44.     } catch (Exception NamingException) { NamingException.printStackTrace();}   
  45.         return name;   
  46.     }    
  47.        
  48.     public String getCountry(String id) {   
  49.     String country = "";   
  50.     try {   
  51.              country = bean.getCountry(id);   
  52.     } catch (Exception NamingException) { NamingException.printStackTrace();}   
  53.         return country;   
  54.     }           
  55. }   
  1. /*  
  2. **  
  3. **FirstSession.java   
  4. **  
  5. */ 
  6. package Dev.First;   
  7.  
  8. import java.lang.*;   
  9. import java.rmi.RemoteException;   
  10. import javax.ejb.CreateException;   
  11. import javax.ejb.EJBException;   
  12. import javax.ejb.SessionBean;   
  13. import javax.ejb.SessionContext;   
  14.  
  15.  
  16. public interface FirstSession extends javax.ejb.EJBObject{   
  17.  
  18.          public String Welcome() throws java.rmi.RemoteException;   
  19.             
  20.          public String getName(String id) throws java.rmi.RemoteException;   
  21.             
  22.          public String getCountry(String id) throws java.rmi.RemoteException;   
  23.  
  24. }   
  1. /*  
  2. **  
  3. **FirstSessionHome.java   
  4. **  
  5. */ 
  6. package Dev.First;   
  7.  
  8. import java.lang.*;   
  9. import java.rmi.RemoteException;   
  10. import javax.ejb.CreateException;   
  11. import javax.ejb.EJBException;   
  12. import javax.ejb.SessionBean;   
  13. import javax.ejb.SessionContext;   
  14.  
  15.  
  16. public interface FirstSessionHome extends javax.ejb.EJBHome{   
  17.  
  18. public FirstSession create() throws javax.ejb.CreateException, java.rmi.RemoteException;   
  19.  
  20. }   
  1. /*  
  2. **  
  3. **FirstSessionBean.java   
  4. **  
  5. */ 
  6. package Dev.First;   
  7.  
  8. import java.rmi.RemoteException;   
  9. import javax.ejb.CreateException;   
  10. import javax.ejb.EJBException;   
  11. import javax.ejb.SessionBean;   
  12. import javax.ejb.SessionContext;   
  13.  
  14.  
  15. public class FirstSessionBean implements SessionBean{   
  16.  
  17. public void ejbCreate() throws CreateException {   
  18.  
  19. }   
  20.  
  21. public String Welcome(){   
  22.       String msg="Hello! This My Session Bean From Jboss.";   
  23.       System.out.println(msg);   
  24.       return msg;   
  25. }   
  26.  
  27. public String getName(String id){   
  28.       String name = "";   
  29.       System.out.println("From bean before getName :"+ name);   
  30.       try{   
  31.       Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();   
  32.       name = dao.getName(id);   
  33.       System.out.println("From bean after getName :"+ name);   
  34.       }catch(Exception e){ System.out.println(e.getMessage());}   
  35.       return name;   
  36. }   
  37.  
  38. public String getCountry(String id){   
  39.       String country = "";   
  40.       try{         
  41.       Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();   
  42.       country = dao.getCountry(id);   
  43.       }catch(Exception e){ }         
  44.       return country;   
  45. }   
  46.  
  47. public void setSessionContext( SessionContext aContext ) throws EJBException {   
  48.  
  49. }   
  50.  
  51. public void ejbActivate() throws EJBException {   
  52.  
  53. }   
  54.  
  55. public void ejbPassivate() throws EJBException {   
  56.  
  57. }   
  58.  
  59. public void ejbRemove() throws EJBException {   
  60.  
  61. }   
  62.  
  63. }   
  1. /*不要将下面这行放入index.jsp  
  2. **  
  3. **index.jsp   
  4. **  
  5. */不要将上面这行放入index.jsp  
  6. < %@page language="java" %>   
  7.  
  8. < %   
  9.  
  10.     String msg = "";   
  11.     String msg1 = "";   
  12.     Dev.Delegate.NewDelegate nn = new Dev.Delegate.NewDelegate();   
  13.     if (request.getParameter("id") != null &&    
  14.            request.getParameter("id") != ""&&    
  15.            !request.getParameter("id").equals("")){   
  16.         String id = request.getParameter("id");   
  17.         String name = "";   
  18.         Dev.Dao.MysqlDao dao = new Dev.Dao.MysqlDao();   
  19.         name = nn.getName(id);      //access database through session bean   
  20.         //name = dao.getName(id);   //access database directly   
  21.         if(name!= null && !name.equals("")){   
  22.             msg1 ="Welcome  " + name +" !     You are from  "+ dao.getCountry(id)+ " .";   
  23.         }else{   
  24.             msg1 ="Please Check Your ID. : " + id;   
  25.         }   
  26.  
  27.     }   
  28.     msg = nn.Welcome() ;   
  29. %>   
  30. < html>   
  31.  
  32. < head>   
  33. < title>Welcome< /title>   
  34. < /head>   
  35.  
  36. < body bgcolor="#FFFFCC">   
  37. < br> < %= msg %> < br>   
  38.  
  39. < FORM ACTION="index.jsp" method="post">   
  40.  
  41. < P>Your ID:   
  42. < INPUT TYPE="TEXT" NAME="id" size = "10">< /P>   
  43.  
  44.  
  45. < P>< INPUT TYPE="SUBMIT" NAME="SUBMIT">< /P>   
  46. < /FORM>   
  47. < br>   
  48. < br>   
  49.  
  50. < %=(msg1 == "")? "":msg1 + "< br> < br> < br>Connect to Database OK." %>   
  51.  
  52. < /body>   
  53. < /html> 
  1. < !--不要将此以下5行存入文件  
  2. **  
  3. **ejb-jar.xml  
  4. **  
  5. -->不要将此以上5行存入文件, 下同.  
  6. < ?xml version="1.0" encoding="UTF-8"?>   
  7. < !DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"    
  8. "http://java.sun.com/dtd/ejb-jar_2_0.dtd">   
  9.  
  10. < ejb-jar>   
  11.  
  12.  < description>First< /description>   
  13.  < display-name>First< /display-name>   
  14.  
  15. < enterprise-beans>   
  16.  
  17. < !-- Session Beans -->   
  18. < session id="MyFirstSession">   
  19.      < display-name>My First Session Bean< /display-name>   
  20.      < ejb-name>FirstSession< /ejb-name>   
  21.      < home>Dev.First.FirstSessionHome< /home>   
  22.      < remote>Dev.First.FirstSession< /remote>   
  23.      < ejb-class>Dev.First.FirstSessionBean< /ejb-class>   
  24.      < session-type>Stateless< /session-type>   
  25.      < transaction-type>Container< /transaction-type>   
  26. < /session>   
  27. < /enterprise-beans>   
  28. < assembly-descriptor>   
  29. < /assembly-descriptor>   
  30. < /ejb-jar>   

jboss.xml

  1. < ?xml version="1.0" encoding="UTF-8"?>   
  2. < !DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS//EN" "http://www.jboss.org/j2ee/dtd/jboss.dtd">   
  3.  
  4. < jboss>   
  5.  
  6. < enterprise-beans>   
  7.  
  8. < session>   
  9. < ejb-name>FirstSession< /ejb-name>   
  10. < jndi-name>ejbFirstSession< /jndi-name>   
  11. < /session>   
  12.  
  13. < /enterprise-beans>   
  14.  
  15. < resource-managers>   
  16. < /resource-managers>   
  17.  
  18. < /jboss>   

jboss-web.xml

  1. < ?xml version="1.0" encoding="UTF-8"?>   
  2. < !DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.2//EN"    
  3. "http://www.jboss.org/j2ee/dtd/jboss-web.dtd">   
  4.  
  5. < jboss-web>   
  6.  
  7.  
  8.     < resource-ref>   
  9.         < res-ref-name>jdbcPostgresDS< /res-ref-name>   
  10.         < res-type>javax.sql.DataSource< /res-type>   
  11.         < jndi-name>java:/PostgresDS< /jndi-name>   
  12.     < /resource-ref>   
  13.  
  14. < /jboss-web>  

web.xml

  1. < ?xml version="1.0" encoding="ISO-8859-1"?>   
  2.  
  3. < !DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"   
  4. "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">   
  5.  
  6. < web-app>   
  7.  
  8. < resource-ref>   
  9.   < description>Postgresql driver< /description>   
  10.   < res-ref-name>jdbcPostgresDS< /res-ref-name>   
  11.   < res-type>javax.sql.DataSource< /res-type>   
  12.   < res-auth>Container< /res-auth>   
  13. < /resource-ref>   
  14.  
  15. < /web-app>  

application.xml

  1. < ?xml version="1.0" encoding="ISO-8859-1"?>   
  2.  
  3. < application>   
  4. < display-name>First< /display-name>   
  5. < module>   
  6. < web>   
  7. < web-uri>First.war< /web-uri>   
  8. < context-root>/First< /context-root>   
  9. < /web>   
  10. < /module>   
  11.  
  12. < module>   
  13. < ejb>First.jar< /ejb>   
  14. < /module>   
  15. < /application>  

【编辑推荐】

  1. 实现数据库表字j2ee应用
  2. J2ee简介
  3. J2EE应用服务器的现状与发展趋势
  4. J2EE、J2SE、J2ME是什么意思?
  5. J2EE的核心技术之JDBC简介篇 

责任编辑:book05 来源: 新浪博客
相关推荐

2009-06-22 10:14:00

J2EE web se

2009-06-12 08:54:22

EJB术语J2EE

2009-06-22 17:05:41

Java EEJava企业应用

2009-06-16 11:14:00

Hibernate+SJ2EE应用开发

2009-06-18 16:13:14

J2EE开发

2009-06-22 17:34:40

J2EE架构

2012-02-21 09:48:10

JavaJ2EE

2009-06-23 08:06:46

J2EE体系架构J2EE模型J2EE设计模式

2009-06-22 10:59:00

J2EE web se

2009-06-19 17:03:44

J2EE学习

2009-06-10 14:10:23

J2EE学习J2EE是什么

2009-06-11 17:06:11

J2EE历史Java EE概述

2009-06-10 13:37:06

J2EE可伸缩性J2EE灵活性J2EE维护

2009-06-22 10:09:00

J2EE web se

2009-06-22 17:09:00

J2EE项目开发流程

2009-06-23 16:48:26

J2EE常见问题J2EE平台

2009-06-22 09:56:00

J2EE web se

2009-06-08 21:34:09

J2EEJ2SEJ2ME

2009-06-22 09:48:00

J2EE web se

2009-06-26 14:13:38

OSCache
点赞
收藏

51CTO技术栈公众号