Jboss
支持
EJB 1.1
和
EJB 2.0
的规范,它是一个为管理
EJB
的容器和服务器。类似于
Sun’s J2SDK Enterprise Edition
(
J2EE
),但是
Jboss
核心服务仅是提供
EJB
服务器。
JBOSS
不包括
serverlers/JSP page
的
WEB
容器,当然可以和
Tomcat
或
Jetty
绑定使用。
JBOSS
需要比较小的内存和硬盘空间。可以在
64M
内存以及几兆空间上很好的运行。而
Sun’s J2EE
需要最少内存为
128M
,以及
31M
硬盘空间。
JBOSS
启动速度要比
J2EE
快
10
倍。而且它能内嵌
SQL
数据库服务器进行持久性
BEAN
处理,当启动时会自动启动。(
J2EE
装载分离
CloudScape SQL Server
)。
本文为了讲述方便,用
jboss_home代表
jboss
的安装目录
1
、
JBoss
端口的更改
默认情况下,
JBoss
的端口号是
8080
,但是这很可能跟其他已安装的软件端口号相冲突,为了避免这种情况出现,我们将
JBoss
的端口号改为
8089
。具体如下:在目录
jboss_home/server/default/deploy/jbossweb-tomcat55.sar
下找到
server.xml
文件,发现如下的一段:
<!-- A HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" address="${jboss.bind.address}"
maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
emptySessionPath="true"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"/>
2
、
JBoss
下建立数据源
数据源是在
JDBC 2.0
中引入的一个概念。在
JDBC 2.0
扩展包中定义了
javax.sql.DataSource
接口来描述数据源的概念。如果用户希望建立一个数据库连接,通过查询
JNDI
服务中的数据源,可以从数据源中获得相应的数据库连接。
JNDI
向应用程序提供了一个查询和使用远程服务的机制,这些服务可以是任何企业服务,对于
JDBC
应用程序来说,
JNDI
提供的是数据库连接服务。
本文用
SQL Server2000
作为测试的数据库,通过
JDBC
连接
SQL Server2000
。
(
1
)、首先安装
SQL JDBC
驱动,将其安装目录
Lib
下的文件
msbase.jar
、
mssqlserver.jar
、
msutil.jar
统统拷贝到
jboss_home/server/default/lib
中;
(
2
)、在
jboss_home/docs/examples/jca
下找到文件
mssql-ds.xml
,将其拷贝到
jboss_home/server/default/deploy
下,并修改其内容,如下所示:
<datasources>
<local-tx-datasource>
<jndi-name>MSSQLDS</jndi-name
〉
<connection-url>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=testDB</connection-url>
<driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
<user-name>sa</user-name>
<password>sa</password>
……
</local-tx-datasource>
</datasources>
保存文件。
下面的片断代码是在jsp页面中通过数据源来访问MSSQL数据库
……
<%
java.sql.Connection con;
java.lang.String strCon;
java.sql.PreparedStatement stmt;
java.sql.ResultSet rs;
try
{
javax.naming.InitialContext ctx = new javax.naming.InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("java:/MSSQLDS");
con = ds.getConnection();
stmt = con.prepareStatement("select NO,name from student where ID like ?");
String param = request.getParameter("number");
stmt.setString(1,"%"+param+"%");
rs = stmt.executeQuery();
}
%>
……
3
、JBoss下的JMS
JBoss
从
2.0
版本以后都支持
JMS
。
在
2.1
中增加了
MDB
,从
2.4
版本开始
JMS
作为一个事务资源。
JBoss
中
JMS
的体系结构如下:
JMS Provider,
叫做
JbossMQ
。是
JBoss
实现
JMS 1.0.2
规范的一部分,包括可选部分,象
ASF
(
Application Service Facvility
)。
JbossMQ
处理和普遍
JMS
一样:建立
queues (
队列
)
或
topic(
标题
)
,持久性等。
MDB (Message Driven Beans)
;
资源适配器。
JMS
的简单介绍:
当你发送一个消息,你不能直接发送到对此消息感兴趣的接受者。而是你发送到一个目的地。对此消息感兴趣的接受者必须连接到目的地,得到此消息或在目的地设置订阅。
在
JMS
中有两种域:
topics
和
queues
:
一个消息发送到一个
topics
,可以有多个客户端。用
topic
发布允许一对多,或多对多通讯通道。消息的产生者被叫做
publisher,
消息接受者叫做
subscriber
。
queue
是另外一种方式,仅仅允许一个消息传送给一个客户。一个发送者将消息放在消息队列中,接受者从队列中抽取并得到消息,消息就会在队列中消失。第一个接受者抽取并得到消息后,其他人就不能在得到它。
为了能发送和接收消息,必须得到一个
JMS
连接。该连接是使用
JMS Provider
得到连接的,在得到连接之后,建立一个会话
(Session)
。然后再建立
publisher/sender
来发送消息或
subscriber/receiver
来接收消息。
运行时,如果使用
topic
那么
publisher
或
subscriber
通过一个
topic
来关联,如果使用
queue
,则
sender
或
receiver
通过
queue
来关联起来。
通常,在
JMS
框架中运转的方法如下:
(1)
得到一个
JNDI
初始化上下文
(Context)
;
(2)
根据上下文来查找一个连接工厂
TopicConnectFactory/ QueueConnectionFactory (
有两种连接工厂,根据是
topic/queue
来使用相应的类型
)
;
(3)
从连接工厂得到一个连接
(Connect
有两种
[TopicConnection/ QueueConnection]);
(4)
通过连接来建立一个会话
(Session);
(5)
查找目的地
(Topic/ Queue);
(6)
根据会话以及目的地来建立消息制造者
(TopicPublisher/QueueSender)
和消费者
(TopicSubscriber/ QueueReceiver).
为了得到一个连接和得到一个目的地(用来关联
publisher/sender
或
subscriber/receiver
),必须用
provider-specific
参数。
通过
JNDI
来查找相应的连接工厂或目的地,
JNDI
适合于任何
JMS Provider
。但是查找用的名字是
provider
使用的。因此,在你使用的
JMS Provider
(其中包括
JBossMQ
),必须学会如何进行指定。
JMS Provider
中的任何设置,象连接特性,用到目的地等,在用到的
Provider
都有明确描述。
2)
配置
当使用一个JMS Provider时,有三个Provider-specific因素:
得到一个JNDI初始化上下文
用到的连接工厂的名字。
对目的地的管理和命名协定。
JBoss
同它的JNDI一起执行。为了简单的JMS client, 配置和查找初始化上下文,同实现其他J2EE客户端一样。
JMS-specific
来约束JBoss 的JMS provider (JBossMQ)。JbossMQ是通过xml 文件jbossmq-service.xml进行配置的,该文件放在在jboss_home/server/default/deploy/jms/下。
在xml文件中最基本的三件事情:
增加一个新的目的地
配置用户
获得可用连接工厂的名字。
(1)
增加新的目的地
在目的地的xml文件在jboss 4.0.2中是jbossmq-destinations-service.xml(/server/default/deploy/jms/)。在文件中已经存在几个缺省的目的地,所以你比较容易明白怎样增加到文件中。在例子中你需要一个topic目的地 spool,所以增加下面的语句到jbossmq-destinations-service.xml中。这种方式是长久存在的,不随着JBoss服务器关闭而消失。
name="jboss.mq.destination:service=Topic,name=spool">
jboss.mq:service=DestinationManager
另外一种方法是可以通过JMX HTML管理界面。通过http://localhost:8089/jmx-console 来访问。在jboss.mq 下查找service=DestinationManager 的连接。然后在createTopic()或createQueue()来建立,这种方法建立的目的地是临时性的,随着服务器开始存在,当JBoss 服务器重新启动时,动态建立的目的地将会不存在。在JbossMQ中所有目的地都有一个目的地类型的前缀。对于topic前缀是topic ,对于queues前缀是queue。例如查找一个testTopic目的地,需要查找名字为
“
topic/testTopic
”
。
在此种方法中有createTopic()或createQueue()分别有两种方法:一是有两个参数,二是有一个参数的。两个参数分别是:建立的目的地名称和JNDI名称。一个参数的只是目的地名称,对于JNDI名称默认是:[目的地类型(topic/queue) ]/目的地名称。
在这里我们使用的是第一种方法。直接修改jbossmq-destinations-service.xml文件。
(2)
管理用户
在JMS中可能关联一个连接和一个用户。用户可以直接在文件jbossmq-state.xml(jboss_home/docs/examples/jms/conf)中添加。同样也可以使用JMX HTML管理界面来增加(jboss.mq->service=StateManager->addUser())。
jacky
jacky
DurableSubscriberExample
(3)
连接工厂
JBossMQ
包括为topic和queue几个不同的连接工厂,每个连接工厂有自己特性。当通过JNDI来查找一个连接工厂时,需要知道此连接工厂的名称。所有可用连接工厂和它们的属性,名称都会在文件jbossmq-service.xml中。
4
、JBoss下的EJB
remote interface
是会把
EJB
中方法提供给外边世界,让外边的代码来进行调用;
home interface
是管理remote interface类的类。包括建立、删除等操作。 bean实现类提供home interface和remote interface所有方法的实现。
当然一个Bean可能还包括其他类,甚至其他包。但是必须有此三个类,其他类是在此三个类之上建立的。所有类被打包进一个JAR文件,此文件是用一个目录结构来反映出包的层次关系。
在包含所有类的jar文件建立之前,必须有一个META-INF目录。此目录存放了部署描述符(通常叫
“
ejb-jar.xml
”
)
,和可选的其他XML文件。这些文件告诉服务器关于应用明确服务信息。对于JBoss 来讲,文件名必须叫
“
jboss.xml
”
。
创建jar文件后部署到JBoss Server上。在客户端只需要一个jndi.properties文件,此文件告诉客户端程序从哪里初始化查找JNDI 命名服务。