| 
         
     
     | 
     | 
    
  
    | 
    使用JBoss和PostgreSQL-----快速开发EJB和J2EE Web Application | 
   
  
     | 
   
  
     | 
   
  
    | 
     作者:未知  来源:月光软件站  加入时间:2005-2-28 月光软件站  | 
   
  
     作者:Han QW, 转载请指明出处 如有不当之处,敬请指出
  先安装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
  /* ** **MysqlDao.java  ** */ 
- 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  ** */ 
  /* ** **FirstSessionHome.java  ** */ 
  /* ** **FirstSessionBean.java  ** */ 
 
 
  /*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() ; 
 
- %> 
 
- <html> 
 
- <head> 
 
- <title>Welcome</title> 
 
- </head> 
 
- <body bgcolor="#FFFFCC"> 
 
- <br> <%= msg %> <br> 
 
- <FORM ACTION="index.jsp" method="post"> 
 
- <P>Your ID: 
 
- <INPUT TYPE="TEXT" NAME="id" size = "10"></P> 
 
- <P><INPUT TYPE="SUBMIT" NAME="SUBMIT"></P> 
 
- </FORM> 
 
- <br> 
 
- <br> 
 
- <%=(msg1 == "")? "":msg1 + "<br> <br> <br>Connect to Database OK." %> 
 
- </body> 
 
- </html> 
   
 
  <!--不要将此以下5行存入文件 ** **ejb-jar.xml ** -->不要将此以上5行存入文件, 下同. 
- <?xml version="1.0" encoding="UTF-8"?> 
 
- <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"  
 
- "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> 
 
- <ejb-jar> 
 
-  <description>First</description> 
 
-  <display-name>First</display-name> 
 
- <enterprise-beans> 
 
- <!-- Session Beans --> 
 
- <session id="MyFirstSession"> 
 
-      <display-name>My First Session Bean</display-name> 
 
-      <ejb-name>FirstSession</ejb-name> 
 
-      <home>Dev.First.FirstSessionHome</home> 
 
-      <remote>Dev.First.FirstSession</remote> 
 
-      <ejb-class>Dev.First.FirstSessionBean</ejb-class> 
 
-      <session-type>Stateless</session-type> 
 
-      <transaction-type>Container</transaction-type> 
 
- </session> 
 
- </enterprise-beans> 
 
- <assembly-descriptor> 
 
- </assembly-descriptor> 
 
- </ejb-jar> 
   
 
 
  <!--  ** **jboss.xml ** --> 
- <?xml version="1.0" encoding="UTF-8"?> 
 
- <!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS//EN" "http://www.jboss.org/j2ee/dtd/jboss.dtd"> 
 
- <jboss> 
 
- <enterprise-beans> 
 
- <session> 
 
- <ejb-name>FirstSession</ejb-name> 
 
- <jndi-name>ejbFirstSession</jndi-name> 
 
- </session> 
 
- </enterprise-beans> 
 
- <resource-managers> 
 
- </resource-managers> 
 
- </jboss> 
   
 
  <!--  ** **jboss-web.xml ** --> 
- <?xml version="1.0" encoding="UTF-8"?> 
 
- <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 2.2//EN"  
 
- "http://www.jboss.org/j2ee/dtd/jboss-web.dtd"> 
 
- <jboss-web> 
 
-     <resource-ref> 
 
-         <res-ref-name>jdbcPostgresDS</res-ref-name> 
 
-         <res-type>javax.sql.DataSource</res-type> 
 
-         <jndi-name>java:/PostgresDS</jndi-name> 
 
-     </resource-ref> 
 
- </jboss-web> 
   
 
  <!--  ** **web.xml ** --> 
- <?xml version="1.0" encoding="ISO-8859-1"?> 
 
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" 
 
- "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> 
 
- <web-app> 
 
- <resource-ref> 
 
-   <description>Postgresql driver</description> 
 
-   <res-ref-name>jdbcPostgresDS</res-ref-name> 
 
-   <res-type>javax.sql.DataSource</res-type> 
 
-   <res-auth>Container</res-auth> 
 
- </resource-ref> 
 
- </web-app> 
   
 
 
  <!--  ** **application.xml ** --> 
- <?xml version="1.0" encoding="ISO-8859-1"?> 
 
- <application> 
 
- <display-name>First</display-name> 
 
- <module> 
 
- <web> 
 
- <web-uri>First.war</web-uri> 
 
- <context-root>/First</context-root> 
 
- </web> 
 
- </module> 
 
- <module> 
 
- <ejb>First.jar</ejb> 
 
- </module> 
 
- </application> 
   
 
  编译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
          <attribute name="JndiName">PostgresDS</attribute>         <attribute name="ManagedConnectionFactoryProperties">           <properties>             <config-property name="ConnectionURL" type="java.lang.String">jdbc:postgresql://localhost/test</config-property>             <config-property name="DriverClass" type="java.lang.String">org.postgresql.Driver</config-property>             <!--set these only if you want only default logins, not through JAAS -->             <config-property name="UserName" type="java.lang.String">Administrator</config-property>             <config-property name="Password" type="java.lang.String">123456</config-property>           </properties>
  In my example, set Username  Administrator, password  123456 for windows 2000         set Username  Postgres, no password  for Linux. 在我的例子中, 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 找到:       <datasource>java:/DefaultDS</datasource>       <datasource-mapping>Hypersonic SQL</datasource-mapping> 加入:       <datasource>java:/PostgresDS</datasource>       <datasource-mapping>Postgres</datasource-mapping>  保存文件.
  (4) open and edit $Jboss/server/default/conf/standardjaws.xml 找到:    <datasource>java:/DefaultDS</datasource>    <type-mapping>Hypersonic SQL</type-mapping>    <debug>false</debug> 加入:    <datasource>java:/PostgresDS</datasource>    <type-mapping>Postgres</type-mapping>    <debug>false</debug>  保存文件.
  现在重起JBoss. 打开浏览器输入地址 http://localhost:8080/First 输入ID,按按钮. 
  
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |