小编Nag*_*gyI的帖子

如何解决MongoDB中缺少事务的问题?

我知道这里有类似的问题,但如果我需要事务或使用原子操作两阶段提交,他们要么告诉我切换回常规RDBMS系统.第二种解决方案似乎是最佳选择.第三个我不想遵循,因为似乎很多事情都可能出错,我无法在各个方面进行测试.我很难重构我的项目来执行原子操作.我不知道这是否来自我有限的观点(到目前为止我只使用过SQL数据库),或者它是否真的无法完成.

我们想在我们公司试用MongoDB.我们选择了一个相对简单的项目 - 短信网关.它允许我们的软件向蜂窝网络发送SMS消息,并且网关执行肮脏的工作:实际上通过不同的通信协议与提供商进行通信.网关还管理消息的计费.申请服务的每个客户都必须购买一些积分.发送消息时,系统会自动降低用户的余额,如果余额不足,则拒绝访问.另外,由于我们是第三方SMS提供商的客户,我们也可能拥有自己的余额.我们也必须跟踪这些.

如果我减少了一些复杂性(外部计费,排队短信发送),我开始考虑如何用MongoDB存储所需的数据.来自SQL世界,我将为用户创建一个单独的表,另一个用于SMS消息,另一个用于存储有关用户余额的事务.假设我为MongoDB中的所有人创建了单独的集合.

想象一下SMS发送任务,在这个简化的系统中执行以下步骤:

  1. 检查用户是否有足够的余额; 如果没有足够的信用,请拒绝访问

  2. 使用详细信息和成本在SMS集合中发送和存储消息(在实时系统中,消息具有status属性,任务将接收它以进行传递,并根据SMS的当前状态设置SMS的价格)

  3. 通过发送消息的成本减少用户的余额

  4. 在事务集合中记录事务

那现在有什么问题?MongoDB只能在一个文档上进行原子更新.在之前的流程中,可能会发生某种错误,并且消息会存储在数据库中,但用户的余额未更新和/或未记录事务.

我提出了两个想法:

  • 为用户创建单个集合,并将余额作为字段,用户相关事务和消息存储为用户文档中的子文档.因为我们可以原子地更新文档,这实际上解决了事务问题.缺点:如果用户发送许多SMS消息,文档的大小可能会变大,并且可能达到4MB的文档限制.也许我可以在这种情况下创建历史文档,但我认为这不是一个好主意.另外,我不知道如果我将越来越多的数据推送到同一个大文档,系统会有多快.

  • 为用户创建一个集合,为事务创建一个集合.可以有两种交易:具有正余额变化的信用购买和具有负余额变化的消息.交易可能有一个子文件; 例如,在发送消息中,SMS的详细信息可以嵌入到事务中.缺点:我没有存储当前的用户余额,因此每次用户尝试发送消息时都要计算它,以判断消息是否可以通过.我担心随着存储事务数量的增加,这种计算会变慢.

我对选择哪种方法有点困惑.还有其他解决方案吗?我在网上找不到关于如何解决这些问题的最佳实践.我想许多试图熟悉NoSQL世界的程序员一开始就面临着类似的问题.

transactions mongodb

136
推荐指数
8
解决办法
7万
查看次数

在Eclipse中使用项目存储运行配置

我在NetBeans中编程,但我也习惯习惯Eclipse.我有一个Maven项目,我在NetBeans中开发了一个项目,导入后它在Eclipse中编译得很好.我正在使用NetBeans的Run或Debug功能,并且运行配置与项目一起存储非常舒服,因此我可以将其实际提交到版本控制中,其他人也可以使用它.假设我有一个具有主类的Java应用程序项目.要运行它,我需要为exec目标定义正确的类路径(实际上NetBeans在创建新项目时会自动为我执行此操作).

在Eclipse中,我必须定义运行配置,据我所知,它存储在工作区中但不存储在项目中.Eclipse中是否有类似的功能我正在寻找什么?

java eclipse

43
推荐指数
1
解决办法
2万
查看次数

