分享
 
 
 

jboss3.2初步配置使用心得[windows2000+sql server 2000]

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

1、下载和安装

<1>下载可以到www.jboss.org下载,我下的是jboss3.2.1。并且不是那个和tomcat整合的版本。

<2>安装方法就是将文件解压到硬盘的某个目录下(例如:我的解到 d:\jboss-3.2.1)。

2、配置

<1>首先必须安装jdk。jboss不像weblogic自带java标准开发包。我安装的是1.4 安装目录是C:\j2sdk1.4.0 。

<2>设置环境变量

<<1>>JAVA_HOME设置为JDK的安装目录(例如:我的为C:\j2sdk1.4.0)

<<2>>classpath的设置:看看我的,大家就知道该包含哪些包了

C:\j2sdk1.4.0\lib\tools.jar;

D:\jboss-3.2.1\server\default\lib\javax.servlet.jar;

D:\jboss-3.2.1\server\default\lib\jboss-j2ee.jar;

.;

D:\jboss-3.2.1\client\jbossall-client.jar;

D:\jboss-3.2.1\client\jnet.jar;

D:\jboss-3.2.1\client\log4j.jar;

3、运行

进入jboss3.2.1的bin目录,执行run.bat就可以了。看到出现

00:59:26,978 INFO [Server] JBoss (MX MicroKernel) [3.2.1 (build: CVSTag=JBoss_3

_2_1 date=200305041533)] Started in 17s:595ms

这样的提示信息就说明启动成功,测试方法如下

http://localhost:8080/jmx-console 你将看到jmx agent view

4、使用

<1>html,jsp测试

jboss的默认web目录是在jboss-3.2.1\server\default\deploy下面。下面就介绍测试jsp,servlet,ejb的方法:

对于测试首先在deploy下建立一个test.war文件夹,然后将html,jsp文件都可以放到这里进行测试

例如建立一test.jsp如下:

<%@ page language="java" %>

<%@ page contentType="text/html;charset=gb2312" %>

<%@ page import="java.util.*" %>

<%=new Date().toLocalString()%>

通过http://localhost:8080/test/test.jsp调用就可得到当前日期时间。

<2>设置sql server2000的数据源然后在jsp中操调用操作数据库

<<1>>下载安装sql server2000的jdbc驱动(微软提供)

<<2>>将mssqlserver,msbase,msutil三个jar文件复制到jboss-3.2.1\server\default\lib目录下面

<<3>>将jboss-3.2.1\docs\examples\jca\mssql-ds.xml复制一份到jboss-3.2.1\server\default\deploy下面

部分修改如下:

<datasources>

<local-tx-datasource>

<jndi-name>ds</jndi-name>

<connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Northwind</connection-url>

<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>

<user-name>sa</user-name>

<password></password>

</local-tx-datasource>

</datasources>

上面的配置就是用ds作为数据源的名称,用不带密码的sa用户连接sql server的样板数据库northwind。你可以作适当的修改。

<<4>>配置完成后,用如下testSql.jsp文件测试数据库操作

<%@ page language="java" %>

<%@ page import="javax.naming.*" %>

<%@ page import="javax.sql.*" %>

<%@ page import="java.sql.*" %>

<%!

javax.sql.DataSource ds;

%>

<%

try {

Context ctx = new InitialContext();

ds = (javax.sql.DataSource)ctx.lookup("java:/ds");

} catch (Exception e) {

out.println("erro when connect to java naming api");

}

Connection conn = ds.getConnection();

Statement st = conn.createStatement();

String sqlStr = "select * from categories";

ResultSet rs = st.executeQuery(sqlStr);

while ( rs.next() ) {

out.println(rs.getString("categoryName")+"<br>");

}

rs.close();

st.close();

conn.close();

%>

将输出categories表的每条记录的categoryName,值得注意的是在mssql-ds.xml设置的jndi-name是ds,而真正的绑定是

java:/ds。

<3> servlet的配置测试

<<1>>编写并编译如下的简单servlet

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("");

out.println("Hello World");

out.println("<p><p><p><p><div align='right'>author's email:zhjx_10@hotmail.com</div>");

}

}

<<2>>在test.war文件夹下建立一个WEB-INF目录,里面再建立一个classes目录和web.xml文件目录结构如下:

[test.war]

[WEB-INF]

[classes]

web.xml

将编译成功的HelloWorld.class放置到classes目录下,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>

<servlet>

<servlet-name>HelloWorld</servlet-name>

<servlet-class>HelloWorld</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>HelloWorld</servlet-name>

<url-pattern>/HelloWorld</url-pattern>

</servlet-mapping>

</web-app>

通过调用http://localhost:8080/test/HelloWorld 就可以看到hello world的输出

