了解这个例子的前提是对jboss的熟悉,和对ejb的略微了解。
Hello.jar的文件组织是这样的:
1.三个类
com.rox.Hello(SessionBean)
com.rox.HelloHome(EJBHome,接口)
com.rox.HelloWorld(EJBObject,接口)
2.配置文件
META-INF
ejb-jar.xml
jboss.xml
直接把Hello.jar放入jboss的运行目录(deploy)中,配置成功.
以下是各个文件的内容:
Hello.java:
package com.rox;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
/**
* 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;
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;
}
public void ejbCreate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
System.out.println("ejb create");
}
public void ejbRemove() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void ejbActivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
public void ejbPassivate() throws EJBException, RemoteException {
// TODO Auto-generated method stub
}
/**
* 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 {
System.out.println("hello didi");
return "hello didi.";
}
}
HelloHome.java:
package com.rox;
/**
* Home interface for Hello.
* @xdoclet-generated at ${TODAY}
* @copyright The XDoclet Team
* @author XDoclet
* @version ${version}
*/
public interface HelloHome
extends javax.ejb.EJBHome
{
public static final String INITIAL_NAME="ejb/HelloWorld";
public static final String COMP_NAME="java:comp/env/ejb/HelloWorld";
public static final String JNDI_NAME="ejb/HelloWorld";
public com.rox.HelloWorld create()
throws javax.ejb.CreateException,java.rmi.RemoteException;
}
HelloWorld.java:
package com.rox;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
public interface HelloWorld extends EJBObject{
public String sayIt() throws RemoteException;
}
ejb-jar.xml:
<!---->
<!---->http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar></ejb-jar>
<description></description>
<display-name></display-name>Generated by XDoclet
<enterprise-beans></enterprise-beans>
<!---->
<session></session>
<description></description>
<display-name></display-name>Name for Hello
<ejb-name></ejb-name>HelloWorld
<home></home>com.rox.HelloHome
<remote></remote>com.rox.HelloWorld
<ejb-class></ejb-class>com.rox.Hello
<session-type></session-type>Stateless
<transaction-type>
</transaction-type>
Container
<!---->
<!---->
<!---->
<!---->
<!---->
<!---->
<!---->
<!---->
<assembly-descriptor></assembly-descriptor>
<!---->
<!---->
<!---->
<!---->
<!---->
<!---->
<!---->
<!---->
<!---->
<!---->
jboss.xml:
<!---->
<!---->http://www.jboss.org/j2ee/dtd/jboss_2_4.dtd">
<jboss></jboss>
<enterprise-beans></enterprise-beans>
<!---->
<session></session>
<ejb-name></ejb-name>HelloWorld
<jndi-name></jndi-name>ejb/HelloWorld
<!---->
<resource-managers></resource-managers>
<!---->
只是配置完了,服务器没有报错,并不能说明问题.下面我们写一个测试的客户端程序EjbTest.java:
package com.rox;
import java.rmi.RemoteException;
import java.util.Hashtable;
import java.util.Properties;
import javax.ejb.CreateException;
import javax.naming.Context;
import javax.naming.NamingException;
public class EjbTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
javax.naming.InitialContext initialContext = null;
Properties environment = new Properties();
environment.put(Context.PROVIDER_URL, "localhost:1099");
environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
environment.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
try {
initialContext = new javax.naming.InitialContext(environment);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return;
}
HelloHome helloHome = null;
try {
Object obj = initialContext.lookup("ejb/HelloWorld");
helloHome = (HelloHome)javax.rmi.PortableRemoteObject.narrow(obj, HelloHome.class);
} catch (ClassCastException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
HelloWorld hello = helloHome.create();
System.out.println(hello.sayIt());
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CreateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意:由于上面environment.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
这句话中用到了org.jnp.interfaces.NamingContextFactory类,所以应当确保{JBOSS_HOME}/client下的jbossall-client.jar位于classpath中.
运行EjbTest,输出结果:hello didi.
稍后我将结合该例子研究log4j,据说很简单的
分享到:
相关推荐
3. **EJB2.0的Helloworld实例**:在EJB2.0的Helloworld示例中,我们通常会创建一个简单的会话bean,提供一个方法,如“sayHello”。客户端通过JNDI(Java Naming and Directory Interface)查找bean并调用该方法。这...
在"一个完整的Helloworld"示例中,通常会创建一个简单的Stateless Session Bean,实现一个返回“Hello, World!”的业务方法。客户端通过查找Bean的Home Interface并调用其`create()`方法获取Bean实例,然后调用...
例如,你可以声明一个无状态session bean如下: ```xml <enterprise-beans> <session> <ejb-name>MyBean</ejb-name> <ejb-class>com.example.MyBeanImpl</ejb-class> <session-type>Stateless</session-type> ...
在这个例子中,`@Stateless`注解声明了这是一个无状态Session Bean,`doSomething`方法展示了如何暴露业务逻辑。 **结论** EJB 3.0的Session Bean为开发企业级应用提供了强大且灵活的工具。通过理解其核心概念和...
第一章 前言......4 1.1 本教程适合人群4 1.2 联系作者..4 第二章运行环境配置4 2.1 下载与安装........4 2.2 运行一个EJB3例子.......9 2.3 在独立的TOMCAT 中调用EJB....9 2.4 发布在JBOSS集成环境中的WEB应用调用...
这个版本,jboss-4.2.3.GA-jdk6,是专为Java 6环境设计的,它在JBoss AS(Application Server)4.x系列中是一个稳定且广泛使用的版本。本文将深入探讨JBoss EJB服务器的核心特性、主要功能以及如何部署和管理EJB组件...
第一章 前言......4 1.1 本教程适合人群4 1.2 联系作者..4 第二章运行环境配置4 2.1 下载与安装........4 2.2 运行一个EJB3例子.......9 2.3 在独立的TOMCAT 中调用EJB....9 2.4 发布在JBOSS集成环境中的WEB应用调用...
- **无状态会话Bean**:创建一个简单的无状态会话Bean,实现业务逻辑。 - **实体Bean**:创建一个实体Bean来表示数据库中的表。 - **消息驱动Bean**:实现一个消息驱动Bean来处理来自JMS队列的消息。 #### 五、...
然后,创建一个无状态Session Bean: 1. 新建SessionBean,比如名为UserServiceBean。 2. 选择包名(如zizz.ejb),并在Name字段输入Bean的名称。 3. 选择Bean类型为Stateless,表示这是一个不保存会话状态的Bean。 ...
3. **无状态会话Bean(Stateless Session Beans)**:提供简单的函数式服务,不保存客户端状态。 4. **有状态会话Bean(Stateful Session Beans)**:维护客户端状态,允许在多个方法调用之间保持数据。 5. **消息...
为了验证Session Bean的功能,我们可以通过创建一个简单的Servlet来调用Session Bean的方法。在JBuilder2007中新建一个动态Web项目,然后创建一个Servlet,通过编写相应的代码来调用Session Bean中的`sayHello()`...
这个简单的示例展示了如何创建一个无状态会话Bean并从`Test.jsp`页面中调用它的方法。在实际项目中,`Test.jsp`可能会包含更复杂的逻辑来测试bean的各种功能。 总之,EJB3的有状态和无状态会话Bean提供了灵活的业务...
本文将深入探讨如何使用EJB 2.0有状态Session Bean与Hibernate 3.0来构建一个书店系统,实现购物车和书籍详细信息管理等功能。 **EJB 2.0有状态Session Bean** EJB 2.0是Java EE(Java Platform, Enterprise ...
本篇文章将指导你如何使用JBoss7.1和EJB3.1在Eclipse3.7环境中创建你的第一个EJB项目。EJB(Enterprise JavaBeans)是一种Java平台上的组件模型,用于构建可扩展的、可靠的、安全的企业级应用。JBoss是Red Hat公司...
【ejb-jboss-web实例的workspace】是一个专用于开发和部署EJB(Enterprise JavaBeans)与Web应用程序的工作环境,基于JBoss应用服务器。这个工作空间集合了开发所需的各种组件、配置文件以及源代码,便于开发者进行...
4.1 STATELESS SESSION BEANS(无状态BEAN)开发..................................................................................................13 4.1.1 开发只存在Remote接口的无状态Session Bean ..........
1. 无状态会话Bean:适用于一次性的、与特定客户上下文无关的操作,如计算或查询。 2. 有状态会话Bean:维护与特定客户端的会话状态,可以存储客户数据并在多个方法调用之间保持状态。 三、Jboss EJB开发环境 Jboss...
EJB主要用于构建可部署在Java EE服务器上的分布式组件,而Hibernate是一个强大的对象关系映射(ORM)框架,解决了Java与数据库之间交互的问题。本文将详细讲解如何在JBoss应用服务器上整合Hibernate和EJB。 **一、...