了解远程EJB

时间:2016-06-17 13:41:33

标签: java java-ee jboss ejb

我正在使用JBoss和EJB,我使用jboss-eap-quickstarts

我有server-side课程:

package org.jboss.as.quickstarts.ejb.remote.stateless;

import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless
@Remote(RemoteCalculator.class)
public class CalculatorBean implements RemoteCalculator {

    @Override
    public int add(int a, int b) {
        return a + b;
    }

    @Override
    public int subtract(int a, int b) {
        return a - b;
    }
}

我有client-side方法:

private static RemoteCalculator lookupRemoteStatelessCalculator() throws NamingException {
    final Hashtable jndiProperties = new Hashtable();
    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    final Context context = new InitialContext(jndiProperties);
    return (RemoteCalculator) context.lookup(
     "ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName()
  );
}

问题是:

  1. 已部署到服务器的内容? Class / Object /两者?怎么样 客户端找到类/对象吗?
  2. ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName()是如何帮助的,因此它不知道 host:port
  3. CalculatorBeanserver处执行client逻辑的位置 Server方面?如果它是在jvm处执行的,那又怎么样呢 两个var app = angular .module('MyApp', []) .controller('Main', ['$scope', function($scope) { var vm = this; vm.items = [ {id: 1, name: 'one'}, {id: 2, name: 'two'}, {id: 2, name: 'three'} ]; for (var i = 0; i < vm.items.length; i++) { $scope.$watch('ctrl.items[' + i + ']', function(newVal) { console.log(newVal); }, true); } } ]);之间的价值交换是否有效?

2 个答案:

答案 0 :(得分:3)

  1. 客户端找到类/对象,因为客户端依赖于服务器端(pom.xml文件)的接口。

  2. 由于文件jboss-eap-quickstarts/ejb-remote/client/src/main/resources/jboss-ejb-client.properties,它找到了host:port 请注意,您可以将服务器配置为在不同的端口上公开您的服务

  3. CalculatorBean逻辑将在服务器端执行。

  4. 对于我没有回答的所有问题,(部署在哪里,jvm之间的值交换以及JNDI地址(ejb:/ ...)如何允许客户端找到正确的服务) ,您应该阅读有关JNDI和EJB如何工作的信息。

    这是一个好的开始:

    JNDI: http://www.javaworld.com/article/2076888/core-java/jndi-overview--part-1--an-introduction-to-naming-services.html

    的EJB: http://www.javaworld.com/article/2071724/java-web-development/ejb-fundamentals-and-session-beans.html

答案 1 :(得分:2)

EJB基于RMI (remote method invocation) over IIOP的概念,有助于将引入java世界。

在服务器端,有三个部分:

  1. EJB实现 - 包含实现方法的具体类。
  2. Home接口 - 扩展SELECT * FROM `schedules` WHERE date_format( `ScheduleDate` , "%m" ) <= date_format( NOW( ) , "%m" ) ORDER BY `ScheduleDate` DESC LIMIT 0 , 30; 的接口,必须包含javax.ejb.EJBHome方法。由客户端代码用于创建bean实例。
  3. 远程接口 - 扩展create()接口,用于声明您希望客户端代码应该能够访问的所有方法。
  4. 在客户端,您必须先javax.ejb.EJBObject ejb。这是JNDI的图片。不需要lookup,因为您必须在服务器端的Java命名目录中注册bean。在您的案例中,此注册表使用名称(由host:port表示)。

    这是由服务器发布的,客户端使用它来访问Home接口。这反过来使您可以访问bean中已在远程接口中声明的所有已实现的方法。

    希望这能解决你的三个问题。