Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          使用JBoss和PostgreSQL-----快速開發EJB和J2EE Web Application

          使用JBoss和PostgreSQL-----快速開發EJB和J2EE Web Application


          Developing J2EE Web Application on Jboss and PostgreSQL(chinese version)


          作者:Han QW, 轉載請指明出處 如有不當之處,敬請指出


          先安裝JSDK,再安裝JBoss.
          安裝JSDK,必須獲得一套對應于用戶的操作系統的JDK,
          我的安裝的文件目錄是
          WINDOWS2000: d:s1studio_jdkj2sdk1.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后在$JBossclient中可找到.
          建議安裝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)
          在JBossin un.bat (for Windows)開頭插入一行
          set JAVA_HOME = d:s1studio_jdkj2sdk1.4.1
          在JBossin un.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
          **
          */

          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() ;%><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>ejb/FirstSession</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>jdbc/PostgresDS</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>jdbc/PostgresDS</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%serverdefaultdeployFirst.earFirst.jar *.java
          或者
          javac -classpath %jboss%serverdefaultdeployFirst.earFirst.jar;%jboss%clientjboss-j2ee.jar *.java

          Copy 目錄First.ear to jbossserverdefaultdeploy.
          打開瀏覽器輸入地址 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,我們能找到 PostgreSQLusrsharepostgresqljavapostgresql.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,按按鈕.

          posted on 2008-10-06 15:54 找個美女做老婆 閱讀(524) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 越西县| 黔东| 巫溪县| 望都县| 盘山县| 临沧市| 九龙县| 扎鲁特旗| 云浮市| 江源县| 徐州市| 肇州县| 晋宁县| 林周县| 四会市| 曲松县| 嘉黎县| 常宁市| 安庆市| 昔阳县| 金平| 晴隆县| 淮阳县| 和田市| 阳西县| 准格尔旗| 金昌市| 兴国县| 靖边县| 河南省| 淳化县| 法库县| 碌曲县| 洪洞县| 淄博市| 额敏县| 托克托县| 磐石市| 海门市| 如皋市| 临沭县|