同时部署在wildfly下的Web访问EJB

版权声明:本文为博主原创文章,非商用转载请注明出处: https://blog.csdn.net/qq_17058993/article/details/83578175

1、又发现针对EJB整理的不错的文章,推荐下:带你走进EJB-系列  作者在博客中已经写了EJB一个系列的,读了发现思路相当清晰,可惜标题不直接是EJB 导致这么好的文章很难搜素得到。

2、Google强于百度,难点是Google搜索出来的,百度搜了半天,呵呵。

3、EJB创建在之前的文章 Eclipse+Wildfly10 创建第一个EJB项目 

一、创建Web应用

1、Eclipse中创建Web应用

我这里选择的IDE是 Red Hat JBoss Developer Studio 11.0.0.GA,貌似集成了EJB相关的开发工具,反正很diao。

 

环境选择Wildfly,因为要在上面部署,其他的不动。

 两次next以后,选中自动生成web.xml,Finish

扫描二维码关注公众号,回复: 4185673 查看本文章

2、Java Resources --> src -->右键 -->new-->servlet

默认生成 doGet和doPost方法。

3、web应用的WEB-INF中新建 index.html,为了访问测试使用。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>欢迎页面</title>
</head>
<body>
	eclipse 部署	wildfly
</body>
</html>

4、此时的项目目录:

5、wildfly只部署web应用:

Web应用部署到wildfly以后,浏览器访问:http://localhost:8081/EJB-HelloWorld-Web/

这里是在Eclipse中直接部署,也可以在wildfly的 wildfly-10.1.0.Final\standalone\deployments 中打成war包部署。

EJB-HelloWorld-Web是项目名称,默认访问index.html 

6、doGet请求,浏览器访问 http://localhost:8081/EJB-HelloWorld-Web/test 

二、Web添加访问EJB接口,访问方法

1、将需要的三个jar放到lib下,build to path.

一个是EJB的接口类jar,两个是wildfly中client的jar

2、修改test,添加访问方法。主要为了页面请求,实现调用EJB方法。

package com.ews.ejb;
import java.io.IOException;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.micmiu.ejb.HelloWorldRemote;

@WebServlet("/test")
public class test extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public test() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().append("Served at: ").append(request.getContextPath());
		
		
		//页面请求
		System.out.println("---------");

		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);
        
        System.out.println("=========");
        
		try {
//			InitialContext context = new InitialContext(props);
			InitialContext context = new InitialContext();	//如果客户端和jboss运行在同一个jvm,不需要传入props 
			
			//JNDI路径 查看控制台输出文件 @remote 注解的
//			String fullEJBName = "EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote";	//简单的java客户端访问EJB的JNDI

			String fullEJBName = "ejb:/EJB-HelloWorld//HelloWorld!com.micmiu.ejb.HelloWorldRemote";
			
			
//			Object obj = context.lookup(fullEJBName);
			
			HelloWorldRemote helloWorld = (HelloWorldRemote) context.lookup(fullEJBName);
			
			System.out.println(helloWorld.sayHello("王慕一"));
			
			System.out.println("客户端请求完成!");
			
//			helloWorld.connectOracle();
			
			
		} catch (NamingException e) {
			e.printStackTrace();
		}
		
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

注意:

1、如果客户端和jboss运行在同一个jvm,不需要传入props 

发布在 Jboss(升级改名为wildfly) 下的客户端(这里是Web应用)不需要明确设置 JNDI 访问的上下文环境,可以直接通过 InitialContext ctx = new InitialContext()获得上下文环境,容器会自动赋给 InitialContext 正确的环境。

如果传入了props,console反而会报一大堆错。

2、发布到EJB容器的东西只能通过jndi来访问,所以JNDI路径一定要正确,此时的环境是同时部署在wildfly下的Web访问EJB,根简单的java客户端访问EJB还不太一样。

这里谷歌百度了很久,就是一直报notFound错,JNDI路径不对。看了很多文章都是用的jboss老版本,也不知道是现在wildfly10改成啥样了,反正各种不支持。

关于jboss下 web 客户端如何访问EJB的问题 文中说的修改ejb-jar.xml、jboss.xml并没用,

EJB学习笔记-4-web应用访问EJB(remote) 发现 jndi 需要改成:ejb:/EJB-HelloWorld/HelloWorld!com.micmiu.ejb.HelloWorldRemote ,运行以后报错 org.jboss.ejb.client.naming.ejb.EjbNamingContext cannot be cast to com.micmiu.ejb.HelloWorldRemote

谷歌以后,https://developer.jboss.org/thread/175286 从结果第一条找到了解决办法,你再百度下试试(让你哭):

修改JNDI为:ejb:/EJB-HelloWorld//HelloWorld!com.micmiu.ejb.HelloWorldRemote 

最终访问成功,console在下面给出。


三、部署Web和EJB测试

1、wildfly同时部署Web和EJB 

这里不涉及到发布所以直接在Eclipse中部署,发布的时候直接把EJB.jar和EJB-HelloWorld-Web.war 放到  wildfly-10.1.0.Final\standalone\deployments 

2、浏览器访问: http://localhost:8081/EJB-HelloWorld-Web/test

查看console:

猜你喜欢

转载自blog.csdn.net/qq_17058993/article/details/83578175
今日推荐