EJB 開發環境與入門例項
文章目錄
1.環境準備
OS: Windows 8, 64 Bit
JDK: 1.8
Eclipse: Photon Release (4.8.0)
WildFly: 14.0.1.Final
2.WildFly
介紹
WildFly 是JBoss AS的新的專案的名稱。
JBoss分為AS 和 EAP兩個版本, AS是開源社群版本,EAP-Enterprise Application Platform是在開源版本上構建的企業版本。
JBoss AS 7.2.0是JBoss EAP 6.1 的基礎上開發的,從 8版本開始, JBoss AS就換成了WildFly。
下載
下載地址:
http://wildfly.org/downloads/
目前(2018/11)最新版是 14.0.1.Final。
下載後解壓,這裡解壓到 D:\install\wildfly14 目錄。
配置與啟動
WildFly的後臺管理需要輸入使用者名稱密碼登入。 所以需要使用管理員賬號。使用 add-user.bat 執行互動式使用者和密碼設定。預設安裝有admin使用者, 可以通過這種方式修改密碼。
- 命名行切換到 D:\install\wildfly14\bin, 執行 add-user.bat
- 設定管理員使用者名稱/密碼: admin/admin
上圖中, 輸入a 新增管理員賬號, 後面輸入admin後提示是已有賬號, 修改密碼即可。 - 設定使用者完成後,在相同的目錄,執行 standalone.bat, 啟動服務
控制檯地址: http://127.0.0.1:9990/
在瀏覽器輸入以上地址, 會要求輸入使用者名稱/密碼。正確輸入後,效果如下:
3. EJB 服務建立
- 在Eclipse 中建立EJB Project, Project 名字為: ejb_service
2.別急著點Finish, 點選下一步之後, 在之後下一步中勾選產生部署描述的xml檔案。
建立後的專案結構如下:
ejbModule裡面放的就是原始碼檔案。
-
將ejb的依賴包加入專案的build path
檔案路徑在: D:\install\wildfly14\modules\system\layers\base\javax\ejb\api\main
-
新建介面和服務類。
右鍵單擊專案,New-> Session Bean
輸入包名、類名並勾選建立遠端介面。
點選Finish後, 會建立兩個檔案
-
在介面和Bean的檔案中新增方法。
package cn.osxm.jcodef.ejb;
import javax.ejb.Remote;
@Remote
public interface HelloWorldRemote {
public String sayHello(String user);
}
package cn.osxm.jcodef.ejb;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
/**
* Session Bean implementation class HelloWorld
*/
@Stateless
@LocalBean
public class HelloWorld implements HelloWorldRemote {
/**
* Default constructor.
*/
public HelloWorld() {
// TODO Auto-generated constructor stub
}
@Override
public String sayHello(String username) {
return "Hello," + username + ". This is first EJB Service.";
}
}
6.打包部署
右鍵單擊專案, Export
預設打包的檔名是專案名.jar, 這裡是 ejb_service.jar
部署只需要將這個檔案複製到 D:\install\wildfly14\standalone\deployments 目錄下。
Wildfly 支援熱部署, 在服務開啟的狀況下, 將檔案 拷入會自動的部署。在服務控制檯可以看到部署的日誌:
以上紅色框部分就是服務的地址, 後面客戶端呼叫的時候就是使用這個地址。
4.客戶端呼叫
新建一個普通的Java專案進行測試。客戶端呼叫需要:
- 客戶端呼叫依賴包: jboss-client.jar
位於JBoss安裝目錄: D:\install\wildfly14\bin\client
也可以在網路直接下載或是通過Maven中央庫匯入。 - 服務端的介面, 也就是上面的: cn.osxm.jcodef.ejb.HelloWorldRemote
這個介面檔案必須和服務端的包和介面名及需要呼叫的介面保持一致。
可以從伺服器端直接提供,或是打包成 jar檔進行匯入,在客服端寫的話,注意保持一致。 - 伺服器的路徑
這個和Wildfly的管理控制頁面是不一樣的埠, 查詢方式:
到管理控制檯以下頁面
預設是8080埠, 和Tomcat的埠是一樣的。
如果同時使用Tomcat和Wildfly的話, 可以修改這個埠。 - 服務的路徑, 上面也提到了。這裡是:
ejb_service/HelloWorld!cn.osxm.jcodef.ejb.HelloWorldRemote
可以從Wildfly服務控制檯日誌看到, 也可以到管理頁面中查詢。
Runtime->JNDI
5. 呼叫程式碼:
/**
* @Title: HelloWorldMain.java
* @Package cn.osxm.jcodef.ejb
* @Description: TODO
* @author osxm:oscarxueming
* @date 2018��11��24�� ����5:51:47
* @version V1.0
*/
package cn.osxm.jcodef.func.ejb.client;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* @ClassName: HelloWorldMain
* @Description: TODO
* @author osxm:oscarxueming
*/
public class HelloWorldMain {
/**
* @Title: main
* @Description: TODO
* @param args
* @throws NamingException
*/
public static void main(String[] args) throws NamingException {
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
props.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080");
props.put("jboss.naming.client.ejb.context", true);
InitialContext context = new InitialContext(props);
// JNDI·
String fullEJBName = "ejb_service/HelloWorld!cn.osxm.jcodef.ejb.HelloWorldRemote";
cn.osxm.jcodef.ejb.HelloWorldRemote helloWorld = (cn.osxm.jcodef.ejb.HelloWorldRemote) context.lookup(fullEJBName);
System.out.println(helloWorld.sayHello("osxm"));
}
}