在我看来,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
答案 0 :(得分:0)
如果您必须为您的应用程序使用mongoDB,我建议您切换到managed vm。
托管虚拟机将允许您拥有对所有Java的完全访问权限。
如果您还处于开发阶段,我建议您查看是否可以为后端进行数据存储。使用像GAE这样的平台节省的最大时间是自动扩展和自动维护应用程序堆栈。
答案 1 :(得分:0)
这取决于你的目标是什么 - 如果你想基于本地(虚拟)机器创建一个哈希码,因为这个代码大概似乎在做,你可以使用com.google.appengine.api.utils.SystemProperty.instanceReplicaId
或com.google.appengine.api.modules.ModulesService.getCurrentInstanceId()
和得到他们的哈希码。
如果您确实希望将哈希码与可用网络接口的唯一组合相关联,则需要使用其他平台。