小编phe*_*aal的帖子

JPA合并与持久性

到目前为止,我的偏好始终是使用EntityManager merge()来处理插入和更新.但我也注意到merge在update/insert之前执行了额外的select查询,以确保数据库中不存在记录.

现在我正在开发一个需要对数据库进行大量(批量)插入的项目.从性能的角度来看,在我绝对知道我总是在创建一个要保留的对象的新实例的场景中使用persist而不是merge是有意义的吗?

java merge jpa entitymanager persist

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

检索异常完全堆栈跟踪

我想在我的项目中将Apache commons lang从2.4升级到3.1.我的实现引用了ExceptionUtil.getFullExceptionTrace(e),它在3.1中不再存在.删除的原因列为

"删除isThrowableNested,isNestedThrowable和getFullStackTrace,因为一旦你进入JDK 1.4,它们就是所有类型的无操作.LANG-491"

.关于这一变化的几个问题:

  1. 我很困惑,如果这意味着我们需要探索一些其他方法来检索完整的堆栈跟踪,或者我们可以简单地用ExceptionUtils.getStackTrace(e)替换.

  2. 有什么想法在jdk 1.4之后改变了什么来使方法变得多余?

  3. 我们不能简单地做e.toString(),其中e是我的Exception实例吗?

谢谢

java exception apache-commons lang

7
推荐指数
1
解决办法
5096
查看次数

PowerMock EasyMock基础知识

这可能是一个PowerMock/EasyMock 101问题,我无法弄清楚为什么.我有一个C类方法

public static boolean testInner(String s) {
    return false;
}

public static boolean testOuter() {
    String x = "someValue";
    return testInner(x);
}
Run Code Online (Sandbox Code Playgroud)

在我的testOuter()方法测试中,我想确保使用适当的参数调用testInner.为此,我正在做这样的事情:[@RunWith(PowerMockRunner.class)@PrepareForTest(EmailUtil.class)在Class级别声明]

EasyMock.expect(C.testInner("blabla")).andReturn(true);
PowerMock.replayAll();
boolean status = C.testOuter();
PowerMock.verifyAll();  
assertTrue(status);
Run Code Online (Sandbox Code Playgroud)

但我得到的错误是:

java.lang.AssertionError: 
Unexpected method call testOuter():
testInner("blabla"): expected: 1, actual: 0
    at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:45)
    at org.powermock.api.easymock.internal.invocationcontrol.EasyMockMethodInvocationControl.invoke(EasyMockMethodInvocationControl.java:95)
    at org.powermock.core.MockGateway.doMethodCall(MockGateway.java:105)
    at org.powermock.core.MockGateway.methodCall(MockGateway.java:60)
    at C.testOuter(C.java)
Run Code Online (Sandbox Code Playgroud)

我用EasyMock.IsA(String.class)替换了实际参数,但仍然没有运气.我很确定我在做一些从根本上说是愚蠢的事情.有帮助吗?

java junit easymock powermock

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

处理EJB中的TransactionTimeout异常

我有一个名为methodA()的EJB方法,它调用另一个名为methodB()的EJB方法,该方法启动一个新的容器管理事务.在methodB中,我强制一个事务超时,它被catchB正确捕获并且没有传播给methodA.但是我很惊讶methodA收到了Exception.我在这里错过了吗?

methodA() {
 try {
   methodB();
   System.out.println("print me!");
 } catch(Exception e) {
   System.out.println("shouldn't be here");
 }
}

@TransactionTimeout(5) //5 sec timeout
methodB() {
  try {
    Thread.sleep(6000);
  } catch(Throwable t) {
    System.out.println("Eating all the Exception..");
  }
}
Run Code Online (Sandbox Code Playgroud)

第一个方法应该从未捕获异常(EJBTransactionTimeoutException),因为methodB已经吃过它.我看到"不应该在这里"而不是"打印我!"的输出.它让我想知道,尽管已经抛出了Timeout异常,容器在methodB完成后是否会立即抛出另一个EJBTransactionTimeoutException异常?

java jboss ejb transactions exception-handling

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