英文参考地址

https://docs.jboss.org/author/display/AS71/Remote+EJB+invocations+via+JNDI+-+EJB+client+API+or+remote-naming+project

要解决的问题

公司的底层架构中的Ejb的远程调用通过Controller调用的Bean,所有现在存在的问题就是业务逻辑都写到了Controller,有一些业务得不到复用,方法得不到复用、分布式事务无法控制等等,所以咱们急需把业务写到Bean的实现里面,因为咱们是Bean调用Bean,Bean是在Jboss的容器内部,所以咱们是可以理解为服务器调用服务器的Bean,以前是客户端调用服务器的远程调用方式。

此方案解决的问题

1:原先远程调用的写到代码中写死的代码和端口,用户名等信息,不利于系统变动

2:分布式事务的解决

3:所有系统的统一管理(stonlone.xml的内容)

需要改的的地方不是很多,为了统一咱们这种服务器调用服务器(Bean调Bean方式)

Jboss服务器需要的修改

找到自己的Jboss的D:\jboss\jboss-eap-6.2\standalone\configuration中的standalone.xml

1:<security-realms>节点下添加如下代码

<span style="font-size:18px;"><management>
<security-realms>
...
<security-realm name="ejb-security-realm">
<server-identities>
<secret value="IWFkbWluMTIz"/>
</server-identities>
</security-realm>
</security-realms>
... </span>

为了统一管理和配置(以下value的值密码为(!admin123)是根据Base64编码加密之后得到,大家现在可以先不用管)

添加完后本借点的全视图

<span style="font-size:18px;"><security-realms>
<security-realm name="ManagementRealm">
<authentication>
<local default-user="$local"/>
<properties path="mgmt-users.properties" relative-to="jboss.server.config.dir"/>
</authentication>
<authorization map-groups-to-roles="false">
<properties path="mgmt-groups.properties" relative-to="jboss.server.config.dir"/>
</authorization>
</security-realm>
<security-realm name="ApplicationRealm">
<authentication>
<local default-user="$local" allowed-users="*"/>
<properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
</authentication>
<authorization>
<properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
</authorization>
</security-realm>
<span style="color:#FF6666;"><security-realm name="ejb-security-realm">
<server-identities>
<secret value="IWFkbWluMTIz"/>
</server-identities>
</security-realm></span>
</security-realms>
</span>

2:在<socket-binding-group>节点下添加如下代码意思为所要调用的jboss服务器的ip和远程端口号(如果你需要调用多个)

<span style="font-size:18px;"><outbound-socket-binding name="remote-ejb">
<remote-destination host="192.168.*.*" port="4444"/>
</outbound-socket-binding>
</span>

添加完后的这个节点下的代码

<span style="font-size:18px;"><socket-binding-group name="standard-sockets" default-interface="any" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9991}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
<socket-binding name="ajp" port="8009"/>
<socket-binding name="http" port="8080"/>
<socket-binding name="https" port="8443"/>
<socket-binding name="remoting" port="4447"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
<outbound-socket-binding name="remote-ejb">
<remote-destination host="192.168.*.*" port="4444"/>
</outbound-socket-binding>
<outbound-socket-binding name="remote-ejb2">
<remote-destination host="192.168.*.*" port="4447"/>
</outbound-socket-binding>
</socket-binding-group>
</span>

如果是需要远程调用多个系统的Jboss服务器,配置

3:在<subsystem xmlns="urn:jboss:domain:remoting:1.1">

节点下添加如下代码(注意红色的ejb-security-realm和第一步的名称相对应的),username为提供服务的Jboss服务器添加的把b类型用户的名称,密码默认为(!admin123),这个节点配置的是SSL的一种安全协议机制,咱们现在把它改成false,即不采取这种安全策略

<span style="font-size:18px;"> <outbound-connections>
<remote-outbound-connection name="remote-ejb-connection" outbound-socket-binding-ref="remote-ejb" security-realm="ejb-security-realm" username="adminjc">
<properties>
<property name="SASL_POLICY_NOANONYMOUS" value="false"/>
<property name="SSL_ENABLED" value="false"/>
</properties>
</remote-outbound-connection>
</outbound-connections> </span>

基础:adminjc  权限adminqx 考试:adminks  评教:adminpj  新生:adminxs

密码通知都为(!admin123)

代码中需要修改的地方

1:大家只需要在自己的ear如下图所示添加一个jboss-ejb-client.xml,把下面的附件拷过去即可,不用做任何修改

jboss-ejb-client.xml中的内容

<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<jboss-ejb-client xmlns="urn:jboss:ejb-client:1.0">
<client-context>
<ejb-receivers>
<remoting-ejb-receiver outbound-connection-ref="remote-ejb-connection"/>
</ejb-receivers>
</client-context>
</jboss-ejb-client></span>

2:咱们底层修封装了关于远程调用的方法(Bean调用Bean),架构底层中封装了lookup查找相应远程bean的接口的方法

在自己一条线的Bean的实现方法里面需要调用其他系统或者其他模块的Bean在自己的方法如下写即可

QuestionTypesBeanaa= (QuestionTypesBean)this.lookupRemoteBean("itoo-exam-systemmanage-questiontypes-ear/itoo-exam-systemmanage-questiontypes-core-0.0.1-SNAPSHOT/questionTypesBeanImpl!com.tgb.itoo.exam.service.QuestionTypesBean");

今后新线的开发和现有系统的注意事项

1:现有已经开发好的线,如果是增删改是调用其他系统的,而现在是在Controller调用的,是不受EJB分布式事务(JTA)控制的,会出现数据的不准确性,所以为了提高数据的正确性,大家需要把此种方法的调用在自己的Bean的实现里面调用

