EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

时间:2024-03-14 19:07:57

参考博客:http://www.micmiu.com/j2ee/ejb/eclipse-jboss-ejb-demo/

https://blog.csdn.net/taiyangdao/article/details/50826865

http://www.zzqq.org/p/0326280574d92f13b11c3bce0eb785b0.html 最后 遇到问题 部分

 

一、Eclipse安装 Wildfly 10服务器

下载Wildfly 10 在eclipse中 配置 Server Runtime Environments

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

二、创建Server

File → New → Other → Server → Wildfly 10.0

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

三、创建EJB工程

 File → New → Other … → EJB → EJB Project

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

输入工程名字,下面默认。

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

【Next】→【Next】(选中 Generate ejb-jar.xml deployment descriptor)→【Finish】

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

目录如下:

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

ejbModule就是编写JAVA源码的地方(即EJB代码)

在ejbModule 目录上右键【New】→【Other…】→【EJB】→ Session Bean(EJB 3.x)

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

→【Next】输入包名:com.micmiu.ejb、EJB类名:HelloWorld ,选中 Remote选项  →【Finish】.

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

自动生成两个类:HelloWorldRemote.java     

这里添加了方法

接口类 需要打jar包 后面客户端访问的时候会用到  

package com.micmiu.ejb;

import javax.ejb.Remote;

@Remote
public interface HelloWorldRemote {

	String sayHello(String username);
}

HelloWorld.java

这是实现类

实现接口类方法

package com.micmiu.ejb;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;

/**
 * Session Bean implementation class HelloWorld
 */
@Stateless
@LocalBean
public class HelloWorld implements HelloWorldRemote {

    /**
     * Default constructor. 
     */
    public HelloWorld() {
        // TODO Auto-generated constructor stub
    }

	@Override
	public String sayHello(String username) {
		// TODO Auto-generated method stub
		return "Hello," + username + " welcome to EJB.";
	}

}

 

四、部署 

两种方式:

1、eclipse中启动wildfly服务器  server start 

查看console 获取JNDI路径

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

第一行标注的是客户端访问用到的JNDI路径,只有准确写入之后才可以访问到ejb对象。

 

2、将EJB工程打包 放到wildfly 的server中 

( 我电脑路径是:E:\ews\wildfly-10.1.0.Final\standalone\deployments )

再运行:E:\ews\wildfly-10.1.0.Final\bin 中的  standalone.bat

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

其中第二行才是需要的JNDI路径 原因:

HelloWorldRemote 接口类中有@Remote注解 才可以找到

分析路径:EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote

EJB-HelloWorld 是ejb项目的名字,是编译部署到wildfly的名字,HelloWorld是你注解name的ejb名字,com.micmiu.ejb.HelloWorldRemote是@Remote注解的完整路径。

 

 

EJB工程在服务器的部署任务完成,接下来就是创建客户端对其进行访问。

五、创建客户端工程

 1、创建java  类

File → New → Other … → Java Project

接下来很关键,需要添加两个jar包。这里是理解EJB的重点,一个是接口类jar包,说明请求访问EJB的哪个具体方法,具体实现方法 在这里不需要单独打包,部署的时候已经把整个EJB工程打包过了放到服务器上了,其中包括具体实现。

再一个就是 wildfly的Client的jar包,应该是client和wildfly的沟通规则,我理解是相当于对方的电话号码。

2、将EJB工程中的接口类 Export -> jar包 ,添加到客户端工程classpath中

3、添加wildfly Client的jar包 (E:\ews\wildfly-10.1.0.Final\bin\client)

这里存在两个 jboss-client.jar 和 jboss-cli-client.jar 测试发现  jboss-client.jar是必须的 第二个不知道有啥用 都添进去也不影响

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目

 

4、创建客户端测试类 HelloWorldTest

package com.ews.ejb;

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.micmiu.ejb.HelloWorldRemote;

public class HelloWorldTest {

	public static void main(String[] args) throws NamingException {
		
		Properties props = new Properties();
		
		props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");  
        props.put(Context.PROVIDER_URL, "http-remoting://localhost:8081");
        props.put("jboss.naming.client.ejb.context", true);
             
		InitialContext context = new InitialContext(props);
		
		//JNDI路径 查看控制台输出文件 @remote 注解的
		String fullEJBName = "EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote";
		HelloWorldRemote helloWorld = (HelloWorldRemote) context.lookup(fullEJBName);
		
		System.out.println(helloWorld.sayHello("wls"));

	}

}

其中  Properties 为常规配置

fullEJBName 为前面从控制台中获取到的JNDI的路径,通过该路径成功获取到ejb对象。

 

设置JNDI上下文参数

JNDI上下文的参数与使用的远程JNDI类型相关。具体可以分为http-remoting方式和ejb方式2种。

ejb方式测试以后报错,所以这里使用 http-remoting方式,来实现客户端通过JNDI远程调用EJB的方法

 

六、测试 

前面已经启动了wildfly 服务器(两种方法都可以)

再运行客户端,成功打印如下:

EJB(一) Eclipse+Wildfly10 创建第一个EJB项目