查看JBoss控制台JMX-Console 
//可以通过这个页面进行对 JBOSS 的各服务的配置和管理。 
http://localhost:8080/jmx-console/

查看发布的WebService(进入 JbossWS 的查看界面)
http://localhost:8080/jbossws/

1.WAR文件的部署 
JBoss支持热部署,也就是war文件部署到服务器上后不需要重新启动JBoss(Tomcat不支持这种特性)。war文件的部署很简单,直接将war文件拷贝到JBoss/server/default/deploy目录下即可。

2.JBoss的目录结构 
      bin:包含各种脚本文件以及相关文件,比如run.bat和shutdown.bat批处理文件。 
      client:存储配置信息和可能被Java客户端应用程序或外部Web容器用到的jar文件。 
      docs:保存在JBoss中引用到的XML文件和DTD文件(这里也提供了在JBoss中如何写配置文件的例子)。该目录下有针对不同的数据库(如MySql、Oracle、SQL  Server、Postgres等)配置数据源的JCA配置文件。 
      lib:一些 JAR,JBoss 启动时加载,且被所有 JBoss 配置共享。(不要把你的库放在这里) 
      server: 这里的每一个子目录对应着一个服务器配置。该配置由运行脚本文件时的参数"-c  <配置名称>"来确定。在server目录下有三个配置例子,即all、default和minimal,每一个配置安装的服务都不一样。 其中default下是缺省配置。

minimal:仅加载启动JBoss所需的最少服务,如日志服务、JNDI和URL部署扫描器(发现新的部署),不包含Web容器、EJB和JMS。 
     all:启动所有的服务,包括RMI/IIOP、集群服务和Web服务部署器(默认配置不会被加载)。 
启动JBoss时,如果run.bat不带任何参数,则使用的配置是server/default目录下的配置。如果要以其它目录下的配置启动JBoss,可以使用如下参数: 
run    -c    all 
上述命令将以all目录下的配置信息启动JBoss。也可以在server目录下新建目录,按自己的需要写配置文件。

下面以default目录为例,介绍服务器配置的目录结构。 
     conf:该目录下有指定核心服务的jboss-service.xml文件,也可以放其它服务配置的文件。 
     data:该目录是JBoss内置的数据库Hypersonic存储数据的地方,也是JBossMQ(the  JBoss  implementation  of  JMS)存储相关信息的地方。 
     deploy: 这是部署J2EE应用程序(jar、war和ear文件)的位置,只需将相应文件拷贝到该目录下即可。该目录也用来热部署服务和JCA资源适配器。已经有 一些服务部署到这个目录了,如jmx-console,你启动JBoss后即可访问。JBoss会周期性的扫描deploy目录,当有任何组件改 变,JBoss会重新部署该程序。 
     lib:存放服务器配置所需的jar文件,比如,你可以将JDBC驱动程序放在该目录下。 
     log:存放日志信息。JBoss使用Jakarta  log4j包存储日志,在程序中你也可以直接使用该信息。 
    tmp:存储在部署过程中解压时产生的临时文件。 
    work:Tomcat编译JSP文件时的工作目录。 
目录data、log、tmp和work在JBoss安装后并不存在,当JBoss运行时自动建立。 
另外,连接数据库所用到的JDBC驱动程序要拷贝到JBoss_HOME /server /default /lib  目录下。

3.  JBoss中的部署 
  JBoss中的部署过程非常的简单、直接并且支持热部署。在每一个配置中,JBoss不断的扫描一个特殊的目录的变化:$JBOSS_HOME/server/config-name/deploy。 
  你可以把下列文件拷贝到此目录下: 
      *  任何jar库(其中的类将被自动添加到JBoss的classpath中) 
      *  EJB  JAR 
      *  WAR  (Web  Appliction  aRrchive)  注意默认情况下context为war名称. 
      *  EAR  (Enterprise  Application  aRchive) 
      *  包含JBoss  MBean定义的XML文件 
      *  一个包含EJB  JAR、WAR或者EAR的解压缩内容,并以.jar、.war或者.ear结尾的目录

