Jboss4.0.2应用详解

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"/>
       port=8080 改为 port=8089 ,保存该文件,然后启动 jboss ,在地址栏中输入 http://localhost:8089/jmx-console/ 即可。
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 命名服务。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值