之前都是用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)运行第二个测试函数的输出结果:

搞掂~~~~

Intellij IDEA 新建一个EJB工程(三)的更多相关文章

  1. Intellij IDEA新建一个EJB工程(二)

    从博文:http://www.cnblogs.com/yangyquin/p/5328344.html 中可以知道如何利用Intellij IDEA建立一个EJB Module,还有新建一个测试Mod ...

  2. 新建一个express工程,node app无反应

    1.问题描述 新建一个express工程,node app以后无反应,浏览器输入localhost:3000,显示如下 2.解决方法 在app.js文件中加入如下代码 app.listen(3000, ...

  3. Java Learning 001 新建一个Java工程 HelloWorld程序

    Java Learning 001 新建一个Java工程 HelloWorld程序 Step 1 . 在Eclipse 软件里,点击: File -> New -> Java Projec ...

  4. Proteus 8使用 1新建一个Proteus工程

    新建一个Proteus工程 下一步 创建部分结束,可以看到两部分-->原理图与源代码. 首先按下F7或从“构建”菜单中选择“构建工程” 之后切换到原理图窗口 按下F12或点击窗口最左下角的“运行 ...

  5. 使用IntelliJ IDEA新建一个spring boot项目

    好家伙, 使用IntelliJ IDEA新建一个spring boot项目 目的很简单,就是网页上出现一个"hello world" 别的暂时不管 首先关于工具IntelliJ I ...

  6. idea如何新建一个springmvc 工程

    java 版本 1.8.0_261 idea 版本2020.1 Tomcat 9  maven 3.6 新建工程 File->new->project 默认会下载springframewo ...

  7. zynq学习01 新建一个Helloworld工程

    1,好早买了块FPGA板,zynq 7010 .终极目标是完成相机图像采集及处理.一个Window C++程序猿才开始学FPGA,一个小菜鸟,准备转行. 2,关于这块板,卖家的官方资料学起来没劲.推荐 ...

  8. Android中使用自身携带的Junit新建一个测试工程

    1.新建立一个Android工程 package com.shellway.junit; public class Service { public int divide(int a,int b){ ...

  9. Android问题-打开DelphiXE8与DelphiXE10新建一个空工程提示"out of memory"

    错误信息: [DCC Error] E2597 d:\XE8\Embarcadero\Studio\16.0\PlatformSDKs\android-ndk-r9c\toolchains\arm-l ...

随机推荐

  1. JS对Json对象Distinct

    Json对象去重 今日有一个需求如下: 从数据库中取出数据源转化成json字符串绑定到隐藏域中,取出的json字符串如下: string data="[{"CompanyName& ...

  2. Python流程控制

    if语句: --Pyhon中的IF跟其他语言类似,if包含一个逻辑表达式,使用表达式比较,在比较的结果的基础上做出判断 --if expression: statement(s) 注意:Python使 ...

  3. Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_100_CI_AS" in the equal to operation.

    ErrorMessage Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" ...

  4. hadoop的核心思想

    hadoop的核心思想 1.1.1. hadoop的核心思想 Hadoop包括两大核心,分布式存储系统和分布式计算系统. 1.1.1.1. 分布式存储 为什么数据需要存储在分布式的系统中哪,难道单一的 ...

  5. Objective-C的内省(Introspection)小结

    内省(Introspection)是面向对象语言和环境的一个强大特性,Objective-C和Cocoa在这个方面尤其的丰富.内省是对象揭示自己作为一个运行时对象的详细信息的一种能力.这些详细信息包括 ...

  6. Win7下配置nginx和php5

    本文链接:http://www.cnblogs.com/cnscoo/archive/2012/09/03/2668577.html 一.准备工作: OS:Windows7 SP1 Nginx: ng ...

  7. C++中使用心得

    1.struct成员默认访问方式是public,而 class默认访问方式是private! 2.exit函数终止程序执行会调用析构函数 ,abort函数终止程序不会调用析构函数! 3.静态局部变量直 ...

  8. 自选项目--手机锁屏软件--NABC分析

    N(Need 需求) 关键字:利用碎片时间加强对想记的事物的记忆.备忘.一般来说,锁屏目的大致有三点: 1.保护手机隐私 2.防止误操作手机 3.在不关闭系统软件的情况下节省电量 对于市面上已有的锁屏 ...

  9. win8安装matlab7.0

    win8和win7下安装matlab7.0要注意许多地方,其实安装最新版一般都是没有问题的. 不过最新版太大,校园网下载太难,所以还是用7.0 基本上在百度经验上已经包括了大部分的注意事项了,可以参考 ...

  10. php发送get、post请求的几种方法

    方法1: 用file_get_contents 以get方式获取内容 <?php $url='http://www.domain.com/'; $html = file_get_contents ...