1. 程式人生 > >EJB環境配置(jboss-as-7.1.1+jdk1.8+eclipse)並編寫第一個EJB程式

EJB環境配置(jboss-as-7.1.1+jdk1.8+eclipse)並編寫第一個EJB程式

文章目錄

一、環境配置

寫在前面

jdk1.8和jboss-as-7.1.1並不相容(儘管在網上找到了有說不需要換jdk的方法,但是至少我是失敗了),這裡的內容是:在不改變其他專案使用jdk1.8的情況下,對jboss專案使用jdk1.7.
在這裡插入圖片描述

下載jboss-as-7.1.1.final並配置環境變數

官網連結
網盤連結 提取碼:nq3u

配置環境變數:(右鍵我的電腦-屬性-高階系統設定-環境變數)
1、在“系統變數”裡新增JBOSS_HOME變數,值為Jboss的路徑。例如我的路徑在D盤根目錄下,則值為D:\jboss-as-7.1.1.Final。
2、在path變數中新增:%JBOSS_HOME%\bin

驗證是否配置成功:
1、開啟jboss-as-7.1.1.Final下的子目錄bin,執行standlone.bat,啟動JBoss伺服器。注意不是執行run.bat。
2、JBoss伺服器啟動完畢之後,開啟瀏覽器並輸入地址http://localhost:8080, 如出現JBoss歡迎頁面,則表示JBoss安裝並執行成功;

如果你是jdk1.8,那麼安裝jdk1.7並修改standlone.bat

如果是jdk1.8的話,點選standlone.bat,會卡在JBoss AS 7.1.1.Final “Brontes” starting。

1、下載jdk1.7並安裝:網盤連結 提取碼:0jv1
注意不需要為jdk1.7配環境
2、修改standlone.bat,下圖第60行修改為 set "JAVA=你的jdk7安裝路徑(在安裝時選擇的那個)\bin\java"
在這裡插入圖片描述

在eclipse中安裝JBoss Tools開發外掛

Help -> Eclipse Marketplace -> 搜尋jboss,如下圖,點選右下角install
在這裡插入圖片描述


如果在search這裡沒有找到的話,那麼這裡的第三欄popular中也應該有它。

在彈出的視窗中選擇[JBossASTools],點選按鈕[Confirm],接著在安裝許可協議視窗中選擇accept,然後finish等它自動下載(需要聯網)

eclipse配置

1、Window -> preferences -> Java -> installed JREs -> add,跳出的視窗點選next,會如下圖所示:
圖中的JRE name取個你自己能分辨出來哪個版本的就行,JRE home還是填jdk安裝目錄,和之前修改的standlone.bat中的路徑一致。
在這裡插入圖片描述

2、依舊是Window -> preferences,然後找到server -> Runtime Environment -> add -> jboss7.1 -> next
在這裡插入圖片描述
注意下圖框起來的地方:
Home Directory使用的是jboss的路徑,和前面JBOSS_HOME的值相同
Runtime JRE這裡需要選擇剛才在 installed JREs那裡設定的那個名稱(希望你還記得)
在這裡插入圖片描述

二、第一個EJB程式

編寫EJB工程

1、file -> new -> EJB project,這裡我就叫它HelloEJB了,注意這裡選擇一下Target Runtime,不選的話就只能去build path裡面加了
在這裡插入圖片描述

2、右鍵專案名新增包,這裡我的包叫com.hello.ejb,右鍵包名 -> new -> session bean
這裡我叫它Hello,(ps:下圖中的stateless意為無狀態,選擇stateful則為有狀態
在這裡插入圖片描述

3、finish之後我們看到這個包下生成了一個Hello.java和它的remote介面HelloRemote.java

HelloRemote.java:

package com.hello.ejb;

import javax.ejb.Remote;

@Remote
public interface HelloRemote {
	public String hello(String s);
}

Hello.java:

package com.hello.ejb;

import javax.ejb.Stateless;

/**
 * Session Bean implementation class Hello
 */
@Stateless
public class Hello implements HelloRemote {

    /**
     * Default constructor. 
     */
    public Hello() {
        // TODO Auto-generated constructor stub
    }

    public String hello(String s) {
    	return "hello " + s;
    }
}

將工程部署到JBoss伺服器

右鍵工程名選擇export -> EJB jar file,顯示如下圖所示
Browser選擇路徑為jboss目錄下的standalone\deployments資料夾
非常重要的一點!!!如果程式碼有改動,那麼需要重新部署,也就是重新export,不然你的客戶端不會知道改動的!!
在這裡插入圖片描述

編寫客戶端工程

就建一個普通的java project,這裡我們叫它HelloEJB-Client

新建包com.hello.ejb和com.hello.ejb.client
1、把剛才EJB工程檔案中的HelloRemote複製到com.hello.ejb下
2、右鍵專案名-build path,匯入jboss-client.jar包
3、在com.hello.ejb.client下新建java類HelloClient.java

package com.hello.ejb.client;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.hello.ejb.HelloRemote;


public class HelloClient {

	private static HelloRemote lookupRemoteStatelessEjbBean() throws NamingException{
		final Hashtable jndiProperties = new Hashtable(); 
		
		jndiProperties.put("jboss.naming.client.ejb.context", true);
		jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); 
		
		final Context context = new InitialContext(jndiProperties); 
		final String appName = ""; 
		//moduleName是EJB工程名
		final String moduleName = "HelloEJB"; 
		final String distinctName = ""; 
		//beanName是EJB工程下的sessionBean名
		final String beanName = "Hello"; 
		final String viewClassName=HelloRemote.class.getName(); 
		//如果EJB工程下的sessionBean是有狀態的,則後面還需要加`+"?stateful"`
		final String namespace = "ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName; 
		return (HelloRemote) context.lookup(namespace); 
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{ 
			//查詢目錄
			HelloRemote hello = lookupRemoteStatelessEjbBean(); 
			System.out.println(hello); 
			String s = hello.hello("EJB");
			System.out.println(s); 
			
		}catch(NamingException e){ 
			e.printStackTrace(); 
		}
	}

}

4、jboss-ejb-client.properties檔案(放在src目錄下
注意這裡port是4447 但是jboss6及以前版本應該是1099

endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port=4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

啟動伺服器,執行程式

servers當中啟動Jboss7,如下圖
在這裡插入圖片描述
啟動成功後將會看到:
在這裡插入圖片描述

整體目錄結構

在這裡插入圖片描述

另外需要注意的地方

當客戶端程式是web工程時一定要右鍵工程名-properties-java compiler 改成1.7版本的,不然會報錯。