2:系统内部有把其他Core打包到自己的ear里面,不利于后期的维护

3:远程调用的用户名和密码以前咱们都是在xml里面,等项目开发部署后如果改变服务器不利于项目的迁移

4:分布式事务的解决

总结

        我们四个小伙伴整个过程中参考了英文的文档,时间长花费在了看英文文档上面,对有些专业名词和环境下刚开始理解的不深刻,绕了点弯,总结重要的一句“学好英语是腾飞的翅膀”,继续努力啊。

Ejb远程调用-jboss服务器调用服务器-Bean调用Bean的更多相关文章

  1. weblogic的ejb远程调用

    这是一篇对EJB远程调用的简单范例.      1.环境:win7  + weblogic 12c + myeclipse8.5      2.目的:实现在myeclispe中对weblogic中EJ ...

  2. 关于WCF报错之调用方未由服务器进行身份验证

    在我们部署好WCF服务以后,调用WCF服务会出现”调用方未由服务器进行身份验证”的错误.这个错误是怎么造成的呢? 通常我们在创建WCF后,用本机调试,一切正常,没有任何问题.其实用本机测试的时候,服务 ...

  3. 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分

    最近研发BDC 云开发部署平台的数据路由及服务管理器意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提 ...

  4. 解决WCF 调用方未由服务器进行身份验证或消息包含无效或过期的安全上下文令牌

    错误描述: 1. WCF:调用方未由服务器进行身份验证 2. 无法处理消息.这很可能是因为操作“http://tempuri.org/ISCCLSvc/GetCarriersByWareHouse”不 ...

  5. 拦截所有AJAX调用,重点处理服务器异常

    拦截所有AJAX调用,重点处理服务器异常 背景 上篇文章http://www.cnblogs.com/happyframework/p/3241063.html介绍了如何以AOP的形式处理服务器异常, ...

  6. WCF:调用方未由服务器进行身份验证

    错误描述: 1. WCF:调用方未由服务器进行身份验证 2. 无法处理消息.这很可能是因为操作“http://tempuri.org/ISCCLSvc/GetCarriersByWareHouse”不 ...

  7. 使用Navicat远程连接阿里云ECS服务器上的MySQL数据库

    一.必须给服务器的安全组规则设置端口放行规则,在管理控制台中设置: 之后填写配置,授权对象是授权的IP,其中0.0.0.0/0为所有IP授权,之后保存; 二.Navicat使用的配置 在编辑连接处,要 ...

  8. jvisualvm 远程连接jboss

    由于项目中使用jboss 作为web容器,每当项目上线时需要使用loadrunner对项目进行性能压测,这时就需要实时观察JVM的一些参数.想使用jvisualvm借助jstatd远程连接服务器上面的 ...

  9. JAVA与.NET的相互调用——通过Web服务实现相互调用

    JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方.而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发.而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候 ...

随机推荐

  1. 半径无关快速高斯模糊实现(附完整C代码)

    之前,俺也发过不少快速高斯模糊算法. 俺一般认为,只要处理一千六百万像素彩色图片,在2.2GHz的CPU上单核单线程超过1秒的算法,都是不快的. 之前发的几个算法,在俺2.2GHz的CPU上耗时都会超 ...

  2. [SDOI 2012]Longge的问题

    Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一 ...

  3. 小明搬家_NOI导刊2010提高(05)

    题目描述 小明要搬家了,大家都来帮忙. 小明现在住在第N楼,总共K个人要把X个大箱子搬上N楼. 最开始X个箱子都在1楼,但是经过一段混乱的搬运已经乱掉了.最后大家发现这样混乱地搬运过程效率太低了,于是 ...

  4. POI SZP

    贪心: 初始所有点为白色,对于点i,若a[i]为白色则将其染成与i不同的颜色. 证明:若点i确定为白色,a[i]染白色也只能提供一个黑点,故a[i]染黑色不会差:若所有指向i的点均为黑色,则i只能是白 ...

  5. ●BZOJ 4310 跳蚤

    ●赘述题目 给出一个字符串,要求分成k个子串,然后求出每个子串的字典序最大的子串(我称它为子子串),要使这k个子子串中的字典序最大的那个串(即魔力串)最小.输出该魔力串. (本题个人感觉很好,比较综合 ...

  6. ●BZOJ 3996 [TJOI2015]线性代数

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3996 题解: 好题啊.(不太熟悉矩阵相关,所以按某些博主的模型转换来理解的)首先,那个式子可 ...

  7. bzoj3212 Pku3468 A Simple Problem with Integers 线段树

    3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 2046  So ...

  8. Ubuntu 16.04 LTS安装搜狗拼音输入法网易云音乐 Remarkable

    第一步 首先在官网上面,下载最新的搜狗拼音输入法 Linux 版本. 第二步 进入命令行 Ctrl+Alt+T sudo dpkg -i sogoupinyin_2.1.0.0082_amd64.de ...

  9. 安装yum源和gcc编译器遇到的问题

    这两天我试着在VMware虚拟机里安装gcc,遇到了不少问题 1.   安装yum源 我搭建的是光盘yum源(有两种方法搭建yum源,另外一种是网络yum源,但至今没弄懂我的网络yum源为什么不成功) ...

  10. React Suite v3.0 正式版发布

    React Suite v3.0 正式版发布 相信很多人会好奇,React Suite 是什么? React Suite 是 HYPERS 前端团队和 UX 团队开源的一套基于 React 的 UI ...