<4>session bean的测试(Hello)

这是一个简单的stateless session bean的测试

<<1>>Hello.java

import java.rmi.RemoteException;

import javax.ejb.EJBObject;

public interface Hello extends javax.ejb.EJBObject {

public String hello() throws java.rmi.RemoteException;

}

<<2>>HelloHome.java

import java.rmi.RemoteException;

public interface HelloHome extends javax.ejb.EJBHome {

Hello create() throws java.rmi.RemoteException,javax.ejb.CreateException;

}

<<3>>HelloBean.java

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

public class HelloBean implements javax.ejb.SessionBean {

private SessionContext ctx;

public void ejbCreate() {

System.out.println("ejbCreate()");

}

public void ejbRemove() {

System.out.println("ejbRemove()");

}

public void ejbActivate() {

System.out.println("ejbActivate()");

}

public void ejbPassivate() {

System.out.println("ejbPassivate()");

}

public void setSessionContext(javax.ejb.SessionContext ctx) {

his.ctx = ctx;

}

public String hello() {

System.out.println("hello()");

return "hello,world";

}

}

<<4>>ejb-jar.xml

<?xml version="1.0"?>

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

<enterprise-beans>

<session>

<ejb-name>Hello</ejb-name>

<home>HelloHome</home>

<remote>Hello</remote>

<ejb-class>HelloBean</ejb-class>

<session-type>Stateless</session-type>

<transaction-type>Container</transaction-type>

</session>

</enterprise-beans>

</ejb-jar>

<<5>>jboss.xml

<?xml version="1.0" encoding="UTF-8"?>

<jboss>

<enterprise-beans>

<session>

<ejb-name>Hello</ejb-name>

<jndi-name>HelloEJB</jndi-name>

</session>

</enterprise-beans>

</jboss>

<<6>>

编译3个.java文件后按照以下路径存放文件(假设放到d:\sessionEjb下面)

d:\sessionEjb\Hello.class

d:\sessionEjb\HelloBean.class

d:\sessionEjb\HelloHome.class

d:\sessionEjb\META-INF\ejb-jar.xml

d:\sessionEjb\META-INF\jboss.xml

然后打包d:\sessionEjb\jar cvf helloejb.jar *.*,打包后将helloejb.jar放到deploy目录下面,会在控制台看到如下输出

11:35:30,815 INFO [EjbModule] Creating

11:35:30,825 INFO [EjbModule] Deploying Hello

11:35:30,835 INFO [StatelessSessionContainer] Creating

11:35:30,835 INFO [StatelessSessionInstancePool] Creating

11:35:30,835 INFO [StatelessSessionInstancePool] Created

11:35:30,845 INFO [StatelessSessionContainer] Created

11:35:30,845 INFO [EjbModule] Created

11:35:30,845 INFO [EjbModule] Starting

11:35:30,845 INFO [StatelessSessionContainer] Starting

11:35:30,905 INFO [StatelessSessionInstancePool] Starting

11:35:30,905 INFO [StatelessSessionInstancePool] Started

11:35:30,905 INFO [StatelessSessionContainer] Started

11:35:30,905 INFO [EjbModule] Started

11:35:30,905 INFO [EJBDeployer] Deployed: file:/D:/jboss-3.2.1/server/default/d

eploy/helloejb.jar

11:35:30,925 INFO [MainDeployer] Deployed package: file:/D:/jboss-3.2.1/server/

default/deploy/helloejb.jar

表明配置没有错误信息

测试的客户端代码

import javax.naming.InitialContext;

import javax.naming.Context;

import javax.naming.NamingException;

import javax.ejb.CreateException;

import java.rmi.RemoteException;

import javax.rmi.PortableRemoteObject;

import java.util.Properties;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class HelloWorldClient extends JFrame implements ActionListener {

public HelloWorldClient() {

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

setTitle("EJBClient");

setSize(300,200);

Container contentPane = getContentPane();

area = new JTextArea(6,20);

subButton = new JButton("Say hello to EJB");

subButton.setActionCommand("sya");

subButton.addActionListener(this);

contentPane.add(area,"Center");

contentPane.add(subButton,"South");

}

public void actionPerformed(ActionEvent e) {

if ( e.getActionCommand().equals("sya") ) {

ejbSays = getEJBInfo();

area.append(ejbSays + "\n");

}

}

public String getEJBInfo() {

try {

Context jndiContext = getInitialContext();

Object ref = jndiContext.lookup("HelloEJB");

HelloHome home = (HelloHome)PortableRemoteObject.narrow(ref,HelloHome.class);

Hello hw= home.create();

ejbSays = hw.hello();

} catch (java.rmi.RemoteException e) {

e.printStackTrace();

} catch ( Throwable t ) {

t.printStackTrace();

} finally {

}

return ejbSays;

}

public static Context getInitialContext() throws Exception {

Properties p = new Properties();

p.put(Context.INITIAL_CONTEXT_FACTORY,

"org.jnp.interfaces.NamingContextFactory");

p.put(Context.PROVIDER_URL, "localhost:1099");

return new InitialContext(p);

}

public static void main(String[] args) {

JFrame win = new HelloWorldClient();

win.pack();

win.setVisible(true);

}

private String ejbSays="";

private JTextField info;

private JButton subButton;

private JTextArea area;

}

