jboss简介
JBOSS简介JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规
·
JBOSS简介
JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术,并且它还在the JavaWorld ditors' Choice 2002评选中获得"最佳Java应用服务器"大奖。无论是学习还是应用,JBoss为我们提供了一个非常优秀的平台。有关JBoss的详细信息请参阅其主页 http://www.jboss.org
JBoss具有如下优点:
1、JBoss是免费的,开放源代码J2EE的实现,通过LGPL许可证进行发布.但同时也有闭源的,开源和闭源流入流出的不是同一途径。
2、 JBoss需要的内存和硬盘空间比较小。
3、安装便捷:解压后,只需配置一些环境变量即可。
4、JBoss支持"热部署",部署BEAN时,只拷贝BEAN的JAR文件到部署路径下即可自动加载它,如果有改动,也会自动更新
5、JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能
6、用户可以直接实施J2EE-EAR,而不是以前分别实施EJB- JAR和Web-WAR,非常方便。
7、Jboss支持集群。
JBoss 管理控制台(JMX Console)
进入jboss的管理控制台(JMX Console)用户能够浏览到服务器活动视图
查看JBOSS JNDI名称
在jboss找到 service=JNDIView链接,能够浏览服务器中 JNDI 命名空间的结构信息,在该 MBean 显示页面找到 list 操作,然后单击 invoke 按钮。invoke 操作将返回绑定到 JNDI 树中的当前名字列表,这对于获得 EJB 名字很有帮助.如果服务器一旦重启,从控制台所作的修改都将丢弃掉。因为重启 JBoss 时,系统将重新装载原始配置,因此用户可以大胆地尝试一切操作。
bin:含有启动、停止以及其他系统相关脚本。
client:存储供Java客户应用或者外部Web容器使用的配置文件和 JAR 文件。用户可以使用所需要的具体存档,或者仅仅使用 jbossall-client.jar。
docs:含有JBoss引用的XML DTD文件(当然,还包括 JBoss 具体配置文件)。同时,还存在JCA实例配置文件,供设置不同数据库的数据源使用(比如 MySQL数据源、Oracle数据源)。
lib:包含运行 JBoss 微内核所需的 JAR 文件。请注意,不要往该目录添加用户身的任何 JAR 文件。
server:包含的各个子目录都是不同的服务器配置。通过往run脚本后添加-c <config name>参数便能够指定不同的配置。
server目录下存在 3 个服务器实例配置:all、default 以及 minimal,它们各自提供了不同的服务集合.
如果启动 JBoss服务器时没有指定其他配置,则将使用 default配置
minimal:这是启动 JBoss服务器所要求的最低配置,它仅仅是服务器,而不包含 Web容器、不提供 EJB 和 JMS 支持
default:默认配置,含有大部分J2EE应用所需的标准服务。但它不含有JAXR服务、IIOP服务、或者其他任何群集服务
all:提供了所有可用的服务
用户也可以添加自身的服务器配置。最佳做法是,拷贝最接近用户需求的现有配置,然后修改其具体内容。比如,如果用户不需要使用消息服务,则只需要拷贝 default 目录,并重新命名为 myconfig,然后删除 jms 子目录。最后,启动 myconfig 配置。
run -c myconfig
default 服务器配置目录
conf:含有指定 JBoss 核心服务的 jboss-service.xml 文件。同时,还包括核心服务的其他配置文件。
data:这一目录存储持久化数据,即使服务器发生重启其中的数据也不会丢失。许多 JBoss 服务将数据存储在这里
deploy:jobss热部署目录用户能够在deploy目录看到大量的配置文件。尤其是,用户能够看到 JMX 控制台应用(未打包的WAR文件),JBoss服务器将定期扫描该目录,从而查找是否有组件更新或修改,从而自动完成组件的重新部署。
lib:服务器配置所需的 JAR 文件。用户可以添加自身的库文件,比如 JDBC 驱动
log:日志信息将存储到该目录。JBoss使用Jakarta Log4j包作为其日志功能。同时,用户可以在应用中直接使用Log4j日志记录功能。
tmp:供部署器临时存储未打包应用使用,也可以作为其他用途。
work:供 Tomcat 编译 JSP 使用。
核心服务
当 JBoss 服务器启动时,首先会启动 conf/jboss-service.xml 文件指定的核心服务。其中包括日志、安全性、JNDI
虽然通过 conf/jboss-service.xml 文件能够添加其他 MBean 服务,但是更好的办法是,将单独的配置文件放置在 deploy 目录中,因为这将使得用户的服务具有热部署能力。
日志服务
通过conf/jboss-log4j.xml文件能够控制JBoss的日志功能。开发中通过 server.log 文件查看是否有调试信息,可供解决问题所用。用户还需要为单个的 Category设置不同的日志级别
<!-- Limit JBoss categories to INFO -->
<category name="org.jboss">
<priority value="INFO"/>
</category>
它将所有的 JBoss 相关类的日志级别限制到 INFO,即同那些含有具体日志级别的Category隔离开
将 CMP 引擎的日志输出级别设置为 DEBUG,并将其定位到 cmp.log 文件中,从而可供用户分析生成的 SQL 命令。因此,需要添加如下代码到log4j.xml 文件中。
<appender name="CMP" class="org.jboss.logging.appender.RollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.home.dir}/log/cmp.log"/>
<param name="Append" value="false"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="1"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<category name="org.jboss.ejb.plugins.cmp">
<priority value="DEBUG" />
<appender-ref ref="CMP"/>
</category>
这将创建新的文件 Appender,并指定将它用于 org.jboss.ejb.plugins.cmp 包的 Logger(或Category).
由于文件 Appender 设置为每日创建新的日志文件,因此 JBoss 不会每次启动服务器时创建新的日志文件,而且也不会总是将日志信息记录到单个文件中。当前的日志文件为cmp.log,更早的日志文件名是通过将具体日期添加到server 而生成的。用户应该还注意到,log 目录包含了 Web 容器生成的 HTTP请求日志。
安全性服务
JBOSS安全性域信息存储在login-config.xml文件中,其包含了许多安全性域定义.当用户需要在应用中使用安全性时,需要在JBoss特定部署描述符jboss.xml或jboss-web.xml中指定待使用的安全性域名
设置JBOSS管理控制台
通过server/default/deploy/jmx-console.war/WEB-INF/目录能够找到待修改的JMX 控制台文件,即jboss-web.xml。将jboss-web.xml 中 security-domain 的注释去掉,具体如下
<jboss-web>
<security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>
这将设置 Web 应用待使用的安全性域,但还未确定 Web 应用应该使用的安全性策略
在同一目录中找到 web.xml 文件,然后将 security-constraint 的注释去掉。其中,该安全性约束要求登陆
用户必须具有 JBossAdmin 角色
<security-constraint>
<web-resource-collection>
<web-resource-name>HtmlAdaptor</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>JBossAdmin</role-name>
</auth-constraint>
</security-constraint>
打开conf/login-config.xml文件,可以看到JMX是通过props/jmx-console-users.properties和jmx-console-roles.properties文件来给出登陆JMX控制台的用户名和密码
<application-policy name = "jmx-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag = "required">
<module-option name="usersProperties">props/jmx-console-users.properties</module-option>
<module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
</login-module>
</authentication>
</application-policy>
登陆JMX控制台应用的用户名和密码存储在 jmx-console-users.properties 中,并且以"username=password"形式给出。为了将用户添加到 JBossAdmin 角色中,需要将"username=rolename"形式给出的用户和角色映射关系给出在 jmx-console-roles.properties文件中。现存的文件创建了 admin 用户,其密码为admin。用户可能删除该用户,或者更改其密码,使得 JMX控制台应用更安全
添加角色,例如可以在web.xml 增加多个角色
<security-role>
<role-name>ljh</role-name>
</security-role>
允许登录控制台的角色
<auth-constraint>
<role-name>JBossAdmin</role-name>
<role-name>ljh</role-name>
</auth-constraint>
其他服务
deploy目录放置的服务不是核心服务,但具有热部署能力。用户可以通过 XML 描述符文件(*-service.xml)或 JBoss 服务存档(SAR)文件给出服务。
JBoss中的部署
你可以把下列文件拷贝到此目录下:
任何jar库(其中的类将被自动添加到 JBoss的 classpath 中)
* EJB JAR
* WAR (Web Appliction aRrchive)
* EAR (Enterprise Application aRchive)
* 包含 JBoss MBean 定义的 XML文件
* 一个包含 EJB JAR、WAR 或者 EAR 的解压缩内容,并以.jar、.war或者.ear结尾的目录。
要重新部署任何上述文件(JAR、WAR、EAR、XML等),用新版本的文件覆盖以前的就可以了。JBoss会根据比较文件的时间发现改变,然后部署新的文件。要重新部署一个目录,更新他的修改时间即可。
在Tomcat 或 J2SE 中调用 EJB
根据应用的需要, 把调用EJB所依赖的Jar包拷贝到tomcat下的/shared/lib目录或WEB应用的WEB-INF/lib
下,所依赖的 Jar一般在 jboss安装目录的 client
把 EJB 接口拷贝到应用的/WEB-INF/classes/目录下
客户端访问 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 = new InitialContext(props);//如果客户端和jboss运行在同一个jvm,不需要传入props
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
out.println(helloworld.SayHello("佛山人"));
除了上面通过硬编码设置环境属性的方式外, 还可以在应用的 classpath下放置一个 jndi.properties 文件
在 JBOSS 中的 WEB应用调用 EJB
在Jboss下发布 WEB 应用,需要把 WEB应用打包成 war文件。另外在此环境下调用EJB不需要把EJB 的接口类放
入/WEB-INF/classes/目录中,否则在调用 Stateful Bean 就会发生类型冲突,引发下面的例外
发布在 Jboss下的客户端不需要明确设置 JNDI访问的上下文环境,可以直接通过 InitialContext ctx = new
InitialContext()获得上下文环境,容器会自动赋给 InitialContext正确的环境,代码如下:
InitialContext ctx = new InitialContext();//如果客户端和jboss运行在同一个jvm,不需要传入props
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
out.println(helloworld.SayHello("佛山人"));
JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术,并且它还在the JavaWorld ditors' Choice 2002评选中获得"最佳Java应用服务器"大奖。无论是学习还是应用,JBoss为我们提供了一个非常优秀的平台。有关JBoss的详细信息请参阅其主页 http://www.jboss.org
JBoss具有如下优点:
1、JBoss是免费的,开放源代码J2EE的实现,通过LGPL许可证进行发布.但同时也有闭源的,开源和闭源流入流出的不是同一途径。
2、 JBoss需要的内存和硬盘空间比较小。
3、安装便捷:解压后,只需配置一些环境变量即可。
4、JBoss支持"热部署",部署BEAN时,只拷贝BEAN的JAR文件到部署路径下即可自动加载它,如果有改动,也会自动更新
5、JBoss与Web服务器在同一个Java虚拟机中运行,Servlet调用EJB不经过网络,从而大大提高运行效率,提升安全性能
6、用户可以直接实施J2EE-EAR,而不是以前分别实施EJB- JAR和Web-WAR,非常方便。
7、Jboss支持集群。
JBoss 管理控制台(JMX Console)
进入jboss的管理控制台(JMX Console)用户能够浏览到服务器活动视图
查看JBOSS JNDI名称
在jboss找到 service=JNDIView链接,能够浏览服务器中 JNDI 命名空间的结构信息,在该 MBean 显示页面找到 list 操作,然后单击 invoke 按钮。invoke 操作将返回绑定到 JNDI 树中的当前名字列表,这对于获得 EJB 名字很有帮助.如果服务器一旦重启,从控制台所作的修改都将丢弃掉。因为重启 JBoss 时,系统将重新装载原始配置,因此用户可以大胆地尝试一切操作。
配置服务端口
[JBOSS_HOME]\server\default\deploy\jboss-web.deployer\server.xml
<Connector port="1234" address="${jboss.bind.address}"
maxThreads="250" maxHttpHeaderSize="8192"
emptySessionPath="true" protocol="HTTP/1.1"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
bin:含有启动、停止以及其他系统相关脚本。
client:存储供Java客户应用或者外部Web容器使用的配置文件和 JAR 文件。用户可以使用所需要的具体存档,或者仅仅使用 jbossall-client.jar。
docs:含有JBoss引用的XML DTD文件(当然,还包括 JBoss 具体配置文件)。同时,还存在JCA实例配置文件,供设置不同数据库的数据源使用(比如 MySQL数据源、Oracle数据源)。
lib:包含运行 JBoss 微内核所需的 JAR 文件。请注意,不要往该目录添加用户身的任何 JAR 文件。
server:包含的各个子目录都是不同的服务器配置。通过往run脚本后添加-c <config name>参数便能够指定不同的配置。
server目录下存在 3 个服务器实例配置:all、default 以及 minimal,它们各自提供了不同的服务集合.
如果启动 JBoss服务器时没有指定其他配置,则将使用 default配置
minimal:这是启动 JBoss服务器所要求的最低配置,它仅仅是服务器,而不包含 Web容器、不提供 EJB 和 JMS 支持
default:默认配置,含有大部分J2EE应用所需的标准服务。但它不含有JAXR服务、IIOP服务、或者其他任何群集服务
all:提供了所有可用的服务
用户也可以添加自身的服务器配置。最佳做法是,拷贝最接近用户需求的现有配置,然后修改其具体内容。比如,如果用户不需要使用消息服务,则只需要拷贝 default 目录,并重新命名为 myconfig,然后删除 jms 子目录。最后,启动 myconfig 配置。
run -c myconfig
default 服务器配置目录
conf:含有指定 JBoss 核心服务的 jboss-service.xml 文件。同时,还包括核心服务的其他配置文件。
data:这一目录存储持久化数据,即使服务器发生重启其中的数据也不会丢失。许多 JBoss 服务将数据存储在这里
deploy:jobss热部署目录用户能够在deploy目录看到大量的配置文件。尤其是,用户能够看到 JMX 控制台应用(未打包的WAR文件),JBoss服务器将定期扫描该目录,从而查找是否有组件更新或修改,从而自动完成组件的重新部署。
lib:服务器配置所需的 JAR 文件。用户可以添加自身的库文件,比如 JDBC 驱动
log:日志信息将存储到该目录。JBoss使用Jakarta Log4j包作为其日志功能。同时,用户可以在应用中直接使用Log4j日志记录功能。
tmp:供部署器临时存储未打包应用使用,也可以作为其他用途。
work:供 Tomcat 编译 JSP 使用。
核心服务
当 JBoss 服务器启动时,首先会启动 conf/jboss-service.xml 文件指定的核心服务。其中包括日志、安全性、JNDI
虽然通过 conf/jboss-service.xml 文件能够添加其他 MBean 服务,但是更好的办法是,将单独的配置文件放置在 deploy 目录中,因为这将使得用户的服务具有热部署能力。
日志服务
通过conf/jboss-log4j.xml文件能够控制JBoss的日志功能。开发中通过 server.log 文件查看是否有调试信息,可供解决问题所用。用户还需要为单个的 Category设置不同的日志级别
<!-- Limit JBoss categories to INFO -->
<category name="org.jboss">
<priority value="INFO"/>
</category>
它将所有的 JBoss 相关类的日志级别限制到 INFO,即同那些含有具体日志级别的Category隔离开
将 CMP 引擎的日志输出级别设置为 DEBUG,并将其定位到 cmp.log 文件中,从而可供用户分析生成的 SQL 命令。因此,需要添加如下代码到log4j.xml 文件中。
<appender name="CMP" class="org.jboss.logging.appender.RollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.home.dir}/log/cmp.log"/>
<param name="Append" value="false"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="1"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
<category name="org.jboss.ejb.plugins.cmp">
<priority value="DEBUG" />
<appender-ref ref="CMP"/>
</category>
这将创建新的文件 Appender,并指定将它用于 org.jboss.ejb.plugins.cmp 包的 Logger(或Category).
由于文件 Appender 设置为每日创建新的日志文件,因此 JBoss 不会每次启动服务器时创建新的日志文件,而且也不会总是将日志信息记录到单个文件中。当前的日志文件为cmp.log,更早的日志文件名是通过将具体日期添加到server 而生成的。用户应该还注意到,log 目录包含了 Web 容器生成的 HTTP请求日志。
安全性服务
JBOSS安全性域信息存储在login-config.xml文件中,其包含了许多安全性域定义.当用户需要在应用中使用安全性时,需要在JBoss特定部署描述符jboss.xml或jboss-web.xml中指定待使用的安全性域名
设置JBOSS管理控制台
通过server/default/deploy/jmx-console.war/WEB-INF/目录能够找到待修改的JMX 控制台文件,即jboss-web.xml。将jboss-web.xml 中 security-domain 的注释去掉,具体如下
<jboss-web>
<security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>
这将设置 Web 应用待使用的安全性域,但还未确定 Web 应用应该使用的安全性策略
在同一目录中找到 web.xml 文件,然后将 security-constraint 的注释去掉。其中,该安全性约束要求登陆
用户必须具有 JBossAdmin 角色
<security-constraint>
<web-resource-collection>
<web-resource-name>HtmlAdaptor</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>JBossAdmin</role-name>
</auth-constraint>
</security-constraint>
打开conf/login-config.xml文件,可以看到JMX是通过props/jmx-console-users.properties和jmx-console-roles.properties文件来给出登陆JMX控制台的用户名和密码
<application-policy name = "jmx-console">
<authentication>
<login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag = "required">
<module-option name="usersProperties">props/jmx-console-users.properties</module-option>
<module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
</login-module>
</authentication>
</application-policy>
登陆JMX控制台应用的用户名和密码存储在 jmx-console-users.properties 中,并且以"username=password"形式给出。为了将用户添加到 JBossAdmin 角色中,需要将"username=rolename"形式给出的用户和角色映射关系给出在 jmx-console-roles.properties文件中。现存的文件创建了 admin 用户,其密码为admin。用户可能删除该用户,或者更改其密码,使得 JMX控制台应用更安全
添加角色,例如可以在web.xml 增加多个角色
<security-role>
<role-name>ljh</role-name>
</security-role>
允许登录控制台的角色
<auth-constraint>
<role-name>JBossAdmin</role-name>
<role-name>ljh</role-name>
</auth-constraint>
其他服务
deploy目录放置的服务不是核心服务,但具有热部署能力。用户可以通过 XML 描述符文件(*-service.xml)或 JBoss 服务存档(SAR)文件给出服务。
JBoss中的部署
你可以把下列文件拷贝到此目录下:
任何jar库(其中的类将被自动添加到 JBoss的 classpath 中)
* EJB JAR
* WAR (Web Appliction aRrchive)
* EAR (Enterprise Application aRchive)
* 包含 JBoss MBean 定义的 XML文件
* 一个包含 EJB JAR、WAR 或者 EAR 的解压缩内容,并以.jar、.war或者.ear结尾的目录。
要重新部署任何上述文件(JAR、WAR、EAR、XML等),用新版本的文件覆盖以前的就可以了。JBoss会根据比较文件的时间发现改变,然后部署新的文件。要重新部署一个目录,更新他的修改时间即可。
在Tomcat 或 J2SE 中调用 EJB
根据应用的需要, 把调用EJB所依赖的Jar包拷贝到tomcat下的/shared/lib目录或WEB应用的WEB-INF/lib
下,所依赖的 Jar一般在 jboss安装目录的 client
把 EJB 接口拷贝到应用的/WEB-INF/classes/目录下
客户端访问 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 = new InitialContext(props);//如果客户端和jboss运行在同一个jvm,不需要传入props
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
out.println(helloworld.SayHello("佛山人"));
除了上面通过硬编码设置环境属性的方式外, 还可以在应用的 classpath下放置一个 jndi.properties 文件
在 JBOSS 中的 WEB应用调用 EJB
在Jboss下发布 WEB 应用,需要把 WEB应用打包成 war文件。另外在此环境下调用EJB不需要把EJB 的接口类放
入/WEB-INF/classes/目录中,否则在调用 Stateful Bean 就会发生类型冲突,引发下面的例外
发布在 Jboss下的客户端不需要明确设置 JNDI访问的上下文环境,可以直接通过 InitialContext ctx = new
InitialContext()获得上下文环境,容器会自动赋给 InitialContext正确的环境,代码如下:
InitialContext ctx = new InitialContext();//如果客户端和jboss运行在同一个jvm,不需要传入props
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
out.println(helloworld.SayHello("佛山人"));
更多推荐
已为社区贡献2条内容
所有评论(0)