Eclipse+Wildfly10 创建第一个EJB项目

参考博客: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

 

二、创建Server

File → New → Other → Server → Wildfly 10.0

 

三、创建EJB工程

 File → New → Other … → EJB → EJB Project

 

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

 

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

 

目录如下:

 

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

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

 

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

 

自动生成两个类: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 

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

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

在工程上右键→【Export】→【EJB JAR file】 Destination处:→【Browse…】→ 选择Wildfly服务器的部署目录:wildfly-10.1.0.Final\standalone\deployments→【完成】即可


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


 

五、获取JNDI 路径

 

1、获取JNDI的规则:

For stateless beans:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
For stateful beans:
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful

第一个是appname 第二个是module name,distinct name可以设空,bean name就是实现remote/local 接口的bean类名
 

2、获取JNDI路径的方法有两种:

 

第一种 查看console 获取JNDI路径

①eclipse中启动

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

 

②在wildfly上部署启动

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

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

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

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

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

 

第二种 查看wildfly console  获取JNDI路径

打开wildFly administrator console界面,需要输入wildfly服务器用户的用户名和密码。
Runtime->Standalone Server->Subsystems->JNDI view 
进入JNDI视图后,最下面点开 applications,就是你发布成功的ejb。

 

 

 

 

配置完成的JNDI:EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote

 


扩展:

wildfly 配置JNDI的时候 到底用什么方法???

wildfly配置不能使用JBoss那一套了,反正我之前尝试了很多都报错。然而网上大部分还都是JBOSS那一套,JBOSS的升级版是wildfly。参考:Java EE 远程客户的访问EJB实现实例(Jboss wildfly)  需要查阅wildfly的文档 找了半天没找到 

网上又有说法是,在用wildfly做开发时,完全可以照搬照看wildfly企业版jbossEAP官方的资料: https://developers.redhat.com/products/eap/docs-and-apis/

还有oracle 官方的Java EEtutorial也甚为经典: 

https://docs.oracle.com/javaee/7/tutorial/

 

 

六、创建客户端工程

 1、创建java  类

File → New → Other … → Java Project

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

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

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

在接口文件上右键——【Export】——java中的jar

 

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

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

 

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 服务器(两种方法都可以)

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
好的,下面是一个简单的乘法 EJB 的开发过程: 1. 首先,你需要下载并安装 IntelliJ IDEA 和 Apache TomEE。这两个工具都可以从官方网站上下载。 2. 打开 IntelliJ IDEA,然后创建一个新的 Java 项目。 3. 在项目创建一个新的 Java 类,命名为 MultiplicationEJB,它应该实现 javax.ejb.SessionBean 接口。 4. 在 MultiplicationEJB 类中添加一个名为 multiply 的方法,它应该接收两个整数作为参数,并返回它们的乘积。 5. 在 MultiplicationEJB 类中添加以下注释: ``` @Stateless public class MultiplicationEJB implements SessionBean { // multiply method implementation } ``` 这个注释告诉 TomEE,这是一个无状态的 EJB,可以同时处理多个客户端请求。 6. 在 MultiplicationEJB 类中添加以下代码: ``` public int multiply(int a, int b) { return a * b; } ``` 这个方法会计算两个整数的乘积并返回结果。 7. 在 MultiplicationEJB 类中添加以下注释: ``` @Remote public interface MultiplicationRemote { int multiply(int a, int b); } ``` 这个注释告诉 TomEE,这是一个远程 EJB 接口。 8. 在 MultiplicationEJB 类中实现 MultiplicationRemote 接口: ``` @Stateless public class MultiplicationEJB implements SessionBean, MultiplicationRemote { public int multiply(int a, int b) { return a * b; } } ``` 9. 部署 EJB。将 MultiplicationEJB 类打包成一个 JAR 文件,并将其复制到 TomEE 的 webapps 目录下。TomEE 将自动加载并部署 EJB10. 使用 JNDI 查找 EJB。在客户端代码中,使用 JNDI 查找 MultiplicationRemote 接口,并调用 multiply 方法。 下面是一个简单的客户端代码示例: ``` public static void main(String[] args) throws NamingException { Context context = new InitialContext(); MultiplicationRemote ejb = (MultiplicationRemote) context.lookup("java:global/MultiplicationEJB/MultiplicationEJB!MultiplicationRemote"); int result = ejb.multiply(2, 3); System.out.println(result); } ``` 这个示例会查找名为 MultiplicationEJBEJB,并调用它的 multiply 方法来计算 2 和 3 的乘积。最后,它会将结果打印到控制台上。 希望这个简单的示例可以帮助你开始开发一个乘法 EJB

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿姨不可以嘛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值