1. 程式人生 > >Eclipse建立Enterprise Application企業應用程式

Eclipse建立Enterprise Application企業應用程式

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  
[email protected]
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: