Eclipse建立Enterprise Application企業應用程式
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 [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: