zoukankan      html  css  js  c++  java
  • 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.Finalinstandalone.bat,双击启动JBoss。
    启动成功:
    2)将生成的两个war文件复制到JBoss安装目录的这个文件夹:C:jboss-as-7.1.1.Finalstandalonedeployments。
    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)运行第二个测试函数的输出结果:

     

     搞掂~~~~

  • 相关阅读:
    RabbitMQ WindowServer2008R2 安装配置
    wpf的低调自定义属性面板PropertyGrid
    复旦大学2020--2021学年第二学期高等代数II期末考试情况分析
    复旦大学2020--2021学年第二学期(20级)高等代数II期末考试第七大题解答
    复旦大学2020--2021学年第二学期(20级)高等代数II期末考试第八大题解答
    复旦高等代数II(20级)每周一题
    复旦大学高等代数课程介绍
    consul 下线服务 服务注销脚本
    consul 集群搭建
    Linux Limit相关内容设置大全(值得收藏)
  • 原文地址:https://www.cnblogs.com/yangyquin/p/5341729.html
Copyright © 2011-2022 走看看