同时部署在wildfly下的Web访问EJB
1、又发现针对EJB整理的不错的文章,推荐下:带你走进EJB-系列 作者在博客中已经写了EJB一个系列的,读了发现思路相当清晰,可惜标题不直接是EJB 导致这么好的文章很难搜素得到。2、Google强于百度,难点是Google搜索出来的,百度搜了半天,呵呵。3、EJB创建在之前的文章 Eclipse+Wildfly10 创建第一个EJB项目 一、创建Web应用1、Eclips...
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
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:
更多推荐
所有评论(0)