- 浏览: 240821 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
akka_li:
学习了!但是为什么后续的没有了?!
EJB4:RMI和RMI-IIOP -
springaop_springmvc:
apache lucene开源框架demo使用实例教程源代码下 ...
Lucene学习笔记(一)Lucene入门实例 -
qepipnu:
求solr 客户端 jar包
Solr学习笔记(三)Solr客户端开发实例 -
zhangbc:
是这问题,赞!
Oracle Start Up 2 Oracle 框架构件、启动、解决一个问题 -
feilian09:
查询 select hibernate jdbc 那个效率快
Hibernate,JDBC性能探讨
本文的研究基于jboss-eap-4.3,一开始解决一个问题,接下来实验jboss-eap-4.3的一些简单属性。
1. 解决一个简单问题
问题如上一篇博客描述:jboss-eap-4.3启动时停滞在Configuring from URL: resource:jboss-log4j.xml ,详细描述可以参见链接http://kylinsoong.iteye.com/blog/793215;
问题解决:
先区别两个不同版本的JBOSS:jboss-4.2.2.GA和jboss-eap-4.3:
jboss-4.2.2.GA | jboss-eap-4.3 |
普通JBOSS,完全开源,相比较简单,用于简单个人的实验与测试,启动时显示启动完全过程,即启动时间。 | eap(Enterprise Application)指JBOSS企业版,与jboss-4.2.2.GA相比企业版的JBOSS加入安全性,稳定性等方面的考虑,没有完全开源,用于企业部署与应用。 |
所以综上两个版本在功能上没有区别。
对于经常使用普通版JBOSS的人第一次使用企业版JBOSS,启动企业版JBOSS,启动完成后不显示启动时间及启动详细过程,当启动停滞在Configuring from URL: resource:jboss-log4j.xml 时启动已经完成,完成界面如下:
当出现上述界面说明JBOSS企业版已经启动完成,这时可以点击http://localhost:8080/查看,为什么Jboss企业版不在Console口输出大量日志呢?个人认为出于两方面原因:一是是出去JBoss性能考虑,日志输出实际是大量的IO操作,消耗大量资源;另一方面,日志信息是供开发人员测试使用,Jboss企业版,注重的是企业应用,所以,不需要向Console台输出大量日志,当然为了我们调试方便,我们可以修改相关日志配置文件,输出相关日志信息,供我们开发,调试,相关日志控制文件位置jboss-eap-4.3\jboss-as\server\<configure version>\conf\jboss-log4j.xml;
至此http://kylinsoong.iteye.com/blog/793215提出的问题得以解决,由此可见这个问题绝对是一个新手错误,犯错的主要原因是犯错者习惯使用普通版JBOSS。
2. JBoss eap Quick starting
关于JBoss企业版下载,参见http://kylinsoong.iteye.com/blog/784231;
JBoss目录结构:
解压jboss-eap-4.3后目录结构如下图:
jboss-as | 最高层目录,包含Jboss启动的脚步文件、jar文件、配置文件、工作目录等,系统设置JBOSS_HOME就是到这层目录,即(%\jboss-eap-4.3\jboss-as) |
seam | 包含JBoss seam Framework和Hibernate相关文件 |
jboss-as\bin | 包含系统启动,关闭及一些系统特定脚步 |
jboss-as\client | 存储Java Client Application或外部Web 容器可能使用到的配置文件和jar文件,jbossall-client.jar(上篇博客中JNDI客户端代码用到的jar)就存储于此 |
jboss-as\docs | 存储了一些例子配置文件,比如要使用Entity Bean管理Oracle,可以在此位置找到Oracle JCA相关配置文件样本 |
jboss-as\server |
包含Jboss服务的配置种类,jboss提供四种配置设置:minimal,default, production, 和 all, 启动时不指定,默认启动的是production设置,这四种设置分别对应jboss-as\server下四个子文件夹: minimal:启动logging service、JNDI server、URL deployment Scanner default:包含J2EE1.4所必须的一些service和部署J2EE所常用的一些Service,不包括JAXR service、IIOP Service和任何集群的Service all:基本包括所有常见service,如JAXR service、IIOP Service和任何集群的Service等 production:基于all配置,加入了日志冗长处理(减少),每隔60秒扫描一次部署组建功能,和内存按需分配等,也是默认的启动选项 |
jboss-as\server\production\conf | 包含Jboss启动的引导文件jboss-service.xml,该文件包含jboss要启动的核心服务的描述 |
jboss-as\server\production\deploy | 包括热部署服务,你部署的服务(jar、war、ear) |
jboss-as\server\production\conf\props | 包含一些安全设置的配置文件,例如解压完修改此文件下jmx-console-users.properties文件,你才可以访问jmx-console,否则你没有权限 |
jboss启动实例 | run.bat -c production -b 0.0.0.0 |
启动完成后可以通过http://localhost:8080/jmx-console/来访问JMX Console,如果没有权限访问,修改jboss-as\server\production\conf\props下jmx-console-users.properties配置文件;
3. Jboss服务器构架
分析一个关于Jboss服务器构架的图片
Jboss模块的构架是建立在底层JMX之上;
JMX作为底层总线,基于可插入式的服务器设计理念(EJB容器,Web服务等);
容器的设计采用反射机制;
JBOSS主要模块:
EJB Container | JBoss服务器的核心实现,它有两个特性,第一是在运行期产生EJB 对象的Stub和Skeleton类,第二是支持热部署 |
Web Server | 支持Web容器和Servlet引擎 |
JBossTx | JBossTX架构被设计成为可以使用任何的实现了JTA接口的交易管理 |
JBossCx | JBossCX实现了部分JCA的功能。JCA制订了J2EE应用组件如何访问基于连接的资源(数据库) |
Deployment | 支持EJB(jar)、Web应用文档(war)和企业级应用文档(ears)的部署。它会时刻关心J2EE应用的URL情况,一旦它们被改变或出现的时候将自动部署。 |
JBossSx | 安全相关的实现 |
JBossNS | JBossNS是JBoss命名服务用来定位对象和资源。它实现了JNDI J2EE规范 |
JBossMQ | JBossMQ使Java 消息规范(JMS)的实现 |
关于JMX
JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架,JMX致力于解决分布式系统管理的问题。JMX可以看做分为三层:表现层(实现层)、代理层、分布式服务层,如下图所示,最下面属于表现层,中间代理层,最上面属于分布式服务层:
表现层:JMX可管理资源所在的层,这些已管理的资源可以编写或封装为MBean,MBean分为四种类型: 标准、动态、开放、模型;
代理层:代理层相当于一个MBean服务器,用来管理MBean如何和分布式层的服务连接,连接这些分布式服务一般用的是相关的Adapter或连接器;
分布式服务层:如RMI管理应用、基于浏览器的管理控制等
详细可以参考:http://www.blogjava.net/mlh123caoer/archive/2007/09/03/142456.html
4. EJB 容器 on JBoss
重申两个名词:
EJB:可部署的组件,能够被装配成完整的解决方案
EJB容器:提供一组标准服务:分布式对象、事务、持久性、安全性和并发性
客户端与JBOSS EJB组件系统的交互
由图可见EJB客户端与EJB组件的交互主要是与EJB各类bean之间的交互;
企业Bean的组成部分:
Enterprise Bean类 |
业务逻辑核心,不包含与网络有关的逻辑功能; 依照明确定义的接口并且遵守某些规则,能运行于任何EJB容器中; 实现javax.ejb.SessionBean/EntityBean/MessageDrivenBean接口 客户端不直接对实际的Enterprise Bean类的实例进行调用 |
远程接口 |
复制Bean类公开的所有商务逻辑方法,具有网络功能; EJB Object是EJB容器的一部分; 客户端调用EJB Object中的方法; |
Home接口:EJB工厂 |
EJB Object的生成库:生成EJB Object,查找现存的EJB Object,删除EJB Object,负载均衡等; EJB Home Object是EJB容器的一部分; 客户端从Home接口获得对EJB Object的引用; |
本地接口 |
如果调用的Enterprise Bean在同一进程中,不必经过Stub、Skeleton、网络调用以及参数的编组和解组; 扩展javax.ejb.EJBLocalObject接口; 通过引用而不是值来对参数进行编组; |
本地Home接口 |
通过本地调用创建或查找EJB,与本地接口对应 |
部署描述文件:ejb-jar.xml | 描述文件名:ejb-jar.xml 确定要运行的是哪一种EJB、Home接口、远程接口和Bean类的名字等信息; |
向JBoss EJB容器中部署一个EJB2.0的HelloWorld应用:
Step 1:定义企业bean HelloWorldBean
public class HelloWorldBean implements SessionBean { private SessionContext mySessionCtx; public SessionContext getMySessionCtx() { return mySessionCtx; } public void setMySessionCtx(SessionContext mySessionCtx) { this.mySessionCtx = mySessionCtx; } public void ejbCreate() throws EJBException, RemoteException{ System.out.println("EJB Created"); } public void ejbActivate() throws EJBException, RemoteException {} public void ejbPassivate() throws EJBException, RemoteException {} public void ejbRemove() throws EJBException, RemoteException {} public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException {} public String helloWorld() throws EJBException, RemoteException{ return "Hello World. Welcome to EJB!"; } }
Step 2:定义远程接口HelloWorld
public interface HelloWorld extends EJBObject { public String helloWorld() throws RemoteException; }
Step 3:定义Home接口HelloWorldHome
public interface HelloWorldHome extends EJBHome { public HelloWorld create() throws CreateException, RemoteException; }
Step 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>HelloWorld</ejb-name> <home>com.home.ejb.home.HelloWorldHome</home> <remote>com.home.ejb.remote.HelloWorld</remote> <ejb-class>com.home.ejb.bean.HelloWorldBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> </session> </enterprise-beans> </ejb-jar>
Step 5:定义JNDI描述文件jboss.xml
<?xml version="1.0" encoding="gb2312"?> <jboss> <enterprise-beans> <session> <ejb-name>HelloWorld</ejb-name> <jndi-name>ejb/HelloWorld</jndi-name> </session> </enterprise-beans> </jboss>
Step 6:定义打包部署文件build.xml
<?xml version="1.0"?> <project name="com.home.ejb" default="deploy" basedir=".."> <property environment="env" /> <property name="app.dir" value="${basedir}\com.home.ejb" /> <property name="src.dir" value="${app.dir}\src" /> <property name="jboss.home" value="${env.JBOSS_HOME}" /> <property name="jboss.server.config" value="production" /> <property name="build.dir" value="${app.dir}\build" /> <property name="build.classes.dir" value="${build.dir}\classes" /> <path id="build.classpath"> <fileset dir="${jboss.home}\client"> <include name="*.jar" /> </fileset> <pathelement location="${build.classes.dir}" /> </path> <target name="prepare" depends="clean"> <mkdir dir="${build.dir}" /> <mkdir dir="${build.classes.dir}" /> </target> <target name="clean"> <delete dir="${build.dir}" /> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\helloworld.jar" /> </target> <target name="compile" depends="prepare" > <javac srcdir="${src.dir}" destdir="${build.classes.dir}" debug="on" deprecation="on" optimize="off" includes="com/**"> <classpath refid="build.classpath" /> </javac> </target> <target name="ejbjar" depends="compile" > <jar jarfile="${app.dir}\helloworld.jar"> <fileset dir="${build.classes.dir}"> <include name="com/**/*.class" /> </fileset> <metainf dir="${app.dir}/META-INF"> <include name="ejb-jar.xml" /> <include name="jboss.xml" /> </metainf> </jar> </target> <target name="deploy" depends="ejbjar"> <copy file="${app.dir}\helloworld.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" /> </target> </project>
Step 7:ant运行build.xml,将组件部署到Jboss,部署成功Jboss console口会出现如下信息:
http://localhost:8080/jmx-console/HtmlAdaptor下Global JNDI Namespace会出现如下JNDI绑定信息:
Step 8:编写客户端调运代码:
public class HelloWorldClient { public static void main(String[] args) { Properties properties = new Properties(); properties.setProperty(Context.INITIAL_CONTEXT_FACTORY , "org.jnp.interfaces.NamingContextFactory"); properties.setProperty(Context.PROVIDER_URL, "jnp://localhost"); try { Context ctx = new InitialContext(properties); Object objRef = ctx.lookup("ejb/HelloWorld"); HelloWorldHome home = (HelloWorldHome)PortableRemoteObject.narrow(objRef, HelloWorldHome.class); HelloWorld helloworld = home.create(); System.out.println(helloworld.helloWorld()); } catch (NamingException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } catch (CreateException e) { e.printStackTrace(); } } }
Step 9:运行客户端代码:
如上客户端代码功能可分为三步如下:
1. 执行JNDI检索,找出Home对象
2. 使用Home接口,创建一个EJB实例
3. 利用EJB实例,调用业务方法
Hello World. Welcome to EJB!
Step 10:Eclipse下文件详细描述:
Step 11: 运行流程分析:
整个客户端调运企业bean总helloworld方法可以分为以用如下图描述:
1.检索Home对象引用
2.返回Home对象引用/Stub
3.创建新的EJB对象
4.生成EJB对象
5.返回EJB对象引用/Stub
6.调用业务方法
7.将请求委托给Bean
评论
[11-01 18:39:11,486] INFO [main] NativeServerConfig.info(296) | JBoss Web Services - Stack Native Core
[11-01 18:39:11,487] INFO [main] NativeServerConfig.info(296) | 3.1.2.GA
[11-01 18:39:12,219] INFO [main] AttributeCallbackItem.info(296) | Owner callback not implemented.
[11-01 18:39:13,642] INFO [main] LogNotificationListener.start(71) | Adding notification listener for logging mbean "jboss.system:service=Logging,type=Log4jService" to server org.jboss.mx.server.MBeanServerImpl@66c360a5[ defaultDomain='jboss' ]
[11-01 18:39:55,897] INFO [main] Ejb3DependenciesDeployer.info(296) | Encountered deployment AbstractVFSDeploymentContext@1056496894{vfsfile:/opt/gildata/irp/jboss-5.1.0.GA/server/all/deploy/profileservice-secured.jar/}
[11-01 18:39:55,899] INFO [main] Ejb3DependenciesDeployer.info(296) | Encountered deployment AbstractVFSDeploymentContext@1056496894{vfsfile:/opt/gildata/irp/jboss-5.1.0.GA/server/all/deploy/profileservice-secured.jar/}
[11-01 18:39:55,900] INFO [main] Ejb3DependenciesDeployer.info(296) | Encountered deployment AbstractVFSDeploymentContext@1056496894{vfsfile:/opt/gildata/irp/jboss-5.1.0.GA/server/all/deploy/profileservice-secured.jar/}
[11-01 18:39:55,901] INFO [main] Ejb3DependenciesDeployer.info(296) | Encountered deployment AbstractVFSDeploymentContext@1056496894{vfsfile:/opt/gildata/irp/jboss-5.1.0.GA/server/all/deploy/profileservice-secured.jar/}
[11-01 18:39:58,297] INFO [main] CorbaNamingService.info(296) | CORBA Naming Started
[11-01 18:46:19,269] ERROR [main] AbstractKernelController.error(419) | Error installing to Start: name=jboss.remoting:protocol=rmi,service=JMXConnectorServer state=Create mode=Manual requiredState=Installed
java.io.IOException: Cannot bind to URL [rmi://172.16.22.79:1390/jmxconnector]: javax.naming.ServiceUnavailableException [Root exception is java.rmi.ConnectException: Connection refused to host: 172.16.22.79; nested exception is:
java.net.ConnectException: Connection timed out]
at javax.management.remote.rmi.RMIConnectorServer.newIOException(RMIConnectorServer.java:804)
at javax.management.remote.rmi.RMIConnectorServer.start(RMIConnectorServer.java:417)
at org.jboss.mx.remoting.service.JMXConnectorServerService.start(JMXConnectorServerService.java:131)
问题是:172.16.22.79是以前机器的IP地址,现在ip修改了,内容如下,为什么还会出现这个IP?
cat network
NETWORKING=yes
HOSTNAME=irptest
GEATWAY=128.1.1.12
cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
#10.1.5.50 localhost.localdomain localhost
10.1.5.50 irptest.localdomain irptest
::1 localhost6.localdomain6 localhost6
发表评论
-
Oracle - Add Exist Validation Before Create Table
2011-11-07 13:49 1464Usually we need to check the ta ... -
JMX Architecture & "Hello Word" the JMX way
2011-10-25 20:07 1820JMX Architecture Overview: JMX ... -
Jboss-eap-5.1 Messaging
2011-08-02 21:50 2481This section I will concertate ... -
Jboss-eap-5.1 starting up note
2011-07-26 22:46 2596Jboss enterprise platform 5 hav ... -
EJB Security & JAAS Demo
2011-05-21 19:39 1616PROLOGUE: When deploying ... -
JBoss LoginInitialContext Factory Implementation
2011-05-15 16:05 1539Jboss has a series of imp ... -
Jboss Reference Exception Gallery
2011-04-27 14:08 29011. Unable to locate a login con ... -
Hibernate Annotation 的一个问题,给点意见
2011-03-10 12:43 22问题:org.hibernate.annotations. ... -
大家说说BBC的网站用的是什么技术做的
2011-02-22 05:01 1443最近在英国出差,发现这里的一些网站做的相当有特色,有些网站不是 ... -
Hibernate OneToMany 单向和双向配置对数据存取性能的比较
2011-02-08 17:06 23391. 开篇说明:今天是春 ... -
对Hibernate属性(CascadeType、JoinColumn、JoinTable、ForeignKey等)的研究
2010-12-26 15:45 16692本文列出几个“EJB 学习阶段总结:JBoss下发布一个Toy ... -
EJB 学习阶段总结:JBoss下发布一个Toy企业应用
2010-12-25 12:11 2651解释题目:为什 ... -
EJB7: Message Driven Bean
2010-12-21 22:42 2154在企业系统中需要使用 ... -
EJB6: EntityBean例子
2010-11-26 14:48 1524本例子描述向EJB容器(JBoss)部署http: ... -
JPA dev: 几个问题总结(续)
2010-11-25 18:02 24932. 如何由PoJo类生成数据库中的表 首先可以根据实体间关 ... -
JPA dev: 几个问题总结
2010-11-25 16:56 3412最近工作中遇到几个与JPA相关的问题,本文通过一个例子总结一下 ... -
JAXB学习
2010-11-24 22:35 01 什么是JAXB? JAXB全称Java Ar ... -
EJB5: JPA扩展-J2SE环境下使用EntityManager
2010-11-10 19:07 2718好久没有写博客了,最近比较忙,今天抽时间写点,最近 ... -
EJB4:RMI和RMI-IIOP
2010-11-02 21:14 4140计划提纲:引入→RMI概念→RMI HelloWorld程序→ ... -
jboss-eap-4.3 启动停止在Configuring from URL: resource:jboss-log4j.xml 问题
2010-10-25 14:49 4056如题,我改用jboss-eap-4.3, 启动时停止在Conf ...
相关推荐
总的来说,“EJB3+JBOSS5+JPA整合”是一个集成了企业级服务、持久化管理和应用服务器的复杂体系,它为企业级Java应用提供了强大的后端支持。开发者需要深入理解EJB3的编程模型、JPA的持久化机制以及JBOSS5的配置和...
在Java企业版(Java EE)应用开发中,EJB(Enterprise JavaBeans)是核心组件,用于构建可扩展、安全和事务处理的服务器端应用程序。JBoss AS(现在称为WildFly)是一个开源的应用服务器,它支持Java EE规范,包括...
3. **EJB2.0的Helloworld实例**:在EJB2.0的Helloworld示例中,我们通常会创建一个简单的会话bean,提供一个方法,如“sayHello”。客户端通过JNDI(Java Naming and Directory Interface)查找bean并调用该方法。这...
【ejb-jboss-web实例的workspace】是一个专用于开发和部署EJB(Enterprise JavaBeans)与Web应用程序的工作环境,基于JBoss应用服务器。这个工作空间集合了开发所需的各种组件、配置文件以及源代码,便于开发者进行...
1. **注解驱动**:EJB3允许通过注解(如`@Stateless`、`@Stateful`、`@Singleton`、`@MessageDriven`等)来声明bean的角色和行为,无需XML配置。 2. **依赖注入**:使用`@EJB`、`@Inject`等注解,可以方便地注入其他...
在本文中,我们将深入探讨如何使用Eclipse IDE与JBoss应用程序服务器(版本7.x)来开发和部署一个基于EJB 3.x的简单企业级Java应用程序。EJB(Enterprise JavaBeans)是Java平台上的核心组件,它提供了一种标准的...
JBoss是一个功能强大的企业级Java应用服务器,其核心优势在于对JavaEE标准的支持和灵活性。JBoss的架构基于JMX(Java Management Extensions)规范,该规范提供了一种用于管理应用服务器组件的方法。通过JMX,JBoss...
标题《EJB3.1与JBoss7.1.1在eclipse的实现》意味着本文档将介绍如何使用EJB3.1标准在JBoss应用服务器7.1.1版本上进行企业级Java Bean(EJB)的开发,并通过Eclipse集成开发环境进行部署和测试。EJB3.1是一种用于简化...
"JBoss 是一个运行 EJB 的 J2EE 应用服务器,具有开放源代码、免费、简单安装、热部署、集群支持等特点。" 一、什么是 JBoss JBoss 是一个基于 J2EE 的应用服务器,运行 EJB 容器,遵循最新的 J2EE 规范。它是一个...
1. 注解驱动:EJB3引入了注解,如`@Entity`, `@Stateless`, `@Stateful`, `@MessageDriven`, `@PersistenceContext`, `@PersistenceUnit`等,使得开发者无需编写大量的XML配置文件,可以直接在类和方法上声明其功能...
ejb3 and jboss 多本合一(three) Using @Service annotation in eclipse JBoss中文文档.pdf JBOSS使用指南.doc JBOSS架构分析.doc JBOSS对EJB3_0的扩展 jbossgs4x.pdf JBoss-EJB3.0实例教程.pdf JBoss.in.Action....
EJB 3.0 (Enterprise JavaBeans 3.0) 是 Java 平台企业版 (Java EE) 的一部分,它简化了Java 应用服务器中的组件开发。在这个实例开发过程中,我们将探讨如何在 JBoss 4.2 服务器上使用 EJB 3.0 开发和部署会话bean ...
- 编写接口和实现:EJB3允许Bean通过接口进行交互,接口定义服务,实现提供具体功能。 - 配置pom.xml或build.gradle:添加JBOSS AS 7的依赖,确保项目可以正确构建并打包为WAR或EAR文件。 - 创建部署描述符:虽然...
### EJB 3.0 实例教程:服务器为 JBOSS #### 一、引言 EJB (Enterprise JavaBeans) 是 Java 平台的一种组件模型,主要用于开发企业级应用程序。随着技术的发展,EJB 从最初的复杂性逐渐转向简化,并在 EJB 3.0 中...
1. **EJB (Enterprise JavaBeans)**:EJB是Java EE(企业版Java)的一部分,用于构建分布式、可复用的企业级服务器端组件。EJB提供了事务管理、安全性、生命周期管理和状态管理等功能,使得开发者可以专注于业务逻辑...
本文将重点讨论如何在JBoss应用服务器上配置EJB 2.0和EJB 3.0。 首先,让我们来看看EJB 2.0的配置过程: 1. **ejb-jar.xml**:这是EJB 2.0中的主要部署描述符,包含了关于EJB的所有元数据,如bean的类型、接口、...
本教程《Jboss下EJB3实例教程》将详细讲解以上内容,并通过实际示例演示如何在Jboss环境中开发、部署和测试EJB3.0应用,对于想要掌握企业级Java开发的开发者来说是一份宝贵的资源。通过学习,你可以更好地理解EJB3.0...
JBoss AS 7.1.0.Final是在Linux环境下运行的一款开源Java应用服务器,由Red Hat公司维护。这个版本发布于2012年,它引入了许多改进和新特性,旨在提供更快的启动速度、更高的性能以及更好的模块化。在这个环境中,...
### MyEclipse+EJB3+JBoss4部署EJB+Web项目HelloWorld详解 #### 一、环境搭建 ##### 1. 安装 JDK 1.6 在开始之前,请确保您的开发环境中已经安装了 Java 开发工具包 (JDK) 1.6 版本。如果尚未安装,请访问 Oracle ...