`
jingfengluo
  • 浏览: 44472 次
  • 性别: 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例子比较详细,而且分包的,把接口和实现分成两个包,拷贝起来也方便,可以回去看看。

分享到:
评论
4 楼 yangpanwww 2009-07-31  
EJB 好 还是 Webservce 好?
3 楼 jingfengluo 2008-08-28  
哈哈,无聊写写,我是穿越过来的
2 楼 cyberblue 2008-08-28  
一般出现这种问题是因为客户端的classpath里没有org.jnp.interfaces.NamingContextFactory这个类。
1 楼 cyberblue 2008-08-28  
楼主从远古走来。

相关推荐

    eclipse + JBoss 5 + EJB3开发指南

    (1):编写第一个无状态的SessionBean 2 一、配置开发环境 2 二、开发无状态Session Bean 3 三、编写客户端程序 5 (2):编写有状态的SessionBean 7 (3):使用Session Bean的本地接口 9 (4):Session Bean中的...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

     本书内容主要包括三部分,第一部分介绍java ee开发的基础知识,以及如何搭建开发环境,包括安装jboss、weblogic应用服务器,以及如何使用svn、netbeans等。第二部分详细讲解了jsf ri、jta、jndi、rmi、jms、...

    J2EE JNDI配置原理详解 JBOSS安装配置 Maven入门 Ant使用入门

    1.1 Apache Tomcat各版本 1.2 Apache Tomcat Versions ...1.20 Jboss下的第一个EJB程序 1.21 JNDI 1.22 JNDI配置原理详解 1.23 JSF+Seam框架学习心得 1.24 java jdbc驱动的四种类型 1.25 resource-ref元素

    JSF1.2+EJB3.0实现的一个项目实例

    应用服务器 采用JBoss4.2.1GA,在发布ejb端程序时,要把MySql的驱动程序包和数据库配置文件(mysql-ds.xml)这两个文件放置在JBoss安装目录\server\default\deploy目录下。这两个文件在jsfejb3-ejb源码的DBScript...

    第一个JPA演示程序

    环境:Window XP Professional, JDK 1.6, Eclipse 3.3 Europa, JBoss 4.2.1, Mysql 5.0 理由:持久层技术从EJB 2.0的实体bean开始,相继出现JDO, Hibernate, iBats等技术,到今天统一的标准JPA出现。因为JPA是一种...

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    1.2. 第一个例子:注册示例.............................................................................................................................................. 15 1.2.1. 了解代码.................

    hibernate中文文档

    3. 查看 Hibernate 发行包中的 eg/ 目录,里面有个一简单的独立运行的程序。把你的 JDBC 驱 动复制到 lib/ 目录并修改一下 etc/hibernate.properties,指定数据库的信息。然后进入命令 行,切换到发行包的目录,输入...

    六大应用服务器用途及简介.docx

    从JBoss项目开始至今,它已经从一个EJB容器进展成为一个基于的J2EE的一个web操作系统(operating systemforweb),它表达了J2EE规范中最新的技术,含有Jsp和Servlet容器,也就可以做web容器,也包含EJB容器,是完好的J2EE...

    java 面试题 总结

    当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 17、abstract class和interface有什么区别? 声明方法...

    超级有影响力霸气的Java面试题大全文档

    当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...

    Hibernate v3.2中文参考手册

    &lt;br&gt;查看Hibernate发行包中的eg/目录,里面有一个简单的独立运行的程序。把你的JDBC驱动拷贝到lib/目录下,修改一下src/hibernate.properties,指定其中你的数据库的信息。进入命令行,切换到你的发行包的目录,...

    Hibernate3.2官方中文参考手册

    &lt;br&gt;阅读第 1 章 Hibernate入门 ,这是一篇包含详细的逐步指导的指南。本指南的源代码包含在发行包中,你可以在doc/reference/tutorial/目录下找到。 &lt;br&gt;阅读第 2 章 体系结构(Architecture)来理解...

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    java高效学习之路-过来人经验

    因此掌握JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

Global site tag (gtag.js) - Google Analytics