增加log4j...
首先将Hello.java改成:
package com.rox;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import org.apache.log4j.Logger;
/**
* XDoclet-based session bean. The class must be declared
* public according to the EJB specification.
*
* To generate the EJB related files to this EJB:
* - Add Standard EJB module to XDoclet project properties
* - Customize XDoclet configuration for your appserver
* - Run XDoclet
*
* Below are the xdoclet-related tags needed for this EJB.
*
* @ejb.bean name="Hello"
* display-name="Name for Hello"
* description="Description for Hello"
* jndi-name="ejb/Hello"
* type="Stateless"
* view-type="remote"
*/
public class Hello implements SessionBean {
/** The session context */
private SessionContext context;
private final Logger log = Logger.getLogger(Hello.class);
public Hello() {
super();
// TODO Auto-generated constructor stub
}
/**
* Set the associated session context. The container calls this method
* after the instance creation.
*
* The enterprise bean instance should store the reference to the context
* object in an instance variable.
*
* This method is called with no transaction context.
*
* @throws EJBException Thrown if method fails due to system-level error.
*/
public void setSessionContext(SessionContext newContext)
throws EJBException {
context = newContext;
log.info("setSessionContext");
}
public void ejbCreate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
log.info("ejb create");
}
public void ejbRemove() throws EJBException, RemoteException {
// TODO Auto-generated method stub
log.info("ejb remove");
}
public void ejbActivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
log.info("ejb activate");
}
public void ejbPassivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
log.info("ejb passivate");
}
/**
* An example business method
*
* @ejb.interface-method view-type = "remote"
*
* @throws EJBException Thrown if method fails due to system-level error.
*/
public String sayIt() throws EJBException {
log.info("hello didi");
return "hello didi.";
}
}
上面org.apache.log4j.Logger类继承自org.apache.log4j.Category类,log4j有三个重要的组件:categories, appenders和layouts.categories有各种方法来发送日志信息,可以将日志信息发送到控制台,文件,socket....,而这些终端就被称为appenders,可以理解为往内容中"append"的意思,layouts就是日志信息的格式,例如HTMLLayout就是html的格式.
log4j输出日志是分级别(priority)的:debug,info,warn,error,fatal.这五个级别的等级由低到高,即如果配置文件的日志级别设置为debug时,所有log信息都会输出;而如果设置为fatal时只有fatal信息会输出,并且程序会终止运行.
当运行EjbTest类时,会在控制台打印出:
11:43:00,587 INFO [Hello] setSessionContext
11:43:00,587 INFO [Hello] ejb create
11:43:00,603 INFO [Hello] hello didi
1.从输出信息也可以看出无状态bean的回调方法(容器调用的方法)中,ejbActivate,ejbPassivate是不会被调用的.
2.如果再次调用EjbTest,控制台中只会输出
11:43:00,603 INFO [Hello] hello didi
这说明jboss直接从缓存中取出已经实例化的ejb对象,而不是重新实例化.
3.如果将Hello.jar从deploy中移出,控制台将会输出ejb remove的信息.
如果要更改日志的输出级别,请更改jboss中deploy同级的conf目录中的log4j.xml.找到如下语句:
<appender class="org.apache.log4j.ConsoleAppender" name="CONSOLE"></appender>
<errorhandler class="org.jboss.logging.util.OnlyOnceErrorHandler"></errorhandler>
INFO
"/>
<layout class="org.apache.log4j.PatternLayout"></layout>
<!---->
%d{ABSOLUTE}
%-5p [%c{1}] %m%n"/>
将红色的INFO替换成其他的级别即可,jboss过几秒钟就会自动侦测到log4j.xml的变化,自动进行配置.
如果要改变日志输出的样式,可以改变以上内容中的兰色部分,假如去掉%-5p,你将会发现日志输出中将没有日志级别的信息.
好了,到此日志输出部分划上句号,下一步将研究配合entiyBean使用.
分享到:
相关推荐
EJB是Java EE规范的一部分,它提供了一种标准的方式来实现业务逻辑,分为三种主要类型:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-Driven Beans)。会话Bean用于处理客户端请求...
10. **其他辅助库**:比如日志框架(如`log4j.jar`)、连接池(如`c3p0.jar`)、JSON处理(如`json-lib.jar`)等。 使用这些jar文件,开发者可以在本地环境中设置EJB3.0开发环境,或者将它们打包到最终的应用程序中...
- 日志配置通常在`server/[config]/log`目录下的`jboss-log4j.properties`文件中进行设置。开发者可以根据需求调整日志级别、输出格式等。 **2. web服务的端口号的修改** - 修改端口号主要在`server/[config]/conf...
10. **测试与调试**:学习使用JUnit对Action和EJB进行单元测试,以及如何使用日志工具(如Log4j)进行调试。 通过这个模拟项目,开发者可以深入理解Struts1.1和EJB在实际项目中的配合使用,提升在Java Web开发领域...
- `slf4j-log4j12-1.5.8.jar`: SLF4J到Log4J的桥接。 - `slf4j-simple-1.5.8.jar`: 简单的日志实现。 - `annotation3.4.jar`: 注解支持。 - `ejb3-persistence.jar`: EJB3持久化支持。 - `hibernate-annotations.jar...
6. **slf4j-api.jar**和相应的实现库(如slf4j-log4j12.jar):Simple Logging Facade for Java (SLF4J) 提供了一种抽象层,允许开发者选择不同的日志框架作为其应用程序的日志解决方案。log4j则是具体的日志实现库...
- Apache Log4j 1.2。 - JSP Standard Tag Library (JSTL) 1.0的一个实现。 #### 内容概览 - **引言**:介绍J2EE的基本概念、目标读者以及本书的组织结构。 - **第1章:J2EE架构**:详细讨论J2EE平台提供的多种...
其他必要的软件包括Apache Log4j 1.2以及JSP标准标签库(JSTL)1.0的实现。 #### 二、主要内容概览 本书由Rod Johnson撰写,全面涵盖了J2EE设计与开发的关键技术方面。书中包含了以下核心章节: 1. **J2EE架构**...
3. **EJB技术**:深入剖析EJB3.x规范,涵盖无状态会话Bean、有状态会话Bean、实体Bean(容器管理的持久化和bean管理的持久化)以及消息驱动Bean的开发和部署。 4. **JMS与消息传递**:讲解如何利用JMS进行异步通信...
- Apache Log4j 1.2:用于日志记录,帮助开发者更好地追踪和调试应用程序。 - JSP Standard Tag Library (JSTL) 1.0:JSTL是一种标准的JSP标签库,用于简化JSP页面中的脚本代码。 #### 二、J2EE架构与项目选择 -...
- **Log4J**:掌握日志记录工具的使用,记录程序运行时的重要信息。 - **Quartz**:学习任务调度框架的使用,实现定时任务。 ### 20. 分布式缓存与搜索 - **JCache**:了解分布式缓存的实现方法。 - **Lucene**:...
Java企业级开发是一个涵盖广泛的领域,它涉及到使用Java语言构建大型、可扩展、高可用性的应用程序,这些应用程序通常运行在分布式环境中,如大型服务器集群。本压缩包“JAVA企业级开发.zip”包含了与这一主题相关的...
例如,EnterpriseJavaBean(EJB)由容器管理,可以是无状态的SessionBean,也可以是有状态的StatefulSessionBean,前者不保存请求状态,后者则为每个客户端保留状态。ManagedBean通过CDI(Context and Dependency ...