- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于这篇文章:http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/是一个如何运行 JavaSpaces 客户端的教程。我在 Eclipse 中编写了这些类,启动了 Launch-All 脚本并运行示例。有用。之后,我将这些类导出到可执行 jar (JavaSpaceClient.jar) 中,并使用以下命令尝试该 jar: java -jar JavaSpaceClient.jar它工作正常,给了我结果:正在寻找 JavaSpace...JavaSpace 已被发现。将消息写入空间...正在读取来自空间的消息...读取的消息是:Здраво JavaSpace свете!
我的问题是,当我将此 jar 文件移动到另一台 LAN 计算机上时,当我键入相同的命令时,它会显示错误。这是错误:
cica@cica-System-Name:~/Desktop$ java -jar JavaSpaceClient.jar
Searching for a JavaSpace...
Jul 27, 2011 11:20:54 PM net.jini.discovery.LookupDiscovery$UnicastDiscoveryTask run
INFO: exception occurred during unicast discovery to biske-Inspiron-1525:4160 with constraints InvocationConstraints[reqs: {}, prefs: {}]
java.net.UnknownHostException: biske-Inspiron-1525
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:175)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
at java.net.Socket.connect(Socket.java:546)
at java.net.Socket.connect(Socket.java:495)
at com.sun.jini.discovery.internal.MultiIPDiscovery.getSingleResponse(MultiIPDiscovery.java:134)
at com.sun.jini.discovery.internal.MultiIPDiscovery.getResponse(MultiIPDiscovery.java:75)
at net.jini.discovery.LookupDiscovery$UnicastDiscoveryTask.run(LookupDiscovery.java:1756)
at net.jini.discovery.LookupDiscovery$DecodeAnnouncementTask.run(LookupDiscovery.java:1599)
at com.sun.jini.thread.TaskManager$TaskThread.run(TaskManager.java:331)
我只是写了“Searching for JavaSpace...”,过了一会儿就打印了这些错误消息。有人可以帮我解决这个错误吗?
编辑:对于发现,我使用在互联网上找到的 LookupDiscovery 类:
import java.io.IOException;
import java.rmi.RemoteException;
import net.jini.core.lookup.ServiceRegistrar;
import net.jini.core.lookup.ServiceTemplate;
import net.jini.discovery.LookupDiscovery;
import net.jini.discovery.DiscoveryListener;
import net.jini.discovery.DiscoveryEvent;
/**
A class which supports a simple JINI multicast lookup. It doesn't register
with any ServiceRegistrars it simply interrogates each one that's
discovered for a ServiceItem associated with the passed interface class.
i.e. The service needs to already have registered because we won't notice
new arrivals. [ServiceRegistrar is the interface implemented by JINI
lookup services].
@todo Be more dynamic in our lookups - see above
@author Dan Creswell (dan@dancres.org)
@version 1.00, 7/9/2003
*/
public class Lookup implements DiscoveryListener {
private ServiceTemplate theTemplate;
private LookupDiscovery theDiscoverer;
private Object theProxy;
/**
@param aServiceInterface the class of the type of service you are
looking for. Class is usually an interface class.
*/
public Lookup(Class aServiceInterface) {
Class[] myServiceTypes = new Class[] {aServiceInterface};
theTemplate = new ServiceTemplate(null, myServiceTypes, null);
}
/**
Having created a Lookup (which means it now knows what type of service
you require), invoke this method to attempt to locate a service
of that type. The result should be cast to the interface of the
service you originally specified to the constructor.
@return proxy for the service type you requested - could be an rmi
stub or an intelligent proxy.
*/
Object getService() {
synchronized(this) {
if (theDiscoverer == null) {
try {
theDiscoverer =
new LookupDiscovery(LookupDiscovery.ALL_GROUPS);
theDiscoverer.addDiscoveryListener(this);
} catch (IOException anIOE) {
System.err.println("Failed to init lookup");
anIOE.printStackTrace(System.err);
}
}
}
return waitForProxy();
}
/**
Location of a service causes the creation of some threads. Call this
method to shut those threads down either before exiting or after a
proxy has been returned from getService().
*/
void terminate() {
synchronized(this) {
if (theDiscoverer != null)
theDiscoverer.terminate();
}
}
/**
Caller of getService ends up here, blocked until we find a proxy.
@return the newly downloaded proxy
*/
private Object waitForProxy() {
synchronized(this) {
while (theProxy == null) {
try {
wait();
} catch (InterruptedException anIE) {
}
}
return theProxy;
}
}
/**
Invoked to inform a blocked client waiting in waitForProxy that
one is now available.
@param aProxy the newly downloaded proxy
*/
private void signalGotProxy(Object aProxy) {
synchronized(this) {
if (theProxy == null) {
theProxy = aProxy;
notify();
}
}
}
/**
Everytime a new ServiceRegistrar is found, we will be called back on
this interface with a reference to it. We then ask it for a service
instance of the type specified in our constructor.
*/
public void discovered(DiscoveryEvent anEvent) {
synchronized(this) {
if (theProxy != null)
return;
}
ServiceRegistrar[] myRegs = anEvent.getRegistrars();
for (int i = 0; i < myRegs.length; i++) {
ServiceRegistrar myReg = myRegs[i];
Object myProxy = null;
try {
myProxy = myReg.lookup(theTemplate);
if (myProxy != null) {
signalGotProxy(myProxy);
break;
}
} catch (RemoteException anRE) {
System.err.println("ServiceRegistrar barfed");
anRE.printStackTrace(System.err);
}
}
}
/**
When a ServiceRegistrar "disappears" due to network partition etc.
we will be advised via a call to this method - as we only care about
new ServiceRegistrars, we do nothing here.
*/
public void discarded(DiscoveryEvent anEvent) {
}
}
我的客户端程序尝试简单地搜索 JavaSpaces 服务并将 MessageEntry 写入其中,然后检索消息并将其打印出来。这是客户端程序:
import net.jini.space.JavaSpace;
public class SpaceClient {
public static void main(String argv[]) {
try {
MessageEntry msg = new MessageEntry();
msg.content = "Hello JavaSpaces wordls!";
System.out.println("Searching for JavaSpaces...");
Lookup finder = new Lookup(JavaSpace.class);
JavaSpace space = (JavaSpace) finder.getService();
System.out.println("JavaSpaces discovered.");
System.out.println("Writing into JavaSpaces...");
space.write(msg, null, 60*60*1000);
MessageEntry template = new MessageEntry();
System.out.println("Reading message from JavaSpaces...");
MessageEntry result = (MessageEntry) space.read(template, null, Long.MAX_VALUE);
System.out.println("Message: "+result.content);
} catch(Exception e) {
e.printStackTrace();
}
}
}
当然这是 MessageEntry 类:
import net.jini.core.entry.*;
public class MessageEntry implements Entry {
public String content;
public MessageEntry() {
}
public MessageEntry(String content) {
this.content = content;
}
public String toString() {
return "MessageContent: " + content;
}
}
编辑2:我在两台 Windows 计算机上进行了发现。之后我尝试了 Windows - Ubuntu 组合,但它不起作用。也许存在一些网络问题?当我互相 ping 通时一切正常。也许 Ubuntu 上存在一些 DNS 问题..
编辑3:Windows - 如果 JavaSpaces 服务在 Windows 上启动并且客户端程序在 Ubuntu 上,则 Ubuntu 组合可以工作。当我尝试执行相反操作时,在 Ubuntu 上运行 JavaSpaces 服务并在 Windows 上运行客户端时会发生错误。显然Ubuntu有一些问题。 Ubuntu已经默认安装了OpenJDK。我安装了Oracle JDK,并设置了JAVA_HOME并将JAVA_HOME/bin放入PATH变量中。我想知道也许不同版本的Java有一些问题,也许我没有使用正确的版本。
最佳答案
您正在运行的服务注册器(在端口 4160 的主机 biske-Inspiron-1525 上)可能发现其主机名不正确(没有域名),因此使用短主机名发送公告。因此,在发现服务注册器后,客户端随后尝试与服务注册器建立连接时,如果该服务注册器位于不同的域中,则可能无法解析主机名。
要确保服务注册器使用正确的主机名运行,请尝试使用以下命令行属性启动它:
-Dcom.sun.jini.reggie.unicastDiscoveryHost="biske-Inspiron-1525.and.its.domain"
关于java - Jini/JavaSpaces 发现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6851983/
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我需要从 JavaSpaces 开始,我找到了 this文章。但是我找到了 JINI 库并下载了它,但找不到 JavaSpaces 库。是转移到 JINI 还是什么? 最佳答案 任何笔记都有两个 Ja
我过去使用过 GigaSpaces,我想知道是否可以以类似的方式使用 Ignite。具体来说,我需要实现主从模式,其中一组进程将对象写入内存数据网格,另一组进程读取这些对象,进行一些处理,并可能将结果
关于这篇文章:http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/是一个如何运行 JavaSpaces 客户端的教程。我在
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
两个 Java 程序必须相互通信,为此我找到了两种可能性 使用套接字 使用 JavaSpaces 查看描述后,我发现 JavaSpaces 显然是更好的解决方案。可悲的是,我无法让它运行。 Ever
根据相关帖子 ( see here ) 的建议,我想知道 GWT 是否支持 Javaspaces 技术? 最佳答案 不。但可以在 GWT 上实现它。不确定有人这样做过。 关于java - GWT 支持
我一直在尝试设置一些 JavaSpaces 的东西,但我遇到的问题很奇怪。 假设这是我要放置的对象(在本例中不使用 Object,只是试图混淆/概括): import net.jini.core.en
我对这个论坛抱有很大的怀疑,但我愿意感到惊喜;)向那些让我重回正轨的人表示敬意和巨大的业力。 我正在尝试使用 JavaSpaces ( http://www.dancres.org/blitz/bli
当尝试分发需要多级处理管道的工作时,JMS 与 JavaSpaces 的通信、同步和吞吐量成本限制是什么? 最佳答案 如果您需要 SEDA,从一个阶段发送到另一个阶段,那么 JMS 实现通常会更快且更
我需要设置 Blitz JavaSpaces (here) 。在 Blitz 安装指南中,所需的软件包之一是 the starter kit for JINI 2.1 ,但提供的链接已损坏,我似乎在其
我们正在尝试从 SUSE Linux Enterprise Server 11 (java-1_7_0-ibm) 运行一个进程(代理),该进程连接到部署在另一台 Linux 计算机上的 Javaspa
我是一名优秀的程序员,十分优秀!