这里有一些 关于JPA实体的讨论,以及哪些hashCode()/ equals()实现应该用于JPA实体类.大多数(如果不是全部)它们依赖于Hibernate,但我想讨论它们JPA实现中性(顺便说一下,我使用的是EclipseLink).
所有可能的实现都有各自的优点和缺点:
hashCode()/equals()合同一致性(不变性)为List/ Set操作据我所知,有三种选择:
Object.equals()和Object.hashCode()
hashCode()/ equals()工作hashCode()/ equals()坏了hashCode()/ equals()坏了我的问题是:
更新1:
通过" hashCode()/ equals()被破坏",我的意思是连续hashCode()调用可能会返回不同的值,也就是(当正确实施)不在的感觉打破ObjectAPI文档,但是当试图从检索改变实体引起的问题Map, Set或其他基于哈希的Collection.因此,在某些情况下,JPA实现(至少EclipseLink)将无法正常工作. …
如何使用ClassLoader.getResources()从类路径中查找recursivly资源?
例如
找到META-INF"目录" 中的所有资源:想象一下
getClass().getClassLoader().getResources("META-INF")
不幸的是,这只会检索URL到这个"目录".
所有资源命名bla.xml(recursivly)
getClass().getClassLoader().getResources("bla.xml")
但是这会返回一个空的Enumeration.
并作为一个奖金问题:如何ClassLoader.getResources()区别ClassLoader.getResource()?
我们公司几年来一直在使用eclipse(我们从0.7版开始使用WTP)
我目前正在使用WTP 3.2.3评估eclipse 3.6.2,它应该用WTP 3.0.4取代eclipse 3.4.2作为我们的主要IDE.
而且我不得不再次对性能问题感到非常失望:
WTP 3.2.3似乎比3.0.4慢得多.
事实上,我真的很想知道为什么每次发布时WTP会变慢.
我们的一个应用程序(动态Web项目)包含大约4000个java类和700个jsps/jsp片段.我们只需要基本的WTP功能来开发jsps,xmls和xsd.我们不需要像Dali那样的高级功能(JPA工具真的应该由webtools项目覆盖吗?),Libra或者首先是一个可视化的xml编辑器.
另一个有趣的观点是,WTP似乎会降低整个IDE的速度.SWT在几秒钟内是非反应性的,cpu使用率非常高(特别是在构建发生之后 - 如果你查看系统作业,几个jsp/javascript索引器正在工作几分钟,即使所有WTP构建验证器已被禁用),打开新文件较慢,浏览项目等.
这在包含仅一个核心cpu的旧机器上尤为明显.
最糟糕的是,我觉得WTP开发团队并不关心性能 (例如,查看http://wiki.eclipse.org/WTP_Performance_Tests页面 - 最后一次更新发生在2008年).
bug报告和关于向的基本特征表现新闻组帖子(如JSP编辑/确认)一段时间后,往往被忽视或关闭,一些例子:在这里,这里,这里.
请不要误会我的意思:
我不想责怪WTP.
事实上,我相信WTP是一个由才华横溢的团队开发的优秀开源项目.
但很明显,该项目的质量保证存在问题,特别是在影响可用性和用户接受度的性能方面.
我只是想指出,团队应该首先关注对大多数用户至关重要的事情,然后再努力实现超级功能.
我的问题
UPDATE
我想对这个问题进行更新,以反映当前的答案并总结当前的结果:
许多用户或多或少抱怨同样的问题,所以我认为这些问题已得到确认.
顺便说一句,这个问题也在theserverside.com上的新闻帖中提到,附加评论.
负责任的WTP项目负责人nitind在WTP的现状上发表了一篇值得一提的文章,我想引用一句:
"简单的事实是,我们不会花太多时间在性能测试上,因为我们缺乏这方面的资源."
"当然,我们希望积极主动,而不是反应,但我们倾向于首先将时间分配给功能性问题."
所以这个问题变成了一些社区对WTP团队的公开信:
Dear WTP team,
it's obvious that WTP …Run Code Online (Sandbox Code Playgroud) 我正在为Oracle JRE/JDK 6 Update 22搜索rt.jar的源代码.交付中包含的src.zip不包含所有源,例如sun.*(例如sun.reflect.Reflection) )包丢失了.
我在哪里可以获得完整的src.zip?
我想从Java 5升级到Java 6.我们都知道技术优势和好处,但是:
我有一个问题,主要客户拒绝从java 5升级到java 6,因为"风险"和"我们没有/太少的好处"(银行业).
对于客户的非技术性决策者可以回答什么,他将从升级中获得什么好处 - 或者如果他将继续使用Java 5可能会出现哪些问题/后果?
这不是一个"火与忘记"的产品,它通过新的功能/特性进行了扩展 - 开发已经并且将会不断发展 - 开发团队肯定会受益于jdk 6功能/工具.
编辑: Java 5 达到的EOL确实是一个有效点,但它并没有说服客户端,因为他正在使用IBM JRE/JDK 5,这似乎还没有达到它的生命周期.而且,除此之外,客户说:"Java 5运行良好多年,不太可能出现新的,看不见的问题"
我目前正在使用它jconsole来监控我的Java应用程序的性能指标,并希望编写此数据采集的脚本.
有没有办法检索这些VM指标(堆内存使用情况,线程数,CPU使用率等)STDOUT?
数据top -p PID -b -n 1并没有完全削减它.
谢谢
是否有用于编辑java类文件的实用程序(或eclipse插件)?我想操纵java类文件的字节码而不重新编译它,也没有完整的构建路径.
例如,重命名方法,添加/删除指令,更改常量等.
我找到的唯一工具是:
在使用Java API进行XML处理时,我想知道哪些对象可以重用(在相同或不同的文档中),JAXP:
DocumentBuilderFactoryDocumentBuilderXPathNodeErrorHandler是否建议缓存这些对象或者JAXP实现是否已经缓存它们?
这些对象的(重新)使用是否是线程安全的?
我想减少构建(使用ant)运行测试所需的时间.目前我使用默认值forkMode,它在每个测试类(perTest)上分配一个新的vm.
我正在考虑切换到forkMode="once"但我不确定这是否会以某种方式结合测试,并且可能在运行我的测试后给我假阳性和/或假阴性结果.
问题:
每个测试用例是否会获得一个新的ClassLoader,以便之前运行的所有静态引用都不再可访问/可见?
还有其他导致测试依赖/耦合的测试方法可能会改变行为(除了我没有使用的本机库加载)
UPDATE
根据当前的答案,当使用forkMode时,似乎junit总是在每个vm/fork的所有测试用例之间共享一个类加载器.(所以forkMode ="once"的确意味着所有测试都有一个类加载器)
这有很多优点(测试速度更快,并且可能导致测试因静态耦合而失败)但也有一些缺点(静态耦合只有在使用共享类加载器时才会起作用 - >误报)
有关此问题的更新 - 请参阅下文.
我经历了(可重现的,至少对我而言)jvm 崩溃(不是OutOfMemoryError)(崩溃的应用程序是eclipse 3.6.2).但是,查看崩溃日志让我想知道:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 65544 bytes for Chunk::new
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap …Run Code Online (Sandbox Code Playgroud) java ×10
eclipse ×2
.class-file ×1
ant ×1
bytecode ×1
caching ×1
classloader ×1
classpath ×1
command-line ×1
crash ×1
decompiler ×1
eclipse-wtp ×1
eclipselink ×1
getresource ×1
hibernate ×1
ide ×1
identity ×1
java-5 ×1
java-6 ×1
jaxp ×1
jconsole ×1
jpa ×1
jsp ×1
junit ×1
jvm ×1
monitoring ×1
performance ×1
resources ×1
unit-testing ×1
upgrade ×1
windows ×1
xml ×1