王朝网络
分享
 
 
 

使用JBoss和PostgreSQL-----快速开发EJB和J2EEWebApplication

王朝java/jsp·作者佚名  2008-05-18
宽屏版  字体: |||超大  

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

作者: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成功了.

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

[myphp]

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">

<%= msg %>

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

<%=(msg1 == "")? "":msg1 + " 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>

[/myphp]

编译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,按按钮.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有