1

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" ;

ありがとう!

4

1 に答える 1

0

それらが 2 つの独立したサーバー (WebLogic の意味でのクラスタリングなし) であるという事実は、WebLogic がセッションに対して同じ ID を生成するのを止めません。これら 2 つのサーバーがクラスタ内にある場合、WebLogic はセッション ID の一部としてノード ID を追加します。ただし、サーバーはクラスター内にないため、もちろん、ある時点で同じセッション ID が生成される可能性があります。

この例外を回避できる唯一の方法は、両方のサーバーがセッション ストレージに異なるテーブルまたはデータベースを使用するように構成することです。

于 2011-10-27T21:54:03.280 に答える