Intellij IDEA 新建一個EJB工程(三)


之前都是用IDEA啟動JBoss服務器,並在啟動的同時將EJB項目部署上去。在構建 artifacts 時遇到很多問題,明明是EJB項目卻不能用EJB導出,真是奇怪~~

后來用Web Application :Exploded可以正常導出了,但是在導出的名字后面竟然要加上.war,這是奇了怪了~~
現在想在第一次用IDEA運行EJB項目的時候,並生成一個war文件,這個war文件就可以部署在任意的Jboss服務器上了,不用每次只能部署一個項目。不知道我的做法有沒有問題,但是實驗證明是可行的~特此記錄~~
 
1、新建一個EJB Module,名字為EJBModuleTest01
生成EJB Module可以參考:

http://www.cnblogs.com/yangyquin/p/5328344.html

 
1)接口HelloRemote:   
package com.ejb;
import javax.ejb.Remote;
@Remote
public interface HelloRemote {
    public String sayHello(String world);
}

 2)無狀態會話Bean,HelloBean:

package com.ejb;
import javax.ejb.Stateless;
@Stateless(name = "HelloEJB")
public class HelloBean implements HelloRemote {
    public HelloBean() {
        System.out.println("EJBModuleTest01-HelloBean");
    }
    @Override
    public String sayHello(String world) {
        return "EJBModuleTest01-sayHello():" + "world";
    }
}

3)EJBTestModule01的結構圖為:

4)配置lib文件路徑:
Ctrl+Alt+Shift 彈出Project Structure -> 選擇Module -> 選擇EJBModuleTest01 -> 點擊右邊的加號 -> 選擇Jar or Directories -> 選擇新建的Module的lib文件夾 -> 確定后提勾再確定即可。

5)然后選擇Artifacts -> 選擇“EJBModuleTest01:war exploded” -> 發現出錯信息,點擊“Fix” -> 選擇“Add ......” 即可。

 

6)同一頁面,修改Name,Type和Output directory為如下:
Name中去掉exploded及其前面的一個空格,Type選擇為Web Application:Archive,    選擇Apply然后再點close即可。

 

7)配置運行環境:
選擇菜單欄Run -> Edit Configurations 
點擊“+” -> 選擇JBoss Server -> Local -> 輸入名稱“ejbmoduletest01” -> 點擊“Deployment” -> 點擊右邊的“+” 號 -> 選擇EJBModuleTest01:war ,確定即可
8)運行
運行成功~~

 

JBoss后台管理界面:

 

 
2、以同樣的方式在同一個Project下新建一個Module,為EJBModuleTest02
1)Rmote接口:
package com.ejb;
import javax.ejb.Remote;
@Remote
public interface HiRemote {
    public String sayHi(String world);
}

 2)無狀態會話Bean,HiBean:

package com.ejb;
import javax.ejb.Stateless;
@Stateless(name = "HiEJB")
public class HiBean implements HiRemote {
    public HiBean() {
        System.out.println("EJBModuleTest02-HiBean");
    }
    @Override
    public String sayHi(String world) {
        return "EJBModuleTest02-sayHi()" + world;
    }
}

3)EJBModuleTest02結構圖:

4)Ctrl+Alt+Shift 彈出項目結構配置對話框,對於本Module的lib,你可以選擇將剛剛的Module的lib文件夾導入,也可以在Project中將剛剛的lib文件夾導入。
選擇 Artifacts,選擇“EJBModuleTest02:war exploded”,跟剛剛的修改一樣,將Name中的exploded及其前面的一個空格去掉,Type選擇“Web Application:Archive’,選擇Apply然后再點close即可。

 

5)配置運行環境,如下圖所示:
選擇剛剛新建的EJBModuleTest02:war
6)運行:
注意這時是重新啟動JBoss。
運行成功~~
JBoss后台管理界面:
 
 
3、分別建立的兩個Module都能正常運行,也成功的生成了兩個war文件。

 

 

1)關掉IDEA啟動的JBoss,在JBoss安裝目錄下啟動,找到文件:C:\jboss-as-7.1.1.Final\bin\standalone.bat,雙擊啟動JBoss。
啟動成功:
2)將生成的兩個war文件復制到JBoss安裝目錄的這個文件夾:C:\jboss-as-7.1.1.Final\standalone\deployments。
JBoss會自動檢測war文件,並生成對應的后綴為deployed的文件
3)部署成功~

 4)查看JBoss后台管理界面:

 
 
4、在本地新建測試類就可以調用這兩個Module的方法了。
1)測試Module結構:

2)配置文件jboss-ejb-client.properties:

endpoint.name=client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=localhost
remote.connection.default.port = 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
remote.connection.default.username=yang
remote.connection.default.password=123456

3)HelloRemote接口:

package com.ejb;
import javax.ejb.Remote;
@Remote
public interface HelloRemote {
    public String sayHello(String world);
}

4)Hi接口:

package com.ejb;
import javax.ejb.Remote;
@Remote
public interface HiRemote {
    public String sayHi(String world);
}

5)測試類:

import com.ejb.HelloRemote;
import com.ejb.HiRemote;
import org.junit.Before;
import org.junit.Test;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Hashtable;
/**
 * Created by gao on 16-3-31.
 */
public class HelloAndHiClient {
    final String appName = "";
    final String moduleName01 = "EJBModuleTest01_war";
    final String moduleName02 = "EJBModuleTest02_war";
    final String distinctName = "";
    final String beanName01 = "HelloEJB";
    final String beanName02 = "HiEJB";
    String viewClassName = null;
    String namespace = null;
    Hashtable jndiProperties = null;
    Context context = null;
    @Before
    public void before() throws NamingException {
        jndiProperties = new Hashtable();
        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
        context = new InitialContext(jndiProperties);
    }
    @Test
    public void testHelloRemote() throws NamingException {
        viewClassName = HelloRemote.class.getName();
        namespace = "ejb:" + appName + "/" + moduleName01
                + "/" + distinctName + "/" + beanName01 + "!" + viewClassName;
        System.out.println("namespace01:" + namespace);
        HelloRemote hello = (HelloRemote) context.lookup(namespace);
        System.out.println("HelloRemote:" + hello);
        System.out.println(hello.sayHello("EJBModuleTest01_war"));
    }
    @Test
    public void testHiRemote() throws NamingException {
        viewClassName = HiRemote.class.getName();
        namespace = "ejb:" + appName + "/" + moduleName02
                + "/" + distinctName + "/" + beanName02 + "!" + viewClassName;
        System.out.println("namespace02:" + namespace);
        HiRemote hi = (HiRemote) context.lookup(namespace);
        System.out.println("HiRemote:" + hi);
        System.out.println(hi.sayHi("EJBModuleTest02_war"));
    }
}

6)運行第二個測試函數的輸出結果:

 

 搞掂~~~~

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM