【EJB一】第一个实例

EJB是什么

EJB是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。
简单的说,它提供的服务可以供其他程序远程调用。

EJB环境搭建

1、JDK支持
2、JBoss服务器安装和部署(支持EJB,tomcate不支持EJB)

第一个实例

1、创建一个EJB Project(ejb01)
2、创建一个接口(可供其他程序远程调用)
package com.bjsxt.ejb;

public interface FirstEjb {
    public String saySomething(String name);
}
添加实现类:
package com.bjsxt.ejb;

import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless
@Remote
public class FirstEjbBean implements FirstEjb {

    public String saySomething(String name) {

        return "你好!"+name;
    }

}
到此为止,EJB程序代码已经编写完毕。看起来他和我们平常写的代码并无多大的区别,唯一的区别是,他用注解来标明实现类是
@Remote和@Stateless。
3、创建一个普通的Java Project(ejb01_client)来调用写好的EJB接口。
当然,要想调用EJB接口,必须要引入接口的jar包,所以,我们将接口导出为jar文件,在ejb01_client中引入即可。

【EJB一】第一个实例_第1张图片

【EJB一】第一个实例_第2张图片

编写调用接口的类代码:
public class ejbClient {

    /** * @param args * @throws NamingException */
    public static void main(String[] args) throws NamingException {
        InitialContext context=new InitialContext();
        FirstEjb firstEjb=(FirstEjb)context.lookup("FirstEjbBean/remote");
        String string=firstEjb.saySomething("张三");
        System.out.print(string);

    }

}
此外,在调用接口时,用到了JNDI来根据名称进行查找实现类。所以必须提供JNDI的一个来源,来classpath下面创建jndi.properties文件
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
当然,不止使用属性文件这一种方式来获取JNDI的上下文工厂。还可以通过代码创建property的方式或者hashTable等的方式来进行。

方式一:

Properties props= new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "jnp://部署ejb的服务器ip");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(props);
FirstEjb firstEjb=(FirstEjb)ctx .lookup("FirstEjbBean/remote");

方式二:

private static InitialContext context;
If(context==null){
Hashtable  props = new Hashtable();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
props.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
props.put(Context.PROVIDER_URL,"jnp://部署ejb的服务器ip");
context=new InitialContext(props);
}
FirstEjb firstEjb=(FirstEjb)ctx .lookup("FirstEjbBean/remote");
最后需要将ejb01部署到Jboss上面,我们就可以运行ejb01_client进行测试了。
当然如果你在测试过程中,提示找不到jndi的上下文工厂类时,可以尝试引入jbossall-client.jar的包来解决。

你可能感兴趣的:(EJB实例)