我正在使用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()
);
}
问题是:
Class
/ Object
/两者?怎么样
客户端找到类/对象吗? ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" +
RemoteCalculator.class.getName()
是如何帮助的,因此它不知道
host:port
? CalculatorBean
或server
处执行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);
}
}
]);
之间的价值交换是否有效?答案 0 :(得分:3)
客户端找到类/对象,因为客户端依赖于服务器端(pom.xml
文件)的接口。
由于文件jboss-eap-quickstarts/ejb-remote/client/src/main/resources/jboss-ejb-client.properties
,它找到了host:port
请注意,您可以将服务器配置为在不同的端口上公开您的服务。
CalculatorBean
逻辑将在服务器端执行。
对于我没有回答的所有问题,(部署在哪里,jvm之间的值交换以及JNDI地址(ejb:/ ...
)如何允许客户端找到正确的服务) ,您应该阅读有关JNDI和EJB如何工作的信息。
这是一个好的开始:
答案 1 :(得分:2)
EJB基于RMI (remote method invocation) over IIOP的概念,有助于将corba引入java世界。
在服务器端,有三个部分:
SELECT *
FROM `schedules`
WHERE date_format( `ScheduleDate` , "%m" ) <= date_format( NOW( ) , "%m" )
ORDER BY `ScheduleDate` DESC
LIMIT 0 , 30;
的接口,必须包含javax.ejb.EJBHome
方法。由客户端代码用于创建bean实例。create()
接口,用于声明您希望客户端代码应该能够访问的所有方法。 在客户端,您必须先javax.ejb.EJBObject
ejb。这是JNDI的图片。不需要lookup
,因为您必须在服务器端的Java命名目录中注册bean。在您的案例中,此注册表使用名称(由host:port
表示)。
这是由服务器发布的,客户端使用它来访问Home接口。这反过来使您可以访问bean中已在远程接口中声明的所有已实现的方法。
希望这能解决你的三个问题。