Dart脚本是否会在浏览器中本机运行?

Dart语言看起来是一种非常好的技术,可以为Web构建Web应用程序.对我来说似乎没有可用的浏览器(还有?)可以本机运行Dart脚本.虽然Dart网站上有关于如何将这些脚本嵌入HTML的描述.我知道现在我必须将Dart脚本"编译"为Javascript.但是这种情况将来会改变,还是语言被设计为翻译成类似于Haxe的其他脚本标准?

html5 dart

41
推荐指数
4
解决办法
7191
查看次数

使用Jersey将REST资源作为List <T>获取

我正在尝试在Jersey中编写一个泛型函数,它可以用来通过REST获取相同类型的对象列表.我的基础是这个论坛中的信息:链接

@Override
public <T> List<T> fetchResourceAsList(String url) {
  ClientConfig cc = new DefaultClientConfig();
  Client c = Client.create(cc);
  if (userName!=null && password!=null) {
    c.addFilter(new HTTPBasicAuthFilter(userName, password)); 
  }
  WebResource resource = c.resource(url);
  return resource.get(new GenericType<List<T>>() {});
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.如果我尝试执行它,我会收到以下错误:SEVERE: A message body reader for Java class java.util.List, and Java type java.util.List<T>, and MIME media type application/xml was not found.

但是,如果我在没有模板化的情况下编写此函数(用实际的类名替换T),它就可以正常工作.当然,这种功能失去了它的意义.

有没有办法来解决这个问题?

java generics rest jersey

17
推荐指数
2
解决办法
2万
查看次数

如何为Maven设置Archiva内部+快照存储库?

我们正在尝试将Archiva用作中央和其他外部存储库的Maven代理,并将其作为我们的工件的快照存储,这些工件由Hudson从SVN自动构建并安装到快照存储库.

我无法将我的Maven客户端设置为一起使用内部和快照存储库.我的项目有一些外部依赖项(如log4j),可以正确地从Archiva内部存储库下载.此外,我的项目依赖于一个自己的项目,该项目的工件已经构建并安装到快照存储库中.但是,如果我尝试构建项目,Maven无法找到我的快照工件.

我的配置文件原来是这个设置:

<mirror>
  <id>company-internal</id>
  <name>Company's Archiva - Internal Repository</name>
  <url>http://www.mycompany.hu/archiva/repository/internal</url>
  <mirrorOf>*</mirrorOf>
</mirror>
Run Code Online (Sandbox Code Playgroud)

然后我添加了以下内容:

<mirror>
 <id>company-snapshots</id>
 <name>Company Archiva - Snapshots Repository</name>
 <url>http://www.mycompany.hu/archiva/repository/snapshots</url>
 <mirrorOf>apache.snapshots</mirrorOf>
</mirror>
Run Code Online (Sandbox Code Playgroud)

但是,Maven不会尝试在构建时查找snaphot存储库.我做错了什么?顺便说一下,我并没有真正得到<mirrorOf>元素的目的.我试图在内部镜像设置中替换它,central但这仍然无法解决我的问题.

java archiva maven

16
推荐指数
1
解决办法
1万
查看次数

如何组织混合HTTP服务器+ Web客户端Dart项目文件?

我打算创建一个纯Dart应用程序,其中HTTP服务器和Web客户端都是用Dart编写的.来自Java和Eclipse的最终目的是我可以在Dart编辑器中打开整个项目层次结构,并能够运行服务于客户端文件的服务器并调试应用程序的两端(服务器端使用DartVM,客户端使用Dartium) ).

我已经启动了Dart编辑器,在创建了一个简单的命令行应用程序作为服务器端的基础后,我对项目布局感到困惑.

直接服务器端代码文件(Web服务器boostrap类,处理程序和过滤器类)肯定会进入项目bin /文件夹.服务器端依赖项将进入项目的pubspec.yaml文件.

