GoogleAppEngine不支持NetworkInterface?

时间:2014-12-10 18:56:36

标签: java mongodb google-app-engine bson network-interface

在我看来,Javas" NetworkInterface"在GoogleAppEngine上不受支持 - 考虑到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支持 我可以在上述情况下使用?

它真的让我把头发撕掉了!

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

2 个答案:

答案 0 :(得分:0)

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

托管虚拟机将允许您拥有对所有Java的完全访问权限。

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

答案 1 :(得分:0)

这取决于你的目标是什么 - 如果你想基于本地(虚拟)机器创建一个哈希码,因为这个代码大概似乎在做,你可以使用com.google.appengine.api.utils.SystemProperty.instanceReplicaIdcom.google.appengine.api.modules.ModulesService.getCurrentInstanceId()和得到他们的哈希码。

如果您确实希望将哈希码与可用网络接口的唯一组合相关联,则需要使用其他平台。