Eclipse创建Enterprise Application企业应用程序

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

J2EE Enterprise Application企业应用程序包含EJB、WEB

EJB:Eclipse+Wildfly10 创建第一个EJB项目

WEB:同时部署在wildfly下的Web访问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:

猜你喜欢

转载自blog.csdn.net/qq_17058993/article/details/83752595