[Seasar-user:13843] [S2Unit] トランザクションが開始されない(seasar入門本)
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2008年 4月 21日 (月) 06:04:56 JST
いつもお世話になっております。
いまSeasar入門本 P.267のS2Unitのサンプルを試しているのですが、
(トランザクションが開始しているか調べるTxBeanをテストする)
RequiredInterceptorTest#testInvoke()、
トランザクションを調べるところで、NullPointerExceptionが発生していまします。
デバッグでステップしていくと、
RequiredInterceptorTest(S2TestCase).doRunTest() 内の tm が nullになっていますが、
diconファイルの書き方が悪いのでしょうか?
どうぞアドバイスをよろしくお願い致します。
chiitake.
◆環境:
seasar-extension-2.4.22
seasar-framework-2.4.22
◆RequiredInterceptorTest.dicon
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
"http://www.seasar.org/dtd/components24.dtd">
<components>
<include path="j2ee.dicon" />
<component class="seasar2test1.dto.TxBeanImpl">
<aspect>j2ee.requiredTx</aspect>
</component>
</components>
◆エラー
java.lang.NullPointerException
at org.seasar.extension.tx.RequiredInterceptor.invoke(RequiredInterceptor.java:41)
at seasar2test1.dto.TxBeanImpl$$EnhancedByS2AOP$$1cac6db$$MethodInvocation$$hasTransaction0.
proceed(MethodInvocationClassGenerator.java)
at seasar2test1.dto.TxBeanImpl$$EnhancedByS2AOP$$1cac6db.hasTransaction(TxBeanImpl$$
EnhancedByS2AOP$$1cac6db.java)
at seasar2test1.dto.RequiredInterceptorTest.testInvoke(RequiredInterceptorTest.java:31)
2008-04-21 05:36:51,187 [main] DEBUG org.seasar.framework.container.factory.S2ContainerFactory -
S2Containerを作成しました。path=seasar2test1/dto/RequiredInterceptorTest.dicon
2008-04-21 05:36:51,203 [main] WARN org.seasar.framework.container.assembler.BindingTypeShouldDef -
org.seasar.extension.tx.RequiredInterceptorのプロパティ(transactionControl)が見つからないので設定を
スキップします
◆TxBeanImpl.java
package seasar2test1.dto;
import javax.transaction.Status;
import javax.transaction.SystemException;
import javax.transaction.TransactionManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class TxBeanImpl implements TxBean {
private Log log = LogFactory.getLog(TxBeanImpl.class);
private TransactionManager tm_;
public TxBeanImpl(TransactionManager tm) {
this.tm_ = tm;
}
public boolean hasTransaction() throws SystemException {
if (tm_ == null) {
throw new SystemException("tm_がnull!");
}
return tm_.getStatus() != Status.STATUS_NO_TRANSACTION;
}
}
◆RequiredInterceptorTest.java
public class RequiredInterceptorTest extends S2TestCase {
private Log log = LogFactory.getLog(RequiredInterceptorTest.class);
private static final String PATH = "RequiredInterceptorTest.dicon";
private TxBean txBean_;
private TransactionManager tm_;
public RequiredInterceptorTest(String name) {
super(name);
}
// DIされているか。
public void testCreate() {
assertNotNull("1", txBean_);
assertNotNull("2", tm_);
}
public void testInvoke() throws Exception {
assertEquals("1", true, txBean_.hasTransaction());
assertEquals("2", Status.STATUS_NO_TRANSACTION, tm_.getStatus() );
}
// setup
protected void setUp() throws Exception {
include(PATH);
}
// tearDown
protected void tearDown() throws Exception {
}
public static Test suite() {
return new TestSuite(RequiredInterceptorTest.class);
}
public static void main(String[] args) {
junit.textui.TestRunner.main(
new String[] { RequiredInterceptorTest.class.getName() }
);
}
}
Seasar-user メーリングリストの案内