`
foryougeljh
  • 浏览: 116449 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

EJB发布与调用

 
阅读更多

JBoss中的部署

部署目录:[JBOSS_HOME]/server/config-name/deploy ,JBoss不断的扫描目录的变化

你可以把下列文件拷贝到此目录下:

任何 jar库(其中的类将被自动添加到 JBoss的 classpath 中)

EJB JAR

WAR (Web Appliction aRrchive)

EAR (Enterprise Application aRchive)

包含 JBoss MBean 定义的 XML文件

包含 EJB JAR、WAR 或者 EAR 的解压缩内容,并以.jar、.war或者.ear结尾的目录

要重新部署任何上述文件, 用新版本的文件覆盖以前的就可以了。JBoss会根据比较文件的时间发现改变,然后部署新的文件。

在单独的 Tomcat 或 J2SE 中调用 EJB

根据应用的需要,把调用EJB所依赖的Jar包拷贝Classpath下

把 EJB 接口拷贝Classpath

客户端访问 EJB时必须明确设置 InitialContext环境属性

Properties props = new Properties();

props.setProperty("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");

props.setProperty("java.naming.provider.url","localhost:1099");

props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming");

InitialContext ctx = newInitialContext(props);//如果客户端和jboss运行在同一个jvm,不需要传入props,也还可以在应用的 classpath下放置一个 jndi.properties 文件

在 JBOSS 中的 WEB应用调用 EJB

在Jboss下发布 WEB 应用,需要把 WEB应用打包成 war文件。另外在此环境下调用EJB不需要把EJB 的接口类放入/WEB-INF/classes/目录中,否则在调用 Stateful Bean 就会发生类型冲突,引发下面的例外。

java.lang.ClassCastException: $Proxy84

org.apache.jsp.StatefulBeanTest_jsp._jspService(org.apache.jsp.StatefulBeanTest_jsp:55)

发布在 Jboss下的客户端不需要明确设置 JNDI访问的上下文环境,可以直接通过 InitialContext ctx = newInitialContext()获得上下文环境,容器会自动赋给 InitialContext正确的环境

要发布 EJB 时必须把她打成*.jar文件,一个 EJB 打包后的目录结构如下

EJB 应用根目录

| -- com (你的.class文件)

| -- META-INF

| -- MANIFEST.MF(如果使用工具打包,该文件由工具自动生成)

<?xml version="1.0"?>

<project name="jartest"default="jar" basedir=".">

<property name="build.dir"value="${basedir}/build" />

<property name="build.classes.dir"value="${build.dir}/classes" />

<target name="jar" description="打包成Jar">

<jar jarfile="${basedir}/ejbfile.jar">

<fileset dir="${build.classes.dir}">

<include name="**/*.class"/>

</fileset>

<metainf dir="${basedir}/META-INF">

<include name="**" />

</metainf>

</jar>

</target>

</project>

进行 WEB应用打包

一个 Web 应用发布到 Jboss 服务器时需要打成 war 包

WEB 应用根目录

| -- **/*. jsp

| --WEB-INF

| -- web.xml

| -- lib

| -- *.*

| -- classes

| -- **/*.class

<?xml version="1.0"?>

<project name="wartest"default="war" basedir=".">

<target name="war" description="创建 WEB 发布包">

<war warfile="${basedir}/EJBTest.war"webxml="${basedir}/WEB-INF/web.xml">

<classes dir="${basedir}/WEB-INF/classes"><include name="**/*.class"/> </classes>

<lib dir="${basedir}/WEB-INF/lib"><includename="*.jar"/></lib>

<webinf dir="${basedir}/WEB-INF"><includename="*.*"/></webinf>

</war>

</target>

</project>

webxml 指明web.xml的位置,<classes>>指明 web的 classes 目录位置, <lib>指明 web 的 lib 目录位置, <webinf>指明 web 的 WEB-INF 目录位置

进行企业应用打包

一个完整的企业应用包含EJB模块和 WEB 模块,在发布企业应用时,我们需要把它打成*.ear文件,在打包前我们必须配置 application.xml 文件,该文件存放于打包后的 META-INF 目录。我们在 application.xml 文件中需要指定 EJB 模块和 WEB 模块的信息

一个 application.xml配置例子如下:

<application xmlns="http://java.sun.com/xml/ns/j2ee"version="1.4"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/application_1_4.xsd">

<display-name>EJB3Sample Application</display-name>

<module>

<web>

<web-uri>web.war</web-uri>

<context-root>web</context-root>

</web>

</module>

<module>

<ejb>ejb3.jar</ejb>

</module>

</application>

<web>指定 Web 模块,<ejb>指定 EJB 模块,Web 模块或者 EJB 模块都可以存在多个

一个企业应用打包后的目录结构应该如下

ear应用根目录

| -- ejb3.jar (你的 EJB 模块)

| -- web.war (你的 WEB 模块)

| -- META-INF

| -- MANIFEST.MF (如果使用工具打包,该文件由工具自动生成)

| -- application.xml

使用了第三方类库的 EJB打包

可以把第三方类库放入[JBOSS_HOME]\server\default\lib,不过此种方式重新部署 EJB应用时,第三方类库也要重新部署。适合放入应用服务器类路径的第三方类库通常是一些通用类库,如 JDBC 驱动。对于第三方类库最理想的选择是把他们放入 EJB Jar文件中。每一个 JAR 文件里都有一个manifest文件,这个文件由 jar工具自动创建,默认名字是 MANIFEST.MF。我们可以在 manifest文件中加入一个Class-Path 属性,引用它所依赖的 JAR 文件。我们可以手工编辑 manifest.mf 文件,在原有内容的基础上,添加Class-Path 属性。Class-Path 属性的值是用来搜索第三方类库的相对 URL。这个 URL总是相对于包含 Class-Path属性的组件。单个 Class-Path 属性内可以指定多个 URL,一个 manifest文件可以包含多个 Class-Path 属性。

假设本例 EJB 使用了两个第三方类库,名为:Upload.jar,Socket.jar,

修改后的 manifest.mf 文件内容如下:

Manifest-Version: 1.0

Ant-Version: Apache Ant 1.6.5

Created-By: 1.5.0_01-b08 (Sun MicrosystemsInc.)

Class-Path: Upload.jar Socket.jar

Class-Path: 与 Upload.jar之间有一空格分隔(缺少了空格就会发生找不到 jar文件),多个 jar文件之间需要用空格分隔。Class-Path 所在行还需要进行回车换行。

打完包后的目录结构

EJB 应用根目录

| -- com (注:ejb 类包)

| -- Upload.jar (注:第三方类库)

| -- Socket.jar (注:第三方类库)

| -- META-INF

| -- MANIFEST.MF(注:加入了 Class-Path 属性)

共用了第三方类库的 J2EE 应用打包

一个 J2EE 项目通常由多个 EJB 和 Web 应用构成,如果多个 EJB 及 Web 应用共用了一个第三方类库

假设一个 J2EE 项目含有两个 EJB 及一个 Web 应用,他们的文件名分别为:HelloWorld.jar,HelloChina.ja,MyEJBTest.war。这三个模块都使用了一个第三方类库,名为:Tools.jar

现在我们要做的是编辑这三个模块的 manifest.mf 文件,在原有内容的基础上,添加 Class-Path 属性。

三个模块的 jar文件修改后的 manifest.mf 文件内容如下:

Manifest-Version: 1.0

Ant-Version: Apache Ant 1.6.5

Created-By: 1.5.0_01-b08 (Sun MicrosystemsInc.)

Class-Path: Tools.jar

注意:Class-Path: 与 Tools.jar之间有一空格分隔(缺少了空格就会发生找不到 jar文件),Class-Path 所在行还需

要进行回车换行。

各个模块通过 manifest.mf 文件都能找到其所依赖的 Tools.jar文件。

打完包后的目录结构:

J2EE 应用根目录

| -- HelloWorld.jar

| -- META-INF

| -- MANIFEST.MF (注:加入了 Class-Path 属性, 引用它所依赖的 Tools.jar)

| -- HelloChina.jar

| -- META-INF

| -- MANIFEST.MF (注:加入了 Class-Path 属性, 引用它所依赖的 Tools.jar)

| -- MyEJBTest.war

| -- META-INF

| -- MANIFEST.MF (注:加入了 Class-Path 属性, 引用它所依赖的 Tools.jar)

| -- Tools.jar (注:第三方类库)

| -- META-INF

| --application.xml

| -- MANIFEST.MF(注:由工具自动生成,没有加入 Class-Path 属性)

如果第三方类库很多的情况下,显的有些零乱而不雅观可以建个文件夹专门用来存放第三方类库。如建个 lib 文件夹,把第三方类库放在此文件夹下。然后修改J2EE各模块的 manifest.mf 文件内容,修改后的内容如下:

Manifest-Version: 1.0

Ant-Version: Apache Ant 1.6.5

Created-By: 1.5.0_01-b08 (Sun MicrosystemsInc.)

Class-Path: lib/Tools.jar


分享到:
评论

相关推荐

    EJB 基于Java的远程方法调用(RMI)技术

    - **发布与订阅** (Publish and Subscribe, Pub/Sub) 消息传递通过主题进行。 #### 九、有状态与无状态Session Bean的区别 - **无状态Session Bean**:不保存与客户端相关的会话状态,适用于短期、无状态的服务...

    JNDI调用分布式EJB3 通用接口

    2. **发布EJB3**:当EJB3应用部署到应用服务器时,服务器会自动将其注册到JNDI上下文中,使得它们可以通过JNDI查找服务找到。 3. **查找EJB3**:客户端代码使用Java的`InitialContext`类来初始化JNDI上下文,并通过...

    EJB发布WEB服务一般步骤.pdf

    【EJB发布Web服务一般步骤】 企业级JavaBean(Enterprise JavaBeans,简称EJB)是一种在Java平台上构建可扩展的、安全的、多用户的分布式应用的技术。EJB提供了用于开发和部署组件化的企业级应用程序的标准框架。...

    EJB集群EJB集群资料

    客户端代码使用JNDI(Java Naming and Directory Interface)查找并调用远程EJB。在`Client.java`中,配置了JNDI上下文属性,包括命名工厂、URL包和提供者的URL,这些属性指定了服务器的IP地址和端口。客户端通过`...

    EJB3.0范例,开发环境搭建,服务器端程序,客户端调用程序

    EJB 3.0 版本发布于2004年,它引入了许多重要的改进,使得开发变得更加简单和高效。这些改进包括注解支持、简化部署描述符以及对POJOs的支持等。 #### 二、EJB 3.0 开发环境搭建 为了开发和运行EJB 3.0应用程序,...

    EJB 知识与运行环境设置(笔记)

    ### EJB知识与运行环境设置 #### EJB概述 企业JavaBeans (EJB) 是Java平台对企业级应用程序组件的一种标准化模型。它属于Java EE规范的一部分,主要用于构建可移植的企业级应用。EJB定义了三种主要的Bean类型: 1...

    EJB3.0容器模型的WEB服务-WebService

    **EJB 3.0 容器模型与 WebService** Enterprise JavaBeans(EJB)是Java平台上用于构建可扩展、安全且事务处理能力强的企业级应用的框架。在EJB 3.0版本中,引入了许多重要的改进,使得开发更加简化,更接近标准...

    EJB3.0中文 版

    - **JBOSS集成环境中的WEB应用调用EJB**: - 在同一服务器上配置JBOSS和Tomcat以实现无缝通信。 #### 3. 开发前的准备 - **熟悉JBOSS目录结构**: - `bin`:包含启动脚本。 - `client`:用于客户端连接的JAR...

    EJB3.1深入浅出

    ### EJB 3.1 深入浅出 #### 一、EJB 3.1 的背景与改进 ...随着EJB 3.1 最终草案的发布,我们正逐渐接近该版本的正式发布。可以预见,EJB 3.1 将继续推动EJB技术的发展,并在企业级应用领域发挥更大的作用。

    JBOSS6.0.0M4发布EJB3测试

    在JBOSS6.0.0M4中,EJB3的实现进一步加强了与Java Persistence API (JPA)和Java Transaction API (JTA)的集成,提供了数据持久化和事务管理的能力。JPA允许开发者通过对象关系映射(ORM)将Java类映射到数据库表,而...

    \websphere部署EJB3.docx

    这些步骤和知识点展示了在WebSphere上部署EJB 3应用程序的基本流程,包括项目的创建、打包、部署以及EJB的调用方式。理解并熟练掌握这些步骤对于开发和维护基于Java EE的分布式应用程序至关重要。

    java 客户端访问EJB

    本教程主要介绍如何在Java客户端访问通过Glassfish发布的EJB,特别是EJB3.0的安全特性。 首先,我们要创建一个包含简单会话bean(session bean)的企业应用程序,并建立一个Java类库项目,该项目包含了会话bean的...

    EJB笔记--介绍了EJB的用处以及编程方法

    ### EJB基础知识与编程方法详解 ...随着EJB3.0的发布,它的使用变得更加简单和灵活,同时也更加符合现代开发者的使用习惯。无论是对于初学者还是经验丰富的开发者来说,掌握EJB的基本原理和编程技巧都是非常有价值的。

    EJB的入门教材.pdf

    1. EJB的历史与发展:EJB规范自1998年首次发布以来,已经经历了多个版本的更新,每个新版本都引入了一些新的特性和改进。了解EJB的发展历程有助于理解其设计理念和使用场景。 2. EJB的架构和组件类型:EJB架构主要...

    ejb3.0开发规范PDF

    EJB 3.0的发布极大地简化了EJB的开发模型,引入了许多新特性,使得开发者可以更高效地实现业务逻辑。以下是对EJB 3.0开发规范的详细解析: 1. **持久化机制(Persistence)**: EJB 3.0引入了JPA(Java ...

    EJB依赖注入的原理

    依赖注入的基本概念是,当一个对象(调用者)需要另一个对象(被调用者)协助时,不再由调用者直接创建被调用者的实例,而是由外部容器(如Spring或EJB容器)创建并注入到调用者中。这种控制权的反转,即由对象本身...

    Java EJB 经典面试题 面试时被问过几个

    EJB技术自1999年发布以来,经历了多个版本的发展,从EJB 1.1到EJB 3.x,不断演进以适应现代开发需求。在面试中,EJB相关的问题常常被用来测试候选人在企业级Java开发领域的专业素养。 94、EJB 2.0的内容和场合: ...

    Ejb2.0教程-java教程

    EJB 2.0 是EJB技术的一个里程碑,发布于2003年,引入了许多重要的改进和新特性,旨在简化开发过程并提高可维护性。 **1. EJB 架构概述** EJB 2.0 主要由三种类型的组件组成:Entity Beans(实体Bean)、Session ...

Global site tag (gtag.js) - Google Analytics