1.3 JBoss的下载和安装
JBoss是一款很著名的开源的Java EE应用服务器,具有简单、易用的特征,而且稳定性极好。其他流行的Java EE应用服务器往往都是商业产品,如果实际项目中使用商业应用服务器往往需要支付一笔不小的花费,而使用JBoss作为应用服务器则完全免费。因为JBoss是开源、免费的Java EE应用服务器,因此许多公司在实际项目中都选择JBoss作为应用服务器。
JBoss最新的产品化稳定版是5.1.0.GA,笔者所介绍的应用也是基于该版本的JBoss,建议读者安装这个版本的JBoss。
1.3.1 下载和安装JBoss服务器
在介绍JBoss服务器安装之前,先简单介绍Java EE SDK(Software Development Kit)安装。因为本书介绍的经典Java EE应用需要标准的Java EE环境,因此需要安装Java EE SDK。
由于目前JBoss和WebLogic的产品化稳定版都支持Java EE 5规范,因此本书依然选择Java EE 5,而不是选择Java EE 6。
安装Java EE 5 SDK可按如下步骤进行。
1 登录http://java.sun.com/javaee/站点,可以在该页面看到两个红色的下载链接,第一个链接是下载Java EE 6 SDK的链接,这不是我们要下载的;第二个链接就是下载Java EE 5 SDK的链接,单击该链接进入下载页面。
2 进入Java EE 5 SDK下载页面后看到如图1.3所示的5个下载选项,读者可以根据自己的需求来决定下载哪个选项。
图1.3 下载Java EE SDK的5个选项
3 对于大部分读者而言,第3个、第4个下载选项比较常用。其中第4个选项比第3个选项多一个Java SE的JDK,笔者的机器上已有Java SE的JDK,因此下载第3个选项即可。
4 下载完成后将得到一个java_ee_sdk-5_08-windows-ml-nojdk.exe安装文件。如果试图通过双击该文件来安装Java EE SDK,可能出现如图1.4所示的对话框。
图1.4 提示找不到JRE
如果出现如图1.4所示的错误对话框,读者可以先启动命令行窗口,然后进入java_ee_sdk-5_08-windows-ml-nojdk.exe文件所在的位置,然后运行如下命令:
java_ee_sdk-5_08-windows-ml-nojdk.exe -javahome D:\Java\jdk1.6.0_18
上面命令中D:\Java\jdk1.6.0_18就是笔者的机器上JDK的安装路径,运行上面命令即可看到Java EE SDK正常启动、开始安装。
5 安装Java EE SDK与安装普通软件并无太大差别,除了将安装位置改变到读者希望安装的位置之外,其他的基本上不断单击“Next”按钮即可。
6 安装完成后,记得要将其安装目录下lib目录下的javaee.jar添加到系统CLASSPATH环境变量中。以将Java EE SDK安装在D:\盘根目录下为例,应该在系统CLASSPATH后添加如下内容:
D:\Sun\SDK\lib\javaee.jar
提示
因为笔者的机器上已经正常安装了Java SE的JDK,并配置了相关环境变量。如果读者的机器上没有安装JDK,没有配置相关环境变量,则建议先安装Java SE的JDK,并配置相关环境变量。关于如何安装JDK、如何配置环境变量的知识,请参考疯狂Java体系的《疯狂Java讲义》一书。
接下来开始安装JBoss了,因为JBoss完全是纯Java实现,因此它是平台无关的,在任何平台上运行都完全相同。在Windows和Linux平台上的安装及配置基本相同。本节以Windows平台为示范,介绍JBoss的下载和安装。
1 登录http://www.jboss.org/jbossas/站点,下载JBoss合适的版本,本书使用的是JBoss 5.1.0.GA,建议读者也下载该版本的JBoss。
提示
该版本的JBoss需要JDK 1.6的支持,因此建议读者先安装JDK 1.6,这样才可保证JBoss 5.1.0.GA正常运行。
2 从上面页面下载JBoss 5.1.0.GA,下载完成后得到一个jboss-5.1.0.GA-jdk6压缩文件,将该文件解压缩到任意路径,解压缩后应有如下文件结构:
bin:该路径下包含启动、停止JBoss的批处理命令,以及其他系统相关批处理命令。该目录下最常用的命令就是run.bat,该命令用于启动JBoss。
client:该路径下包含供Java客户端调用JBoss服务所需的各种JAR包,开发者可根据需要选择合适的JAR包,也可直接使用jbossall-client.jar包。
common:该目录下包含一个lib子目录,该子目录下的所有JAR包被整个JBoss共享。
docs:该路径下含有JBoss应用中各种XML文档的语义约束——DTD(位于dtd子目录下)和Schema文档(位于schema子目录下)、各种licenses文档(位于licenses子目录下),以及为JBoss配置各种服务的配置文件范本(位于examples子目录下)。
lib:该路径下包含运行JBoss微内核所需的JAR文件。一般不应该向该目录中添加任何用户自定义的JAR文件。
server:该目录下包含JBoss的几种不同的服务器配置。该目录下包含如下几个子目录:
· all:这种类型的服务器配置就是在default配置基础之上增加了集群支持等,该配置将启动JBoss的全部功能。
· default:JBoss默认启动该目录下的服务器配置。这种配置也是普通开发者最通用的配置,包含标准Java EE 5 API(如JPA、EJB 3和Annotation等)。
· minimal:这种配置只启动JBoss的核心部分,并未启动任何企业级服务。普通读者通常没必要启动这种配置,一般来说,如果开发者希望自定义JBoss服务器版本,则能以该配置为基础来添加自己需要的服务。
· standard:该配置主要用于测试Java EE兼容性。
· web:该配置仅仅启动JBoss的Web服务器相关的支持,除了提供Servlet/JSP容器之外,也提供JTA、JCA和JPA支持。
如果直接运行run.bat批处理命令,默认启动default配置;如果用户希望启动其他类型的配置,可运行命令:run.bat -c <config_name>。例如,如下命令将启动JBoss的全部功能。
run.bat -c all
3 运行JBoss服务器需要设置JAVA_HOME环境变量,该环境变量应指向JDK的安装路径。根据JBoss官方文档说明,安装JBoss还需要手动配置一个JBOSS_HOME环境变量,该环境变量指向JBoss的安装路径。就JBoss 5.1.0 GA实际运行来看,即使不配置JBOSS_HOME也没有任何问题,JBoss会自动检测到JBoss安装路径,并将其作为JBOSS_HOME。
进入JBoss安装目录的bin路径下,运行run.bat即可启动JBoss,启动完成后启动浏览器访问地址http://localhost:8080即可看到如图1.5所示的页面。
JBoss安装成功后,应该对其进行简单的配置,这些配置包括修改JBoss的端口、进入控制台等,下一节将详细介绍这些配置过程。
JBoss是一个开源、免费的应用服务器,因此它提供的图形界面控制台不如WebLogic等商业应用服务器简单、易用,不过用来监视JBoss上部署的各种服务也还不错;对于一个开发者而言,笔者还是建议通过修改配置文件来管理JBoss配置。
图1.5 JBoss安装成功
1.3.2 配置JBoss的服务端口
前面介绍了JBoss安装目录下的server子目录下定义的5个配置选项,其中默认的配置选项由default目录来配置。下面先进入default子目录看看它的结构,default子目录下又包含如下几个子目录:
conf:该目录下主要包含JBoss核心服务的配置文件jboss-service.xml。当然也包含其他相关服务器的各种配置文件——绝大部分和JBoss相关的配置文件都放在该目录下。
deploy:这是JBoss的自动部署目录,开发者可以将Web应用、EJB应用复制到该目录下,JBoss服务器会自动部署它们。不仅如此,JBoss自带的各种应用(例如,上面看到的控制台应用)也部署在该目录下。
lib:当前服务器配置选项所需的各种JAR文件,用户可以在该目录下添加自己的JAR包。
如果开发者运行过JBoss服务器,还可以在default目录下找到如下4个子目录:
data:该路径用于保存JBoss运行时需要持久存储的数据,这可使得服务器重启也不会丢失其中的数据。比如,Hypersonic数据库实例的数据文件等。
log:JBoss保存日志文件的默认路径。
tmp:JBoss运行的临时路径。
work:该目录是Tomcat的工作目录。与Tomcat安装目录下的work目录的作用相同。
开发者可以删除上面4个子目录,运行JBoss时系统会自动创建这4个目录。但data子路径保存了JBoss运行时需要持久保存的数据,因此删除data子路径时需要注意:一旦该子路径被删除,JBoss的运行状态将会丢失。
可能有读者感到奇怪,JBoss怎么会创建Tomcat的工作目录呢?这是因为JBoss使用了内嵌的Tomcat作为Web服务器,因此如果需要修改JBoss的Web服务端口,其实和修改Tomcat的服务端口是一样的。
JBoss内嵌的Tomcat位于JBoss安装目录下的default\deploy\jbossweb.sar目录下,Tomcat所需的核心JAR都可在该目录下找到。实际上,不仅default配置下有Tomcat,其他配置如all、standard、web,在其\deploy\jbossweb.sar目录下都可找到内嵌的Tomcat。
如果熟悉Tomcat的配置,则可通过修改server.xml文件来改变JBoss的服务端口。server.xml文件和Tomcat的conf目录下的server.xml文件基本相似,它包含如下内容:设置HTTP连接器,并将8080端口作为默认监听端口;设置AJP连接器,并使用8009端口。
为了改变JBoss的HTTP服务端口,打开server\default\deploy\jbossweb.sar目录下的server.xml文件,将该文件第12行的8080改为所需端口即可。例如,此处改为9999,再次启动JBoss即可通过9999端口来访问JBoss的HTTP服务。
不过内嵌在JBoss之中的Tomcat和单独的Tomcat还是存在一定差别的:JBoss掌管Tomcat,因此用户通常不需要去访问Tomcat目录。比如部署Web应用,只要将它们放入JBoss的自动部署目录下即可;Tomcat的输出日志(包括内部访问和访问日志)也被JBoss接管了,将被保存到JBoss的日志目录下。
1.3.3 进入控制台
前面介绍JBoss安装时已经看到,JBoss提供了如下几个控制台:
Administration Console:这是JBoss 5.1新增的管理控制台。人机界面相对比较友好。
JMX Console:JBoss早期提供的JMX管理控制台。
JBoss Web Console:JBoss提供的Web控制台,需要安装JRE支持。
Tomcat status:查看Tomcat状态的控制台。
可以通过Tomcat status查看Tomcat的运行状态,除此之外,JBoss的Administration Console控制台和JMX Console控制台都是比较常用的控制台,单击Administration Console链接可看到如图1.6所示的登录界面。
图1.6 JBoss的Administration Console控制台登录界面
如图1.6所示的登录界面要求用户输入用户名、密码来登录Administration Console控制台,那接下来的问题是:此处的用户名、密码是什么呢?
阅读过《轻量级Java EE企业应用实战》的读者可能还记得Tomcat的控制台是依靠JAAS来控制的,此处的用户名、密码也是依靠JBoss提供的JAAS来控制的。打开JBoss的\server\default\deploy\admin- console.war\WEB-INF目录(其中admin-console目录就是Administration Console控制台对应的Web应用)下的web.xml文件,可以看到如下内容:
<login-config>
<!-- 指定该应用的登录配置 --->
<auth-method>BASIC</auth-method>
<realm-name>JBoss embedded Console</realm-name>
</login-config>
<security-role>
<!-- 指定哪种角色可以访问该应用 -->
<role-name>JBossAdmin</role-name>
</security-role>
上面配置文件中粗体字代码表明可以访问该Web应用的安全角色为JBossAdmin,接下来我们再打开该Web应用WEB-INF路径下的jboss-web.xml文件,在其中可看到如下文件内容:
<jboss-web>
<class-loading>
<loader-repository>
org.jboss.on:loader=embedded
<loader-repository-config>java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</class-loading>
<!-- 使用java:/jaas/jmx-console安全域 -->
<security-domain>java:/jaas/jmx-console</security-domain>
<!-- 定义该Web应用的context路径 -->
<context-root>admin-console</context-root>
</jboss-web>
上面粗体字代码显示了该Web应用使用java:/jaas/jmx-console安全域来控制对该Web应用的访问。java:/jaas/jmx-console安全域就控制了访问该Web应用角色和用户。
JBoss的server\default\conf目录下的login-config.xml文件负责管理所有的安全域,打开该文件可以看到大量的安全域配置。下面是该文件中关于java:/jaas/jmx-console安全域的配置。
<!-- 配置jmx-console应用策略 --> <application-policy name="jmx-console"> <authentication> <login-module code= "org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required"> <!-- props下jmx-console-users.properties保存用户 --> <module-option name="usersProperties"> props/jmx-console-users.properties</module-option> <!-- props下jmx-console-rols.properties保存角色 --> <module-option name="rolesProperties"> props/jmx-console-roles.properties</module-option> </login-module> </authentication> </application-policy>
上面配置片段配置了名为jmx-console的策略,正好对应于java:/jaas/jmx-console安全域,其中粗体字代码指定该安全域使用jmx-console-users.properties来保存用户,使用jmx-console-roles.properties来保存角色。
打开JBoss的server\default\conf\props目录下的jmx-console-roles.properties文件,看到如下代码:
#admin用户属于JBossAdmin、HttpInvoker两个角色 admin=JBossAdmin,HttpInvoker
上面配置文件中指定admin用户属于JBossAdmin、HttpInvoker两个角色。下面再打开JBoss的server\default\conf\props目录下的jmx-console-users.properties文件,看到如下代码:
# 指定admin用户的密码是admin admin=admin
至此,我们已经发现了登录Administration Console控制台的角色、用户名和密码。
运行访问Administration Console控制台的角色:JBossAdmin
隶属于JBossAdmin角色的用户:admin
admin用户对应的密码:admin
提示
如果读者希望了解更多关于JBoss的认证和授权系统(JAAS)相关的知识,可以参考本书第14章所介绍的内容。
在如图1.6所示的界面中输入admin、admin进行登录,登录成功可看到如图1.7所示的界面。
图1.7 登录成功的界面
JBoss 5.1提供的Administration Console控制台使用起来非常方便,可以非常方便地查看、管理JBoss支持的各种服务。
除此之外,还可以通过JBoss提供的JMX Console控制台查看JBoss支持的各种服务,用户单击如图1.5所示的JMX Console链接,可以直接进入如图1.8所示的控制台。
如图1.8所示的JMX Console控制台是JBoss早期提供的控制台,虽然看上去人机界面并不友好,但实际上功能非常强大。考虑到JMX Console控制台对JBoss安全非常重要,我们可以为JMX Console控制台增加JAAS控制。
为了保护JBoss的JMX Console控制台对应的Web应用,同样可以通过修改该Web应用的WEB-INF路径下的jboss-web.xml文件来实现,打开server\default\deploy\jmx-console.war\WEB-INF路径下的jboss-web.xml文件,发现该文件的所有内容全部被注释了。取消该文件中的注释,也就是该文件中保留如下内容:
<jboss-web> <!-- 指定使用java:/jaas/jmx-console安全域 --> <security-domain>java:/jaas/jmx-console</security-domain> </jboss-web>
图1.8 JBoss的JMX Console控制台
上面配置文件指定JMX Console控制台也使用java:/jaas/jmx-console安全域进行保护,即和前面的Administration Console控制台使用相同的安全域。仅有这部分配置依然是不够的,因为还未确定Web应用应该使用的安全性策略、待保护的URL是什么,允许访问的安全角色又有哪些?
为进一步配置相关信息,用户可以在同一目录中找到web.xml文件,将其中对<security-constraint…/>元素的注释取消,即改为如下形式:
<security-constraint>
<web-resource-collection>
<web-resource-name>HtmlAdaptor</web-resource-name>
<description>An example security config that only allows users with the
role JBossAdmin to access the HTML JMX console web application
</description>
<!-- 保护所有资源 -->
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<!-- 允许访问的安全角色是JBossAdmin -->
<auth-constraint>
<role-name>JBossAdmin</role-name>
</auth-constraint>
</security-constraint>
上面配置文件指定保护JMX Console控制台应用下的所有资源(通过/*指定),允许访问该应用内资源的安全角色必须是JBossAdmin(如上粗体字代码所示)。
经过上面配置,如果再次试图登录Administration Console控制台,则要求用户输入用户名、密码。正如前面指出的:该控制台使用和Administration Console控制台相同的安全域,因此使用用户名admin、密码admin即可登录JMX Console控制台。
1.3.4 部署Web应用
在JBoss中部署Web应用的方式主要有如下两种:
利用JBoss自动部署。
利用控制台部署。
利用JBoss自动部署方式是最简单、最常用的方式,我们只要将一个Web应用(包括EJB、Java EE等其他应用)复制到JBoss的server\default\deploy下,系统就会把该应用部署到JBoss中。
利用控制台部署Web应用也很简单,按如下步骤进行即可。
1 按1.3.3节介绍的方法进入JBoss的Administration Console控制台。
2 单击如图1.7所示页面左边导航树中的Web Application (WAR)s节点,看到如图1.9所示的页面。
图1.9 管理JBoss服务器上已有的Web应用
3 单击如图1.9所示页面中的“Add a new resource”按钮,即可进入部署新Web应用的界面,该界面如图1.10所示。
图1.10 部署新的Web应用
4 通过如图1.10所示页面中的“浏览”按钮选择想要部署到JBoss服务器的WAR文件,然后单击页面下方的“Continue”按钮,即可部署成功。
需要指出的是:对于大部分开发者而言,其实没多大必要使用这个控制台进行部署,因为即使通过这个控制台进行部署,最终也是将Web应用对应的WAR文件复制到JBoss的自动部署目录下,也就是复制到server\default\deploy目录下。
当然JBoss支持的功能远不止于此,本书后面还会继续介绍JBoss对Java EE其他功能的支持,介绍这些支持时还将进一步讲解对应的配置方法。