[Seasar-user:21207] Oracle のコンテキスト索引をon commitで設定すると コミット済み例外が発生する。

鈴木寛之 [E-MAIL ADDRESS DELETED]
2011年 12月 8日 (木) 13:43:45 JST


いつもお世話になっております。
鈴木寛之と申します。

■知りたいこと
 Oracle textのトークン表をon commitのタイミングで更新させたいのですが
どのようにすれば、実現可能でしょうか。どなたかご存知の方が
いらっしゃれば、教えていただければ、幸いです。
※現在、以下の状況で例外発生しており、うまくトークン表が更新できていません。

■状況
	以下の作業を行った場合に、ココミット処理で例外が発生する。
    1)コンテキスト索引を作成
    -----------------------------------------------------
    -- 全文検索権限付与
    grant ctxapp to test_user;
    -- レクサーを設定
    execute ctx_ddl.create_preference('test_jvl','JAPANESE_VGRAM_LEXER');
    -- コンテキスト索引を設定
    create index test_idx on TEST_TABLE(FULL_TEXT_WORD) indextype is ctxsys.context parameters ('lexer test_jvl SYNC(ON COMMIT)');
    -----------------------------------------------------

    2)アクションで、TEST_TABLEに対しinsert文を発行
    ※FULL_TEXT_WORDカラムは任意の文字('AAA'など)

	3)コミット処理で例外発生

■環境
    WindowsServer2008
	Oracle 11g
    JDK1.6.0_22-b04
    Apache2.2
    Tomcat6.0
    s2-extention-2.4.41
    s2-framework-2.4.41
    s2-tiger-2.4.41
	sa-struts-1.0.4

■ログ
org.seasar.framework.exception.InvocationTargetRuntimeException: [ESSR0043]XXXX.action.cmm.cmm03.CMM0306Actionが呼び出した対象が不正です。理由はorg.seasar.framework.exception.SRollbackException: [ESSR0303]トランザクション([FormatId=4360, GlobalId=1323316112333/148, BranchId=])をコミットできませんでした
	at org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:105)
	at org.seasar.struts.action.ActionWrapper.execute(ActionWrapper.java:139)
	at XXXX.common.struts.action.XXXXActionWrapper.execute(XXXXActionWrapper.java:83)
	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
	at org.seasar.struts.action.S2RequestProcessor.process(S2RequestProcessor.java:132)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.extension.filter.RequestDumpFilter.doFilter(RequestDumpFilter.java:127)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:71)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at org.seasar.struts.filter.RoutingFilter.forward(RoutingFilter.java:219)
	at org.seasar.struts.filter.RoutingFilter.doFilter(RoutingFilter.java:99)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:79)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:71)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:69)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.seasar.framework.exception.SRollbackException: [ESSR0303]トランザクション([FormatId=4360, GlobalId=1323316112333/148, BranchId=])をコミットできませんでした
	at org.seasar.extension.jta.TransactionImpl.commit(TransactionImpl.java:222)
	at org.seasar.extension.jta.AbstractTransactionManagerImpl.commit(AbstractTransactionManagerImpl.java:67)
	at org.seasar.extension.jta.UserTransactionImpl.commit(UserTransactionImpl.java:55)
	at org.seasar.extension.tx.adapter.JTATransactionManagerAdapter.end(JTATransactionManagerAdapter.java:173)
	at org.seasar.extension.tx.adapter.JTATransactionManagerAdapter.required(JTATransactionManagerAdapter.java:68)
	at org.seasar.extension.tx.RequiredInterceptor.invoke(RequiredInterceptor.java:50)
	at XXXX.action.cmm.cmm03.CMM0306Action$$EnhancedByS2AOP$$80656c$$MethodInvocation$$entry4.proceed(MethodInvocationClassGenerator.java)
	at org.seasar.framework.aop.interceptors.ThrowsInterceptor.invoke(ThrowsInterceptor.java:79)
	at XXXX.action.cmm.cmm03.CMM0306Action$$EnhancedByS2AOP$$80656c$$MethodInvocation$$entry4.proceed(MethodInvocationClassGenerator.java)
	at org.seasar.framework.aop.interceptors.TraceInterceptor.invoke(TraceInterceptor.java:73)
	at XXXX.action.cmm.cmm03.CMM0306Action$$EnhancedByS2AOP$$80656c$$MethodInvocation$$entry4.proceed(MethodInvocationClassGenerator.java)
	at XXXX.action.cmm.cmm03.CMM0306Action$$EnhancedByS2AOP$$80656c.entry(CMM0306Action$$EnhancedByS2AOP$$80656c.java)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:96)

■例外発生後のデータ、もしくは、調査から分かる推測
 [データからの推測]
 ・INSERT文自体の登録は正常に行われ、コミット済みとなっているようです。
 ・Oracle textのトークン表は更新されていませんでした。

 [別作業での推測]
 ・コンテキスト索引のタイミングをon commitではなく、
  時間間隔(一定期間毎にトークン表を更新)に設定すると
  例外は発生しませんでした。
 ・SQL Developerなど別アプリケーションを使用して、INSERT文を発行すると
  コミットを実行したタイミングで、トークン表が更新されました。

以上、宜しくお願い致します。

/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~
name:鈴木寛之
mail:[E-MAIL ADDRESS DELETED]
/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~



Seasar-user メーリングリストの案内