2台の独立したWebLogic9.2.1サーバーをセットアップしています(これらは独自の管理サーバーを備えた管理対象サーバーです)。したがって、クラスタリングは設定されていません。これらは、JDBCセッションの永続性で構成されます。さらに、各WebLogicサーバーには独自のApache 2フロントエンドがあり、WebLogicプラグインはそれぞれのWebLogicサーバーにトラフィックを転送するだけです。Apache 2サーバーの前に、ハードウェアのロードバランサーがあります。現在、セッションの永続化に使用されるテーブルをホストするOracleデータベースから制約違反を取得しています。
ハードウェアロードバランサーがスティッキーIPを使用していることがわかりました(したがって、セッションもスティッキーになるはずです)。しかし、それは私にセットアップの何が悪いのかを逃れますか?
WebLogicログ:
#### <2011年4月26日13:00:08.0428CEST><エラー><HTTPセッション><sktpens01por02><SktEnsPorServer1> <[ACTIVE] ExecuteThread: '230' for queue:'weblogic.kernel.Default(self-チューニング)'> <skatGuid = 6fa90948-b285-45a5-954b-45e22bfc26c2、ou = company、ou = external、ou = entity、dc = skat、dc = dk> <> <> <1303815608428> <BEA-100087> <セッションIDのjdbcセッションデータ:lZbJN2jTbPZjTf81vSrKytxDdYCpwTgblJhnck3RhTcPf3FQr1Pw ctx:front dblat:1303815595796 triggerLAT:0がクラスター内の別のサーバーによって変更されました。 java.sql.SQLException:ORA-00001:一意の制約(FRONTSESSIONS.SYS_C0056504)に違反しました oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)で oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)で oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)で oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)で oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)で oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:970)で oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190)で oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370)で oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3454)で weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:128)で weblogic.servlet.internal.session.JDBCSessionData.dbCreate(JDBCSessionData.java:181)で weblogic.servlet.internal.session.JDBCSessionData.dbUpdate(JDBCSessionData.java:242)で weblogic.servlet.internal.session.JDBCSessionData.syncSession(JDBCSessionData.java:583)で weblogic.servlet.internal.session.JDBCSessionContext.sync(JDBCSessionContext.java:232)で weblogic.servlet.internal.ServletRequestImpl $ SessionHelper.syncSession(ServletRequestImpl.java:2507)で weblogic.servlet.internal.ServletRequestImpl $ SessionHelper.syncSession(ServletRequestImpl.java:2482)で weblogic.servlet.internal.ServletResponseImpl $ 1.run(ServletResponseImpl.java:1308)で weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)で weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)で weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1302)で weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1368)で weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)で weblogic.work.ExecuteThread.run(ExecuteThread.java:181)で >> #### <2011年4月26日13:00:08.0436CEST><エラー><HTTPセッション><sktpens01por02><SktEnsPorServer1> <[ACTIVE] ExecuteThread: '230' for queue:'weblogic.kernel.Default(self-チューニング)'> <skatGuid = 6fa90948-b285-45a5-954b-45e22bfc26c2、ou = company、ou = external、ou = entity、dc = skat、dc = dk> <> <> <1303815608436> <BEA-100060> < Webアプリケーションのセッションの取得中に予期しないエラーが発生しました:weblogic.servlet.internal.WebAppServletContext@26f86bfb --appName:'Portal-Front'、name:'front'、context-path:'/front'。 java.sql.SQLException:ORA-00001:一意の制約(FRONTSESSIONS.SYS_C0056504)に違反しました oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)で oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)で oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)で oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)で oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)で oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:970)で oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1190)で oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370)で oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3454)で weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:128)で weblogic.servlet.internal.session.JDBCSessionData.dbCreate(JDBCSessionData.java:181)で weblogic.servlet.internal.session.JDBCSessionData.dbUpdate(JDBCSessionData.java:242)で weblogic.servlet.internal.session.JDBCSessionData.syncSession(JDBCSessionData.java:583)で weblogic.servlet.internal.session.JDBCSessionContext.sync(JDBCSessionContext.java:232)で weblogic.servlet.internal.ServletRequestImpl $ SessionHelper.syncSession(ServletRequestImpl.java:2507)で weblogic.servlet.internal.ServletRequestImpl $ SessionHelper.syncSession(ServletRequestImpl.java:2482)で weblogic.servlet.internal.ServletResponseImpl $ 1.run(ServletResponseImpl.java:1308)で weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)で weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)で weblogic.servlet.internal.ServletResponseImpl.send(ServletResponseImpl.java:1302)で weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1368)で weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)で weblogic.work.ExecuteThread.run(ExecuteThread.java:181)で >>
Oracleテーブルの定義:
CREATE TABLE "FRONTSESSIONS"."WL_SERVLET_SESSIONS"
(
"WL_ID" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"WL_CONTEXT_PATH" VARCHAR2(100 BYTE) NOT NULL ENABLE,
"WL_IS_NEW" CHAR(1 BYTE),
"WL_CREATE_TIME" NUMBER(20,0),
"WL_IS_VALID" CHAR(1 BYTE),
"WL_SESSION_VALUES" LONG RAW,
"WL_ACCESS_TIME" NUMBER(20,0),
"WL_MAX_INACTIVE_INTERVAL" NUMBER(*,0),
PRIMARY KEY ("WL_ID", "WL_CONTEXT_PATH") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "FRONTSESSIONS" ENABLE
)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE
(
INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT
)
TABLESPACE "FRONTSESSIONS" ;
ありがとう!