当服务器必须访问客户端应用程序文件(.dart文件,静态页面源等)以便将它们提供给浏览器时,问题就出现了.最简单的解决方案是在服务器项目中创建一个Web文件夹并将客户端Web文件放在那里,但这种方式(据我所知)服务器端依赖项被继承到客户端,因为我们仍然在同一个pubspec范围内.我不想要这个.

我考虑过在项目lib /文件夹中创建一个客户端库并将Web文件放在那里,但我不知道将完整的Web应用程序放到那里是多么好的做法.我想我必须将HTML和其他客户端静态文件放入lib的资产/子文件夹中.我很担心我会以这种方式从IDE中丢失Web应用程序辅助.

我也可以做的是将客户端放到一个单独的项目中,像Dart webapp项目一样组织它,它有自己的pubspec.yaml,然后以某种方式使它成为服务器应用程序的依赖项.我不知道这种方式服务器是否可以访问其他项目中的Web文件进行服务.这可能是最好的方法,因为它提供了客户端和服务器文件的清晰分离.

有人可以告诉我这样做的正确方法是什么?


更多解释.假设我正在使用单独的项目方法,正如其他人已经在答案中提出的那样,但我仍然希望运行能够在开发阶段为客户服务而没有任何花哨的黑客的服务器.服务器必须访问其他项目中的客户端文件.无论是Javascript还是Dart都没关系,无论如何都是静态文件.在开发过程中,我希望提供dart文件,因为Dartium可以显着提高它的直接Dart运行能力.

使用Java和Maven,我可以使客户端包成为服务器的运行时依赖,我可以简单地从类路径提供客户端文件.Dart是否支持以类似的方式访问pub依赖项的内部文件,或者唯一的方法是将所有内容放入客户端的资产文件夹中或使用相对路径hack?

project dart

13
推荐指数
1
解决办法
1291
查看次数

Nexus3:将特定的Maven存储库移动到另一个blob存储库中

我刚刚从Nexus 2升级安装了Nexus 3,并注意到每个Maven存储库现在都在默认的blob存储中.我想将发布存储库移动到一个单独的blob存储库中.实现这一目标的最简单方法是什么?

nexus maven nexus3

13
推荐指数
2
解决办法
2826
查看次数

线程中断:是否会取消即将到来的wait()调用?

我有一个具有传入作业队列的线程(LinkedList包含作业说明).wait()当没有工作要做时,线程会阻塞队列.外部作业调度程序对象notify()在将新作业放入队列时将其唤醒.

在关闭我的程序时,我调用interrupt()线程.InterruptedException当线程等待工作时,这会引发wait().我的问题是:如果我在没有阻塞但是做某种工作的情况下中断线程会发生什么,处理后的项目是队列中的最后一个(所以队列现在是空的)并且执行isInterrupted()在设置中断标志之前超过了检查所以wait()再次打电话?它会抛出一个InterruptedException因为已经设置了中断标志还是线程永远等待,因为新的作业永远不会到达队列并且没有人可以中断等待?

java concurrency multithreading wait

12
推荐指数
2
解决办法
1万
查看次数

以编程方式获取Maven工件

我正在寻找一个可用于从远程存储库中检索Maven工件的Java API.到目前为止我找到了Eclipse Ather,但它看起来很复杂,因此我需要更简单的东西.

我需要的是:

  • 我必须指定远程Maven存储库的位置
  • 我喜欢根据它的groupId + artifactId +版本获取工件
  • API必须提供工件的当前远程版本(考虑定期构建的SNAPSHOT工件,以便它们在其版本中具有生成的部分)
  • 返回工件的位置,首选HTTP URL(我将使用例如Apache HTTP Client自己获取它)
  • 可选地,检索作为所请求的工件的依赖的工件.

java api dependencies maven aether

12
推荐指数
1
解决办法
7508
查看次数

私有字段javadoc自动传播到getter/setter?

我用Javadoc记录了我的bean私有字段,解释了每个字段的用途.我可以以某种方式将这些文档传播给反复使用的getter/setter以减少文档的重复吗?至少是否有某种Javadoc宏?

java documentation javadoc

9
推荐指数
1
解决办法
2180
查看次数