作了一个简单的gui,主要注意的是getInitalContext()方法jboss的连接参数的设置和getEJBInfo()方法对ejb的调用

将编译好的HelloWorldClient.class,HelloWorldClient$1.class,放置到d:\sessionbean目录下(如果放到别的地方,确定可以

通过路径找到HelloBean,HelloHome,Hello类

d:\sessionbean\java HelloWorldClient

点按钮就会返回hello world(做gui是为了复习一下以前的知识)

<5>cmp的测试

此cmp继续使用上面的数据源对应的northwind数据库,要在其中建一个表cd。

<<1>>CD.java

import javax.ejb.EJBObject;

import java.rmi.RemoteException;

public interface CD extends EJBObject {

public Integer getId() throws RemoteException;

public void setId(Integer id) throws RemoteException;

public String getTitle() throws RemoteException;

public void setTitle(String title) throws RemoteException;

public String getArtist() throws RemoteException;

public void setArtist(String artist) throws RemoteException;

public String getType() throws RemoteException;

public void setType(String type) throws RemoteException;

public String getNotes() throws RemoteException;

public void setNotes(String notes) throws RemoteException;

}

<<2>>CDHome.java

import javax.ejb.EJBHome;

import javax.ejb.CreateException;

import javax.ejb.FinderException;

import java.rmi.RemoteException;

import java.util.Collection;

public interface CDHome extends EJBHome {

public CD create(Integer id,String title,String artist,String type,String notes) throws RemoteException,CreateException;

public CD findByPrimaryKey(Integer id) throws RemoteException,FinderException;

public Collection findByType(String type) throws RemoteException,FinderException;

}

<<3>>CDBean.java

import javax.ejb.EntityBean;

import javax.ejb.EntityContext;

import java.rmi.RemoteException;

import javax.ejb.CreateException;

public abstract class CDBean implements EntityBean {

EntityContext ctx;

public Integer id;

public String title;

public String artist;

public String type;

public String notes;

public Integer ejbCreate(Integer id,String title,String artist,String type,String notes) throws CreateException{

setId(id);

setTitle(title);

setArtist(artist);

setType(type);

setNotes(notes);

return id;

}

public void ejbPostCreate(Integer id,String title,String artist,String type,String notes) {

}

public abstract String getTitle() ;

public abstract void setTitle(String _title) ;

public abstract Integer getId() ;

public abstract void setId(Integer _id);

public abstract String getArtist();

public abstract void setArtist(String _artist) ;

public abstract String getType() ;

public abstract void setType(String _type) ;

public abstract String getNotes() ;

public abstract void setNotes(String _notes);

public void setEntityContext(EntityContext ctx) {

this.ctx = ctx;

}

public void unsetEntityContext() {

ctx = null;

}

public void ejbActivate() {}

public void ejbPassivate() {}

public void ejbLoad() {}

public void ejbStore() {}

public void ejbRemove() {}

}

<<4>>ejb-jar.xml

<?xml version="1.0"?>

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

<display-name>MusicCDs</display-name>

<enterprise-beans>

<entity>

<description>Modles a music CD</description>

<ejb-name>CDBean</ejb-name>

<home>CDHome</home>

<remote>CD</remote>

<ejb-class>CDBean</ejb-class>

<persistence-type>Container</persistence-type>

<prim-key-class>java.lang.Integer</prim-key-class>

<reentrant>False</reentrant>

<cmp-version>2.x</cmp-version>

<abstract-schema-name>cd</abstract-schema-name>

<cmp-field><field-name>id</field-name></cmp-field>

<cmp-field><field-name>title</field-name></cmp-field>

<cmp-field><field-name>artist</field-name></cmp-field>

<cmp-field><field-name>type</field-name></cmp-field>

<cmp-field><field-name>notes</field-name></cmp-field>

<primkey-field>id</primkey-field>

<query>

<query-method>

<method-name>findByType</method-name>

<method-params>

<method-param>java.lang.String</method-param>

</method-params>

</query-method>

<ejb-ql><![CDATA[

SELECT OBJECT(A)

FROM cd AS A

WHERE A.type=?1

]]></ejb-ql>

</query>

</entity>

</enterprise-beans>

<assembly-descriptor>

<container-transaction>

<method>

<ejb-name>CDBean</ejb-name>

<method-name>*</method-name>

</method>

<trans-attribute>Required</trans-attribute>

</container-transaction>

</assembly-descriptor>

</ejb-jar>

<<5>>jboss.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE jboss PUBLIC

"-//JBoss//DTD JBOSS 3.0//EN"

"http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">

<jboss>

<enterprise-beans>

<entity>

<ejb-name>CDBean</ejb-name>

<jndi-name>ejb/cdbean</jndi-name>

</entity>

</enterprise-beans>

</jboss>

<<6>>jbosscmp-jdbc.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE jbosscmp-jdbc PUBLIC

"-//JBoss//DTD JBOSSCMP-JDBC 3.0//EN"

"http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_0.dtd">

<jbosscmp-jdbc>

<defaults>

<datasource>java:/ds</datasource>

<datasource-mapping>MS SQLSERVER2000</datasource-mapping>

<create-table>true</create-table>

<remove-table>true</remove-table>

<pk-constraint>true</pk-constraint>

<preferred-relation-mapping>foreign-key</preferred-relation-mapping>

</defaults>

<enterprise-beans>

<entity>

<ejb-name>CDBean</ejb-name>

<table-name>cd</table-name>

<cmp-field>

<field-name>id</field-name>

<column-name>id</column-name>

</cmp-field>

<cmp-field>

<field-name>title</field-name>

<column-name>title</column-name>

</cmp-field>

<cmp-field>

<field-name>artist</field-name>

<column-name>artist</column-name>

</cmp-field>

<cmp-field>

<field-name>type</field-name>

<column-name>type</column-name>

</cmp-field>

<cmp-field>

<field-name>notes</field-name>

<column-name>notes</column-name>

</cmp-field>

</entity>

</enterprise-beans>

</jbosscmp-jdbc>

需要解释的是

<create-table>true</create-table>

<remove-table>true</remove-table>

会在部署的时候自动在库中建立数据表,而在删除的时候同时删除对应的表

<<7>>编译部署

编译3个.java文件,按照下面的目录结构存放(假设放在d:\cmpbean下面)

d:\cmpbean\CD.class

d:\cmpbean\CDHome.class

d:\cmpbean\CDBean.class

d:\cmpbean\META-INF\ejb-jar.xml

d:\cmpbean\META-INF\jboss.xml

d:\cmpbean\META-INF\jbosscmp-jdbc.xml

打包:d:\cmpbean\jar cvf cdejb.jar *.*

将cdejb.jar复制到deploy目录下

<<8>>客户端代码测试

import javax.naming.InitialContext;

import javax.naming.Context;

import javax.naming.NamingException;

import javax.ejb.CreateException;

import java.rmi.RemoteException;

import javax.rmi.PortableRemoteObject;

import java.util.Properties;

import java.util.*;

public class CDClient {

public static Context getInitialContext() throws Exception {

Properties p = new Properties();

p.put(Context.INITIAL_CONTEXT_FACTORY,

"org.jnp.interfaces.NamingContextFactory");

p.put(Context.PROVIDER_URL, "localhost:1099");

return new InitialContext(p);

}

public static void main(String[] args) {

try {

Context jndiContext = getInitialContext();

Object ref= jndiContext.lookup("ejb/cdbean");

CDHome home = (CDHome)PortableRemoteObject.narrow(ref,CDHome.class);

home.create(new Integer(100),"Bohn jove","rock and roll","rock","a good type");

home.create(new Integer(200),"黑宝","rock","rock","roll star");

home.create(new Integer(300),"mike jackson","sssss","iiop","none");

Collection c = home.findByType("rock");

Iterator i = c.iterator();

while ( i.hasNext() ) {

String ss = ( (CD)javax.rmi.PortableRemoteObject.narrow(i.next(),CD.class)).getNotes();

System.out.println(ss);

}

} catch (java.rmi.RemoteException e) {

e.printStackTrace();

} catch (Throwable t) {

t.printStackTrace();

} finally {

}

}

}

请确保通过类路径可以找到CD.class,CDHome.Class.

执行java CDclient 将看到如下输出:

D:\cmpbean\>java CDClient

a good type

roll star

D:\cmpbean\>

5、结束语

首先我也是个初学者,自己在csdn上多次提问有关jboss的问题,却所得到回答甚少。

而且搜索了很久也找不到相应的文档可以了解jboss3.2的使用。

为此希望写此文档为初学者提供一点帮助,错误的地方还请指正。

另外、对于jboss3.2 mssql-xa-ds.xml的设置以及连接池的

使用方法,有谁弄过,请告诉我,不胜感激。 email: zhjx_10@hotmail.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有