0

在我看来,GoogleAppEngine 不支持 Java 的“NetworkInterface”——考虑到 GAE 对 Java .net 的支持有限,我想这并不奇怪。但是,我确实想使用 BSON Java 库将我的字符串转换为 BSON 对象(ObjectID)。问题是它使用以下内容作为 ObjectId 生成的一部分:

StringBuilder sb = new StringBuilder();
Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();
while ( e.hasMoreElements() ){
    NetworkInterface ni = e.nextElement();
    sb.append( ni.toString() );
}
machinePiece = sb.toString().hashCode() << 16;

这在使用 GoogleAppEngine 时显然是有问题的。有谁知道我可以在上述情况下使用的 GAE 支持的NetworkInterface的替代方案?

这真的让我把头发扯掉了!

作为参考,有问题的代码出现在以下文件的第 356 行和第 362 行之间: https://github.com/mongodb/mongo-java-driver/blob/2.11.x/src/main/org/bson/types/ObjectId。爪哇

4

2 回答 2

0

这取决于你的目标是什么——如果你想创建一个基于本地(虚拟)机器的哈希码,就像这段代码大致在做的那样,你可以使用com.google.appengine.api.utils.SystemProperty.instanceReplicaIdorcom.google.appengine.api.modules.ModulesService.getCurrentInstanceId()并获取他们的哈希码。

如果您真的想将哈希码与可用网络接口的唯一组合相关联,则需要使用另一个平台。

于 2014-12-12T05:32:43.907 回答
0

如果您的应用程序必须使用 mongoDB,我建议您切换到托管 vm

托管 VM 将允许您完全访问所有 J​​ava。

如果您仍处于开发初期,我建议您查看是否可以为您的后端进行数据存储。使用像 GAE 这样的平台最大的节省时间是应用程序堆栈的自动扩展和自动维护。

于 2014-12-10T22:40:55.760 回答