`
nything
  • 浏览: 145019 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jboss下的第一个EJB程序

阅读更多

好久没写了,以前也只在weblogic下写过,凭记忆写了一个例子,虽然很小,但是为了调这个东西,走了很多弯路,呵呵,写出来分享一下

1.编写一个主接口,创建组件接口的接口
package com.EJB.interfaces;

public interface HelloWorldHome extends javax.ejb.EJBHome{
 HelloWorld create() throws java.rmi.RemoteException,javax.ejb.CreateException;
}
2.编写一个组件接口,被客户端使用的接口
package com.EJB.interfaces;

public interface HelloWorld extends javax.ejb.EJBObject{

 public String getHello() throws java.rmi.RemoteException;
}
3.编写组件接口的实现,即具体的逻辑
package com.EJB.impl;

import java.rmi.RemoteException;

import javax.ejb.EJBException;
import javax.ejb.SessionContext;

public class HelloWorldImpl implements javax.ejb.SessionBean{

 /*hello方法是实际的业务逻辑,它可以在客户端显示“hello,world”这个字符串*/
 public String getHello() throws EJBException, RemoteException {
  System.out.println("getHello()");
  return "hello,worldasdfasdfasdf";
 }

 public void ejbActivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub
  
 }

 public void ejbPassivate() throws EJBException, RemoteException {
  // TODO Auto-generated method stub
  
 }

 public void ejbRemove() throws EJBException, RemoteException {
  // TODO Auto-generated method stub
  
 }

 public void setSessionContext(SessionContext arg0) throws EJBException,
   RemoteException {
  // TODO Auto-generated method stub
  
 }
 public   void   ejbCreate()   throws   javax.ejb.CreateException{};   //这个东西如果用eclipse的快速修改是不会有这个方法的,如果没有这个方法,部署到jboss会报错的,所以这个需要手工加上。
}
4.编写客户端
package test;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import com.EJB.interfaces.HelloWorld;
import com.EJB.interfaces.HelloWorldHome;

public class Test {
 public static void main(String args[]){
           String url = "127.0.0.1:1099";IP地址加端口号,服务器的地址,Ejb在Jboss上是1099端口
           InitialContext initCtx = null;
             try {
                     Hashtable<String,String> env = new Hashtable<String,String>();
      //设置上下文环境,Context.INITIAL_CONTEXT_FACTORY这个的value根据不同的应用服务器不同而不同,weblogic也提供了自己的类。
                     env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
                     env.put(Context.PROVIDER_URL, url);
                     initCtx = new InitialContext(env);
                     Object obj=initCtx.lookup("FirstEjb");这里的FirstEjb就是jndi名字,在jboss-xml中配置的
                     HelloWorldHome home=(HelloWorldHome)PortableRemoteObject.narrow(obj,HelloWorldHome.class);//用rmi远程方法调用获得主接口
                     HelloWorld hello = home.create();//用主接口创建组件接口
                     String s = hello.getHello();//执行方法
                     System.out.println(s);
            }catch(Exception e){
                     e.printStackTrace();
           }
 }

}

5.部署EJB
    在EJB的项目中,在META-INF中加入ejb-jar.xml,这个就是ejb的描述了,以后jboss启动的时候会找这个项目了文件,进行部署。
jboss.xml是为了更好更简洁的处理本ejb,才加进去的,里面包括jndi的描述。
 进入first/build/classes/下,运行jar -cvf hello.jar *.* 进行打包,然后把这个jar包拷贝到jboss的develop下,运行就可以了。
     ejb-jar.xml:
 <?xml version="1.0" encoding="UTF-8"?>
<ejb-jar id="ejb-jar_ID" version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
 <display-name>First</display-name>
 <enterprise-beans>
  <session>
   <ejb-name>FirstEjb</ejb-name>
   <home>com.EJB.interfaces.HelloWorldHome</home><!--主接口-->
   <remote>com.EJB.interfaces.HelloWorld</remote><!--组件接口-->
   <ejb-class>com.EJB.impl.HelloWorldImpl</ejb-class><!--组件接口的实现-->
   <session-type>Stateless</session-type>
   <transaction-type>Bean</transaction-type>
  </session>
 </enterprise-beans>
</ejb-jar>
 
 jboss.xml:
 <?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>FirstEjb</ejb-name> <!--EJB名称和ejb-jar.xml中的<ejb-name>一样-->
<jndi-name>FirstEjb</jndi-name> <!--jndi路径,被客户端调用是使用的jndi,即可以找到ejb的路径-->
</session>
</enterprise-beans>
</jboss>
 
6.运行EJB
运行客户端,即可获得在屏幕上打印一行hello,world的效果
注意:
运行EJB,最主要就是要分布式,那么如果在同一个项目中编写客户端就没什么意义了,基于这个,下面举一个远程调用的例子:
1.把主接口和组件接口拷贝到要调用EJB的项目中
2.把jbossall-client.jar拷贝到要调用EJB的项目中,要不然会报如下错误
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
 at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
 at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
 at javax.naming.InitialContext.init(Unknown Source)
 at javax.naming.InitialContext.<init>(Unknown Source)
 at test.Test.main(Test.java:20)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Unknown Source)
 at com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
 ... 5 more
3.确定实现和主接口和组件接口分离,不要把实现也拷过去了,那就没啥用了,这里
4.如果报连接不到远程的地址什么的,请检查url中时候包含rmi://,如果有会报错的。


这里讲的很浅,家里的weblogic 的EJB例子比较详细,而且分包的,把接口和实现分成两个包,拷贝起来也方便,可以回去看看。

 

Ref:http://jingfengluo.iteye.com/blog/233971

分享到:
评论

相关推荐

    JBoss下配置和部署EJB英文版.pdf

    《JBoss 3.2 Workbook for Enterprise JavaBeans™, 3rd Edition》为开发者提供了一个全面了解和掌握EJB技术的机会。通过本书的学习,读者不仅可以了解到EJB的基本概念和技术细节,还能掌握如何在JBoss环境下有效地...

    ejb_jboss.rar_ejb mysql_ejb_jboss_estoreW_java ejb jbo_jboss

    这是一个基于EJB(Enterprise JavaBeans)技术的项目,利用了JBuilder作为开发工具,JBoss应用服务器进行部署,以及MySQL数据库存储数据。这个项目名为"ejb_jboss_estoreW",推测是一个电子商务(e-store)平台的...

    J2EE Server下的第一个EJB程序

    本文将详细介绍如何在J2EE服务器下开发和部署第一个EJB程序。 首先,我们需要理解EJB的基本概念。EJB是Java中的一个服务器端组件模型,分为三种类型:会话Bean(Session Beans)、实体Bean(Entity Beans)和消息...

    jboss的安装与ejb的工程的配置(原创)

    - 第一部分是项目的主Jar包,它包含了你的EJB组件代码。 - 第二部分是jBoss客户端库,位于jBoss的“client”目录下,用于客户端调用EJB。 - 第三部分是在项目“src”目录下的`jndi.properties`文件,其中包含了...

    JBOSS6.0.0M4发布EJB3测试

    【JBOSS6.0.0M4发布EJB3测试】这个主题涉及到的是Java企业版(Java EE)中的核心组件——Enterprise JavaBeans (EJB)的第三版(EJB3),以及它在JBoss Application Server 6.0.0 Milestone 4 (JBOSS6.0.0M4)版本中的...

    myeclpise+jboss开发EJB

    创建一个EJB项目是使用MyEclipse进行EJB开发的第一步。这涉及到设置项目的基本属性,如项目名称、源代码目录、构建路径等。通过MyEclipse的图形界面,开发者可以轻松完成这一过程,同时也可以配置项目的编译器版本、...

    Myeclipse+JBoss开发的EJB3.0 一对多程序

    这个“第三次上机作业”可能是实验或项目的一部分,它可能包含了实现EJB3.0一对多关系的具体代码和配置文件。文件中可能包括了实体类、会话Bean以及相应的XML配置文件(如果有的话)。通过分析这些文件,可以深入...

    eclipse + JBoss 5 + EJB3开发指南

    #### (1):编写第一个无状态的SessionBean ##### 一、配置开发环境 在开始编写无状态的SessionBean之前,首先需要确保开发环境已经正确配置。以下是所需的主要组件: 1. **Eclipse**:版本3.4.2,推荐使用针对...

    Myeclipse+JBoss开发的EJB3.0 多对多程序

    在本项目中,"Myeclipse+JBoss开发的EJB3.0 多对多程序" 是一个基于Java EE平台的课程实验,利用EJB3.0(Enterprise JavaBeans 3.0)规范和Myeclipse集成开发环境,以及JBoss应用服务器,实现了数据模型中的多对多...

    Jboss EJB3.0教程

    - 创建一个简单的EJB3项目,并通过JBoss服务器运行。 - 示例代码通常包含基本的Session Bean实现。 - **在Tomcat中调用EJB**: - 解释如何在独立的Tomcat服务器中集成并调用JBoss上的EJB服务。 - **Web应用调用...

    ejb3.0 Jboss安装配置

    **第一种方法:接口和实现类分别配置@Remote和@Stateless** - 定义一个远程接口`SayHello`,并使用`@Remote`注解标记。 ```java package com.tudou.ejb.session; import javax.ejb.Remote; @Remote ...

    Jboss EJB3.0 实例教程.pdf

    - **体系结构图**:展示了一个基于Struts + EJB 3.0的应用程序体系结构,帮助理解各组件之间的交互方式。 - **打包指南**: - **EJB打包**:使用`.jar`文件格式,并提供必要的部署描述符`ejb-jar.xml`。 - **Web...

    完整EJB3.0第一个HelloWord,

    在EJB3.0的第一个"Hello, World"项目中,我们将学习如何创建和配置一个简单的EJB组件。首先,我们需要了解EJB的基本概念。EJB分为三种类型:会话bean(Session Beans)、实体bean(Entity Beans)和消息驱动bean...

    J2EE - JBoss - EJB with Eclipse

    综上所述,《J2EE - JBoss - EJB with Eclipse》这一主题涵盖了从Java EE基础,到EJB设计与开发,再到Eclipse集成开发环境下的实战应用,是学习和理解企业级Java开发的重要参考资料。通过深入学习和实践,开发者可以...

    JBOSS EJB3.0实例教程

    - 创建一个简单的EJB3项目,并通过JBoss服务器运行它。这个例子应该包括基本的无状态会话Bean的创建和调用。 - 使用JBoss提供的工具和文档来指导这一过程。 **2.3 在独立的TOMCAT中调用EJB** - 配置TOMCAT使其能够...

    EJB初学者PPT及JBOSS包下载

    在"8-14"这个文件列表中,可能包含了从第8章到第14章关于EJB和JBOSS的详细讲解,覆盖了EJB的各个方面,包括理论知识、实践操作以及相关示例,是初学者理想的自学资料。建议按照章节顺序逐步学习,结合实际操作加深...

Global site tag (gtag.js) - Google Analytics