小编Yon*_*Yon的帖子

"在注释ConcurrentHashMap时,在hibernate中非法尝试将非集合映射为@OneToMany,@ ManyToMany或@CollectionOfElements"

我试过注释一个属性访问器,其返回值是一个映射,如下所示:

@MapKeyColumn(name="parameter_name")
@ElementCollection
public ConcurrentHashMap<String, Serializable> getParameterValues()
Run Code Online (Sandbox Code Playgroud)

这符合hibernate用户指南(第2.2.5.3.4节).但是,我得到:

org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: ConfigurationParameterBag.parameterValues
at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:324)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1723)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:1002)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:130)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:92)
Run Code Online (Sandbox Code Playgroud)

java hibernate

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

Java中的高效BigInteger

我们的产品中有一组位置需要BigInteger,因为数字可能相当长.然而,在超过90%的情况下,它们实际上并不那么长,并且很容易被包含在一起.

看看BigInteger的实现,在Long足够的情况下使用BigInteger会非常浪费.

是否有意义创建一个具有BigInteger(除法,乘法等)函数的接口,并且由BigInteger的子类和包装Long的类实现?就像是:

Interface: EfficientBigInteger
Class 1: MyBigInteger extends BigInteger imlpements EfficientBigInteger
Class 2: MyLong implements EfficientBigInteger (this will contain a Long, as we cannot extend the Long class)
Run Code Online (Sandbox Code Playgroud)

也许我们在这方向错了?

谢谢,Yon

更新:这些对象(Long或BigInteger)存储在内存中已有一段时间了,因为它们可以帮助我们识别与之交互的系统的有问题的行为.因此,内存占用可能是个问题.这是我们试图避免的问题.BigInteger类有几个字段(signum,mag数组,bitcount等等),它们大致是封装Long的类的两倍(考虑到首先拥有Object的内存成本).这意味着我们使用了很多东西的占地面积增加了一倍.

java biginteger

7
推荐指数
2
解决办法
4536
查看次数

使用Jenkins的SVN"不受版本控制"失败

我在Jenkins有一个项目,有许多SVN存储库可供使用.每当我构建时,工作区清理后的第一个构建都会失败,并出现如下错误.没有改变任何东西,下一个构建将是成功的.

如果我将项目设置为在构建之前始终清理工作区,它将始终失败.每次都有不同的SVN存储库.

我尝试转移到SVN 1.6,尝试验证HTTPS证书是否正常,不确定还有什么要查找的?

ERROR: Failed to parse svn info for     https://subversion.assembla.com/svn/<PROJECT NAME HIDDEN>/trunk
org.tmatesoft.svn.core.SVNException: svn:     '/tmp/data/hudson/jobs/Build_ISO/workspace/ch.ethz.ssh2' is not under version control
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:64)
    at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:51)
    at org.tmatesoft.svn.core.wc.SVNWCClient$13.handleError(SVNWCClient.java:3314)
    at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.walkEntries(SVNWCAccess.java:758)
    at org.tmatesoft.svn.core.internal.wc.admin.SVNWCAccess.walkEntries(SVNWCAccess.java:741)
at org.tmatesoft.svn.core.wc.SVNWCClient.crawlEntries(SVNWCClient.java:3294)
at org.tmatesoft.svn.core.wc.SVNWCClient.doInfo(SVNWCClient.java:2498)
at org.tmatesoft.svn.core.wc.SVNWCClient.doInfo(SVNWCClient.java:2865)
at hudson.scm.SubversionSCM$BuildRevisionMapTask.invoke(SubversionSCM.java:1023)
at hudson.scm.SubversionSCM$BuildRevisionMapTask.invoke(SubversionSCM.java:1001)
at hudson.FilePath.act(FilePath.java:832)
at hudson.FilePath.act(FilePath.java:814)
at hudson.scm.SubversionSCM.checkout(SubversionSCM.java:685)
at hudson.model.AbstractProject.checkout(AbstractProject.java:1212)
at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:579)
at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:468)
at hudson.model.Run.run(Run.java:1410)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
at hudson.model.ResourceController.execute(ResourceController.java:88)
at hudson.model.Executor.run(Executor.java:238)
Caused by: org.tmatesoft.svn.core.SVNErrorMessage: svn: '/tmp/data/hudson/jobs/Build_ISO/workspace/ch.ethz.ssh2' is not under version control
at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:163)
at org.tmatesoft.svn.core.SVNErrorMessage.create(SVNErrorMessage.java:118)
... 17 more
Run Code Online (Sandbox Code Playgroud)