二、实体 Bean发布前的准备工作
1、配置数据源XML并放置在[jboss安装目录]/server/default/deploy目录,
数据库驱动Jar包放置在[Jboss安装目录]\server\default\lib 目录下,
放置后需要重启Jboss服务器。如果数据源已经存在就不需要配置。
2、配置 persistence.xml文件,在文件中指定使用的源据源及各项参数。
3、把实体类和 persistence.xml文件打成 Jar,persistence.xml放在 jar文件的 META-INF目录

各种数据库的数据源配置模版你可以在[Jboss安装目录]\docs\examples\jca目录中找到,默认名称为:数据库名+ -ds.xml 。

三、日志文件设置
若需要修改JBoss默认的log4j设置,可修改JBoss安装目录"server\default\conf下的jboss-log4j.xml文件,在该文件中可以看到,log4j的日志输出在JBoss安装目录server\default\log下的server.log文件中。

不同应用生成到不同日志文件

  1. <!-- 应用日志输出 -->
  2. <appender name="LIGHTESB" class="org.jboss.logging.appender.DailyRollingFileAppender">
  3. <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  4. <param name="File" value="${jboss.server.log.dir}/lightesb.log"/>  <!-- 就改了生成文件名称 -->
  5. <param name="Append" value="true"/>
  6. <param name="DatePattern" value="'.'yyyy-MM-dd"/>
  7. <layout class="org.apache.log4j.PatternLayout">
  8. <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
  9. </layout>
  10. </appender>
  11. <appender name="WS" class="org.jboss.logging.appender.DailyRollingFileAppender">
  12. <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  13. <param name="File" value="${jboss.server.log.dir}/webservice.log"/>
  14. <param name="Append" value="true"/>
  15. <param name="DatePattern" value="'.'yyyy-MM-dd"/>
  16. <layout class="org.apache.log4j.PatternLayout">
  17. <param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n"/>
  18. </layout>
  19. </appender>
  20. <!-- 应用日志输出 -->
  21. <category name="com.soa.lightesb">
  22. <priority value="DEBUG"/>
  23. <appender-ref ref="LIGHTESB"/>
  24. </category>
  25. <!--服务日志输出 -->
  26. <category name="com.soa.ws">
  27. <priority value="DEBUG"/>
  28. <appender-ref ref="WS"/>
  29. </category>

修改jboss日志级别

由于JBOSS日志文件占用的空间太大,需要修改日志文件记录信息的级别

JBOSS服务中的记录日志文件:jboss-log4j.xml,修改<param name="Threshold" value="ERROR"/>

具体的value值有:DEBUG,INFO,WARN,ERROR.

JBOSS启动时加载顺序:

总结:

$JBOSS_HOME/common/lib  =》 deployer目录下应用或者服务(包括配置的全局过滤器) =》 deploy下的数据源、队列和应用等

JBOSS每次发布的时候都会生成一些临时文件到\server\default\tmp\deploy下面去

JBOSS的机制就是,发布的时候将\server\default\deploy下面的一些基础的应用一起发布,而这些基础应用发布在temp的临时目录下,是作为所有应用的基础包,也就是说这些包的优先级要高于每个普通应用的包的。

需要注意的是:JBOSS在加载自带的核心JAR之后,将会优先加载下面的两个目录

1、D:\jboss\server\default\lib

2、D:\jboss\server\default\tmp\deploy

其中1会在2之前加载,而目录2是发布某个WAR,EAR,EJB等应用之后生成的临时的jar,这些应用的所有JAR会生成诸如temp*.jar的形式。本文开头提到的错误也就是在目录1中存在一个spring.jar的包,优先于各个应用的spring.jar包。

从JBOSS启动的问题谈及JBOSS中jar的加载顺序

 Jboss 5启动后只能从本机访问,不能从远程访问的解决办法

用netstat –na   查看,发现绑定到127.0.0.1上:

tcp        0      0 127.0.0.1:8080

