Eclipse创建Enterprise Application企业应用程序
J2EE Enterprise Application企业应用程序包含EJB、WEBEJB:Eclipse+Wildfly10 创建第一个EJB项目WEB:同时部署在wildfly下的Web访问EJB使用Eclipse(IDE是 Red Hat JBoss Developer Studio 11.0.0.GA)创建 Enterprise Application Project 并部署...
J2EE Enterprise Application企业应用程序包含EJB、WEB
EJB:Eclipse+Wildfly10 创建第一个EJB项目
使用Eclipse(IDE是 Red Hat JBoss Developer Studio 11.0.0.GA)创建 Enterprise Application Project 并部署到wildfly 实现请求页面访问EJB
Enterprise Application企业应用程序结构通常与以下层相对应。
Web 层。Web 层包含应用程序的表示逻辑,它在 Java EE 服务器上运行。在应用程序中,Web 层由 Web 模块表示,其中包含访问 EJB 模块中的业务逻辑的 Servlet。
业务层。业务层应用程序也在 Java EE 服务器上运行,其中包含应用程序的业务逻辑。在应用程序中,业务层由 EJB 模块表示。EJB 模块包含处理来自 Web 层客户端的请求的代码,并管理事务以及如何将对象永久保存到数据库中。
EIS 层。EIS 层是应用程序的持久性存储层。在应用程序中,该层由存储消息的数据库表示。
一、创建Enterprise Application Project
1、new-javaEE-Enterprise Application Project
2、服务器选择wildfly,因为要部署到wildfly
3、选择EJB、WEB(在前面的博客中写好了,需要修改的JNDI在后面给出)
选中自动生成application.xml 里面是EJB和WEB模块的配置
项目目录:
二、修改WEB中访问EJB时用到的JNDI
1、由于EJB在EAR中被部署后,绑定的JNDI前面会加上EAR的包名,否则报错。
15:24:44,650 INFO [org.jboss.ejb.client] (default task-3) JBoss EJB Client version 2.1.4.Final
15:24:44,656 ERROR [io.undertow.request] (default task-3) UT005023: Exception handling request to /EJB-HelloWorld-Web/test: java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:, moduleName:EJB-HelloWorld, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@1008f8e9
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:798)
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:128)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:255)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:200)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:183)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:146)
at com.sun.proxy.$Proxy55.sayHello(Unknown Source)
at com.ews.ejb.test.doGet(test.java:52)
at com.ews.ejb.test.doPost(test.java:68)
2、修改WEB中的test(servlet,在页面端实现post请求servlet,测试访问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"; //WEB和EJB一起部署到Wildfly服务器, WEB访问EJB
String fullEJBName = "ejb:EJB-HelloWorld-ear/EJB-HelloWorld//HelloWorld!com.micmiu.ejb.HelloWorldRemote"; //EAR打包 部署到Wildfly 由于EJB在EAR中被部署后,绑定的JNDI前面会加上EAR的包名
HelloWorldRemote helloWorld = (HelloWorldRemote) context.lookup(fullEJBName);
System.out.println(helloWorld.sayHello("王慕一"));
// helloWorld.connectOracle();
System.out.println("客户端请求完成!");
} catch (NamingException e) {
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
三、EAR部署到Wildfly,测试访问。
1、在wildfly中添加ear
2、wildfly运行,浏览器访问http://localhost:8081/EJB-HelloWorld-Web/test
3、Eclipse console:
更多推荐
所有评论(0)