svn hudson jenkins

7
推荐指数
2
解决办法
9650
查看次数

高CPU,可能是由于上下文切换?

我们的一台服务器在我们的应用程序中遇到了非常高的CPU负载.我们查看了各种统计数据,并且在找到问题根源时遇到了问题.

目前的理论之一是涉及太多线程,我们应该尝试减少并发执行线程的数量.只有一个主线程池,有3000个线程,还有一个使用它的WorkManager(这是Java EE - Glassfish).在任何给定时刻,需要并行执行大约620个单独的网络IO操作(也不能使用java.NIO).此外,大约有100个操作没有涉及IO,也是并行执行的.

这种结构效率不高,我们想看看它是否真的造成了损害,或者只是不好的做法.原因是在这个系统中任何变化都非常昂贵(就工时而言)所以我们需要一些问题的证据.

所以现在我们想知道线程的上下文切换是否是原因,因为线程比所需的并发操作多得多.查看日志,我们发现在给定的秒内平均执行了14个不同的线程.如果我们考虑到两个CPU的存在(见下文),则每个CPU有7个线程.这听起来不是太多,但我们想验证这一点.

那么 - 我们可以排除上下文切换或太多线程作为问题吗?

一般细节:

  1. Java 1.5(是的,它已经老了),运行在CentOS 5,64位Linux内核2.6.18-128.el5上
  2. 机器上只有一个Java进程,没有别的.
  3. 两个CPU,在VMware下.
  4. 8GB RAM
  5. 我们没有在机器上运行探查器的选项.
  6. 我们没有选择升级Java和OS.

更新 如下所述,我们在各种负载的测试服务器上进行了平均负载(使用正常运行时间)和CPU(使用vmstat 1 120)的捕获.我们在每次负载变化和测量之间等待15分钟,以确保系统在新负载周围稳定并且负载平均数更新:

50%的生产服务器工作负载:http://pastebin.com/GE2kGLkk

34%的生产服务器工作负载:http://pastebin.com/V2PWq8CG

25%的生产服务器工作负载:http://pastebin.com/0pxxK0Fu

随着负载的减少,CPU使用率似乎会降低,但不是非常激烈的水平(从50%变为25%并不是CPU使用率降低50%).负载平均值似乎与工作负载量无关.

还有一个问题:鉴于我们的测试服务器也是一个虚拟机,它的CPU测量是否会受到在同一主机上运行的其他虚拟机的影响(使上述测量无用)?

更新2 以三个部分附加线程的快照(pastebin限制)

第1部分:http://pastebin.com/DvNzkB5z

第2部分:http://pastebin.com/72sC00rc

第3部分:http://pastebin.com/YTG9hgF5

java multithreading

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

Java LinkedBlockingQueue能否在完成时发出信号?

我有一个生产者和单个消费者使用对象队列的情况.队列可能为空时有两种情况:

  1. 消费者处理对象的速度比生产者能够生成新对象的速度快(生成者在生成对象之前使用I/O).
  2. 生产者完成了生成对象.

如果队列为空,我希望消费者等到新对象可用或者直到生产者发出信号表明它已完成为止.

到目前为止,我的研究没有让我失望,因为我仍然得到了一个循环来检查队列和一个单独的布尔标志(isDone).鉴于没有办法等待多个锁(想到等待队列和标志),可以做些什么来解决这个问题?

java producer-consumer

6
推荐指数
1
解决办法
1503
查看次数

.NET Web服务客户端:呼叫失败后自动重试

我们有一个.NET客户端使用SSL调用Java Web服务。有时,由于连通性差而导致呼叫失败(.NET客户端是从最奇怪的位置使用的UI)。我们希望实现一种自动重试机制,该机制将在放弃之前自动重试失败的呼叫X次。仅应使用特定类型的连接异常(而不是由Web服务本身生成的异常)来完成此操作。

我们试图在绑定/通道级别上找到方法,但是失败了...有什么想法吗?

谢谢,yonadav

.net wcf web-services wcf-client

5
推荐指数
1
解决办法
2024
查看次数

在没有加密的Java中使用HTTPS

我们正在寻找一种允许我们在不加密的情况下使用HTTPS的解决方案.为什么?这是故事:

我们的产品(安装在客户处)连接到我们的服务器以获取更新,发布信息等.我们希望产品在发布数据之前验证它是否已连接到服务器(而不是冒名顶替者).我们还需要确保没有中间人攻击(即内容应该签名等).但是,我们的客户要求他们可以嗅探流量(Wireshark,tcpdump等)并查看整个交易的内容.这是出于合规性和安全性原因.

顺便说一句,我们的产品是用Java编写的.

有任何想法吗?

更新: 请原谅我,如果我没有使用正确的表格来回答答案,我在这个网站上相当新.

首先,感谢您的快速解答!

我们调查HTTPS可能性的原因是因为我们不想在这里发明新的协议.这不仅仅是工作量,而且发明自己的安全协议(即使只是为了签名)通常被认为是不好的做法.我们正在努力获得HTTPS在验证服务器方面的优势(重要的是,该服务器还提供可执行代码,这些代码可能非常大 - 我们不希望任何人提供恶意软件或使用大数据来支持我们的客户,只有在收到整个服务器之后系统会发现它很糟糕,以及确保MITM不会发生(消息签名本身).我们不介意是否有人对流量有所了解,因为它从未包含被视为机密的内容.而且,它没有

@Nate Zaugg - 不,这不是开玩笑.实际上令人惊讶的是,供应商现在使用HTTPS加密,并且没有得到严格合规性问题的客户的强烈抵制.

@erickson - 使用NULL密码套装的第一个解决方案看起来很有趣,我们将对此进行研究.第二种解决方案需要为每个客户提供一组密钥 - 而不是我们想管理的东西.

@ZZ Coder - 你的意思是使用null密码,你无法在Wireshark中查看内容吗?

java https

5
推荐指数
1
解决办法
1250
查看次数

JVM(64位1.5.0._22)在GCTaskThread崩溃

我们的一个开发服务器时不时地崩溃,报告看起来非常相似.我们认为这是由于内存不足,但我们想验证这一点.你们能协助这个过程吗?您可以在下面找到hs_err文件中的相关信息.

谢谢!延亨默

#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  SIGSEGV (0xb) at pc=0x00002b84b6dee37c, pid=4196, tid=1081399616
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (1.5.0_22-b03 mixed mode)
# Problematic frame:
# V  [libjvm.so+0x5b437c]
#

---------------  T H R E A D  ---------------

Current thread (0x000000005db44970):  GCTaskThread [id=4200]

siginfo:si_signo=11, si_errno=0, si_code=128, si_addr=0x0000000000000000


Heap
 PSYoungGen      total 291968K, used 291760K [0x00002aaada600000, 0x00002aaaec400000, 0x00002aaaec400000)
  eden space 291136K, 100% used [0x00002aaada600000,0x00002aaaec250000,0x00002aaaec250000)
  from space 832K, 75% used [0x00002aaaec250000,0x00002aaaec2ec288,0x00002aaaec320000)
  to …
Run Code Online (Sandbox Code Playgroud)

java jvm jvm-crash

5
推荐指数
1
解决办法
2322
查看次数

使用Eclipse远程运行Junit测试,就好像它在本地运行一样

我一直在搜索,阅读本网站和其他人的相关问题,但未能找到解决方案.奇怪的是,一个不存在让我感到奇怪,所以让我在这里详述我的问题:

我经常使用Junit4 + Eclipse来测试我的代码.在某些情况下,某些测试会占用大量CPU和/或内存,导致我的工作站在测试期间无法使用.这是我想要解决的痛苦.

我希望通过远程服务器获得完全相同的行为.我想要:

  1. 仍然能够设置断点并调试我的应用程序.
  2. 使用Eclipse中的Junit视图查看测试的进展情况.
  3. 单击按钮开始测试(允许构建过程和文件复制,但前提是有效).

在我看来,我设想将文件rsyncs到远程服务器的东西,在那里使用与本地机器上完全相同的参数启动java进程,使调试端口可用(不仅仅是localhost)并且eclipse挂钩到它使debug和junit视图都工作.

我怎么能这样做?

几个可能有助于我们找到解决方案的主要问题:

  1. Eclipse在本地运行时如何与java进程通信(出于调试目的和Junit视图)?
  2. 我如何参与为JUnit测试生成java进程的过程,以便将所需的文件复制到远程服务器上?
  3. 如何使进程远程而不是本地生成?
  4. 如何让Eclipse挂钩到远程主机而不是localhost?

java eclipse junit

3
推荐指数
1
解决办法
8923
查看次数