D:\jboss-5.1.0.GA\server\default\deploy\jbossweb.sar\server.xml中的:

  1. <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}"
  2. connectionTimeout="20000" redirectPort="8443" />

将${jboss.bind.address}修改为0.0.0.0即可

JBOSS配置数据源后的访问

  1. package com.test;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import java.util.logging.Logger;
  7. import javax.naming.Context;
  8. import javax.naming.InitialContext;
  9. import javax.naming.NamingException;
  10. import javax.sql.DataSource;
  11. public class JDBCUtil {
  12. private final static Logger logger = Logger.getLogger(JDBCUtil.class.getName());
  13. // 数据源
  14. private static DataSource ds;
  15. private static String dsName = "java:/datasources/visesbdb";
  16. static {
  17. try {
  18. Context ctx = new InitialContext();
  19. ds = (DataSource)ctx.lookup(dsName);
  20. } catch (NamingException e) {
  21. logger.warning("Can not lookup the data source which named : " + dsName);
  22. e.printStackTrace();
  23. }
  24. }
  25. /**
  26. * 获取数据库连接
  27. *
  28. * @return 数据库连接/null
  29. */
  30. public static Connection getConnection(){
  31. Connection conn = null;
  32. if(ds != null){
  33. try {
  34. conn = ds.getConnection();
  35. } catch (SQLException e) {
  36. logger.warning("Get Connection failed ...");
  37. e.printStackTrace();
  38. }
  39. }
  40. return conn;
  41. }
  42. /**
  43. * 关闭数据库连接
  44. *
  45. * @param conn
  46. */
  47. public static void closeConnection(Connection conn){
  48. if(conn != null){
  49. try {
  50. conn.close();
  51. } catch (SQLException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. }
  56. /**
  57. *
  58. * 通过查询sql获取结果集中第一行,第一列的值
  59. *
  60. * @param 查询sql
  61. * @return
  62. */
  63. public static Object QueryUniqueResult(String query){
  64. Object result = null;
  65. Connection conn = getConnection();
  66. if(conn != null){
  67. try {
  68. PreparedStatement ps = conn.prepareStatement(query);
  69. ResultSet rs = ps.executeQuery();
  70. if(rs.next()){
  71. result = rs.getObject(1);
  72. }
  73. } catch (SQLException e) {
  74. logger.warning("execute query has error ...");
  75. e.printStackTrace();
  76. }
  77. }
  78. closeConnection(conn);
  79. return result;
  80. }
  81. }
  1. package com.test;
  2. import javax.servlet.ServletContextEvent;
  3. import javax.servlet.ServletContextListener;
  4. public class TestContextListener implements ServletContextListener{
  5. public void contextInitialized(ServletContextEvent sce) {
  6. int access = 1;
  7. try {
  8. access = Integer.parseInt(JDBCUtil.QueryUniqueResult("SELECT T.CONFIG_VALUE FROM SYS_CONFIG T WHERE T.CONFIG_NAME = 'SRV_PARAMETER_CHECK_ACCESS'").toString());
  9. } catch (Exception e) {
  10. }
  11. System.out.println(access);
  12. }
  13. public void contextDestroyed(ServletContextEvent sce) {
  14. // TODO Auto-generated method stub
  15. }
  16. }

配置好数据源XML后可直接访问。

jboss会自动查找server/default/deploy目录下 **-ds.xml文件.并读取其中内容.来得到相应DataSource

上例数据库XML放在:server\default\deploy\datasources\visesbdb-ds.xml:

内部JNDI名字为:

<datasources>

<local-tx-datasource>

<jndi-name>datasources/visesbdb</jndi-name>

...

过滤器

WEB工程的FIiter需配到自己的web.xml中
JAVA工程无法定义Filter
EJB工程可以定义Filter,可以作为JBOSS的全局过滤器使用。

全局过滤器配置在server\default\deployers\jbossweb.deployer\web.xml中:

  1. <filter>
  2. <filter-name>mainFilter</filter-name>
  3. <filter-class>com.project.filter.MainFilter</filter-class>
  4. </filter>
  5. <filter-mapping>
  6. <filter-name>mainFilter</filter-name>
  7. <url-pattern>/*</url-pattern>
  8. </filter-mapping>
  1. /**
  2. * 该过滤器是一个全局的过滤器,过滤所有经过访问J2EE服务器的请求
  3. */
  4. public class MainFilter implements Filter {
  5. private static final Logger logger = LoggerFactory.getLogger(MainFilter.class);
  6. private ControlService cs = new ControlServiceImpl();
  7. @Override
  8. public void destroy() {
  9. InstanceInfo.filterIsUp = false;
  10. }
  11. @Override
  12. public void doFilter(ServletRequest req, ServletResponse res,
  13. FilterChain chain) throws IOException, ServletException {
  14. // 提取请求相关信息
  15. String requestURI = ((HttpServletRequest)req).getRequestURI();
  16. String ip = ServletUtils.getRequestIP((HttpServletRequest)req);
  17. // 当前时间[yyyy-MM-dd hh:mm:ss.SSS] 请求IP[IP] 请求地址[requestURI]
  18. logger.debug("[" + ip + "][" + requestURI + "]");
  19. // 只对SOAP请求做这些特殊操作
  20. // 判断是否是SOAP请求
  21. // 判断是否是Rest请求
  22. if(ServletUtils.isSoapRequest((HttpServletRequest)req) || ProxyServiceUtils.isRestRequest(((HttpServletRequest)req).getRequestURI())){
  23. // 记录所有访问的服务
  24. logger.info("[" + ip + "][" + requestURI + "]");
  25. // 获取服务英文名称
  26. String serviceNameEn = ProxyServiceUtils.getServiceNameByRequestUri(requestURI);
  27. // 服务鉴权
  28. if(cs.accessAuth(serviceNameEn, ip)){
  29. // 生成实例ID
  30. String uuid = InstanceInfo.getInstanceUUID();
  31. // 日志开关 1 为开启,0为关闭
  32. if("1".equals(Config.getConfigByName("log.switch"))){
  33. logger.debug("log switch is on...");
  34. // 封装请求对象
  35. RequestData rd = InstanceInfo.getRequestData();
  36. rd.setInstanceUUID(uuid);
  37. // 设置当前调用时间
  38. rd.setDate(new Date(System.currentTimeMillis()));
  39. rd.setServiceNameEn(serviceNameEn);
  40. rd.setRequestURI(requestURI);
  41. rd.setIp(ip);
  42. // 设置测试标志
  43. String testFlag = ((HttpServletRequest)req).getHeader("@test_flag");
  44. if(testFlag != null && com.project.ws.constants.Constants.HTTPREQUEST_FOR_TEST_SERVICE.equals(testFlag.trim())){
  45. rd.setIsTest(com.project.soa.ws.constants.Constants.HTTPREQUEST_FOR_TEST_SERVICE);
  46. }
  47. // 输入输出做封装处理用来获取输入输出
  48. HttpServletRequestWrapper reqw = new HttpServletRequestWrapper((HttpServletRequest)req);
  49. HttpServletResponseWrapper resw = new HttpServletResponseWrapper((HttpServletResponse)res);
  50. chain.doFilter(reqw, resw);
  51. }else{
  52. chain.doFilter(req, res);
  53. }
  54. InstanceInfo.removeInstanceUUID();
  55. }else{
  56. res.setContentType("text/xml;charset=UTF-8");
  57. res.getWriter().write(SoapUtils.getAuthSoapMsg());
  58. }
  59. }else{
  60. chain.doFilter(req, res);
  61. }
  62. }
  63. @Override
  64. public void init(FilterConfig config) throws ServletException {
  65. InstanceInfo.filterIsUp = true;
  66. }
  67. }

转载地址:http://uule.iteye.com/blog/2043770

[转]Jboss基础的更多相关文章

  1. Jboss基础及简单的应用

    初学Jboss,对于Jboss的基础认识以及配置做一些记录 Jboss基础: JBoss是什么–基于J2EE的应用服务器–开放源代码–JBoss核心服务不包括支持servlet/JSP的WEB容器,一 ...

  2. 转载---jboss简单使用

    初学Jboss,对于Jboss的基础认识以及配置做一些记录 Jboss基础: JBoss是什么–基于J2EE的应用服务器–开放源代码–JBoss核心服务不包括支持servlet/JSP的WEB容器,一 ...

  3. Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题

    现互联网公司后端架构常用到Spring+SpringMVC+MyBatis,通过Maven来构建.通过学习,我已经掌握了基本的搭建过程,写下基础文章为而后的深入学习奠定基础. 首先说一下这篇文章的主要 ...

  4. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  5. J2EE基础之EJB

    J2EE基础之EJB 1.什么是EJB?       EJB(Enterprise Java Beans),是JavaEE中的商业应用组件技术,是JavaEE三大组件(Servlet,JSP,EJB) ...

  6. 帆软报表FineReport中数据连接之Jboss配置JNDI连接

    使用sqlsever 2000数据库数据源来做实例讲解,帆软报表FineReport数据连接中Jboss配置JNDI大概的过程和WEBSPHERE以及WEBLOGIC基本相同,用JDBC连接数据库制作 ...

  7. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

  8. Jboss EAP:native management API学习

    上一节已经学习了CLI命令行来控制JBOSS,如果想在程序中以编码方式来控制JBOSS,可以参考下面的代码,实际上在前面的文章,用代码控制Jboss上的DataSource,已经有所接触了,API与C ...

  9. 如何让jboss eap 6.2+ 的多个war应用共享 jar 包?

    weblogic有一个很贴心的功能,允许把多个war应用共同依赖的jar包,打包一个单独的war,以libary方式部署,然后各应用在weblogic.xml里声明引用该libary即可,这样可大大减 ...

随机推荐

  1. 通过powerdesiner导出sql,通过sql转mysql为oracle

    1.导出sql文件 Database-->generate database-->确定 执行完就可以看到生成的语句了 2.将mysql的PDM转换为oracle File-->rev ...

  2. C++类构造函数初始化列表(转)

    构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: { public:     int a;     float b;     //构 ...

  3. 前端select动态加载

    <select id ="ycode" cssclass="form-control selectpicker" name="ydljgId&q ...

  4. 在html5中不支持<table>的cellpadding 和 cellspacing ; 2) 如何用css实现 cellpadding, cellspacing ; 3) tr , th 是 有 border, 没有 padding 的.

    1.初始: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  5. ChinaCock界面控件介绍-CCLoadingIndicator

    这是一个显示等待状态的控件,当在线程中执行一个稍长时间的任务,需要显示一个等待过程,免得让用户不知app在做什么?避免用户寂寞. 先看看这个控件的属性说明: BackgroundTransparenc ...

  6. 原根的存在性及个数证明(Primitive Root Theorem)

    我在RSA学习总结的第三部分关于Mille-Rabin素数测试的正确性证明里需要用到此定理,由于证明太长,故另开一章于此.(为啥我说话突然文绉绉了Orz,可能是这周辩论打多了) 结论是对素数p,mod ...

  7. READ–IT: Assessing Readability of Italian Texts with a View to Text Simplification-paper

    https://aclanthology.info/pdf/W/W11/W11-2308.pdf 2 background2000年以前 ----传统可读性准则局限于表面的文本特征,例如the Fle ...

  8. linux zip tar 压缩打包命令

    zip 压缩命令:(可压缩文件或目录) 压缩文件: zip new_name.zip  file_name unzip name.zip   解压 压缩文件或目录: 指定解压位置: unzip  na ...

  9. Brute Force Sorting(HDU6215)

    题意:给你长度为n的数组,定义已经排列过的串为:相邻两项a[i],a[i+1],满足a[i]<=a[i+1].我们每次对当前数组删除非排序过的串,合并剩下的串,继续删,直到排序完成. 题解:用双 ...

  10. django HttpResponse的用法

    一.传json字典 def back_json(rquest): #JsonResponse父类是HttpResponse,原码里调用了json.dumps() from django.http im ...