0

プロジェクトを継承し、jetty:run 経由で実行しようとしていますが、役に立ちません。run-war または run-exploded を使用して正常に動作しますが、普通の古い run では問題を特定できないようです。それは私に次のスタックを与えます:

2012-06-28 15:02:32.247:INFO:/:Initializing Spring root WebApplicationContext
WARN [main] JDBCExceptionReporter.logExceptions(233) | SQL Error: 0, SQLState: null
ERROR [main] JDBCExceptionReporter.logExceptions(234) | Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using password: NO))
WARN [main] SettingsFactory.buildSettings(147) | Could not obtain connection to query metadata
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using password: NO))
    at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:855)
    at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:114)
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2833)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2829)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1840)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:814)

/src/main/resources/applicationContext-resources.xml

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:jdbc.properties</value>
            <value>classpath:mail.properties</value>
        </list>
    </property>
</bean>

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
    <property name="driverClass"  value="${jdbc.driverClassName}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="initialPoolSize" value="8"/>
    <property name="minPoolSize" value="8"/>
    <property name="maxPoolSize" value="32"/>
    <property name="idleConnectionTestPeriod" value="600"/>
    <property name="maxIdleTime" value="0"/>
    <property name="maxStatements" value="0"/>
    <property name="maxStatementsPerConnection" value="0"/>
    <property name="acquireIncrement" value="3"/>
    <property name="acquireRetryAttempts" value="3"/>
    <property name="acquireRetryDelay" value="1000"/>
    <property name="autoCommitOnClose" value="false"/>
    <property name="maxConnectionAge" value="14400"/>
    <property name="forceIgnoreUnresolvedTransactions" value="false"/>
    <property name="numHelperThreads" value="20"/>
    <property name="testConnectionOnCheckin" value="false"/>
    <property name="testConnectionOnCheckout" value="false"/>
    <property name="preferredTestQuery" value="select id from xtcirc101themes where rownum = 1"/>
    <property name="maxAdministrativeTaskTime" value="0"/>
    <property name="debugUnreturnedConnectionStackTraces" value="false"/>
    <property name="maxIdleTimeExcessConnections" value="0"/>
    <property name="breakAfterAcquireFailure" value="false"/>
    <property name="checkoutTimeout" value="0"/>
    <property name="unreturnedConnectionTimeout" value="0"/>
    <property name="usesTraditionalReflectiveProxies" value="false"/>
</bean>

/src/main/resources/applicationContext.xml

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="annotatedClasses">
        <list>
            .
            .
            .
        </list>
    </property>
</bean>

/WEB-INF/web.xml のコンテキスト構成

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath:/applicationContext-resources.xml
        classpath:/applicationContext-dao.xml
        classpath:/applicationContext-service.xml
        classpath*:/applicationContext.xml
        /WEB-INF/applicationContext*.xml
        /WEB-INF/classes/applicationContext*.xml
        /WEB-INF/classes/tbmJobs*.xml
        /WEB-INF/xfire-servlet.xml
        /WEB-INF/security.xml
    </param-value>
</context-param>

/src/main/resources/jdbc.properties

jdbc.driverClassName=${jdbc.driverClassName}
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}

hibernate.dialect=${hibernate.dialect}

# Needed by Hibernate3 Maven Plugin defined in pom.xml
hibernate.connection.username=${jdbc.username}
hibernate.connection.password=${jdbc.password}
hibernate.connection.url=${jdbc.url}
hibernate.connection.driver_class=${jdbc.driverClassName}

pom.xml で構成されたプロパティ

<properties>
    <dbunit.dataTypeFactoryName>org.dbunit.ext.oracle.OracleDataTypeFactory</dbunit.dataTypeFactoryName>
    <dbunit.schema>SYSTEM</dbunit.schema>
    <hibernate.dialect>org.hibernate.dialect.Oracle10gDialect</hibernate.dialect>

    <jdbc.groupId>com.oracle</jdbc.groupId>
    <jdbc.artifactId>ojdbc14</jdbc.artifactId>
    <jdbc.version>10.2.0.3.0</jdbc.version>
    <jdbc.driverClassName>oracle.jdbc.OracleDriver</jdbc.driverClassName>
    <jdbc.url>jdbc:oracle:thin:@${oracle.host}:1521:${oracle.sid}</jdbc.url>
    <jdbc.username>*******</jdbc.username>
    <jdbc.password>*******</jdbc.password>
</properties>
4

1 に答える 1

0

したがって、多くの調査と多くの試行錯誤の後、原因は jetty-maven-plugin にあるようです。プロジェクトはバージョン 6.1.9 を使用していましたが、jetty:run を実行しているときに戦争オーバーレイが許可されていないことに気付いたとき、すぐにそれを 6.1.26 に変更しました。これにより、上記のエラーが発生しました。

試行錯誤の結果、dataSource Bean と applicationContext-resources.xml ファイルに問題があることがわかりました。dataSource が定義されていないため、xml ファイル内の Bean 定義をコメント化すると、sessionFactory を作成しようとしたときに BeanCreationException が発生するはずでした。ただし、これは真実ではないことが判明し、同じエラーが発生しました。つまり、Spring でデフォルトとして構成されていると思われる別の dataSource を参照していましたか? 現時点ではわかりません。dataSource の名前を dataSource2 に変更すると問題は解決しましたが、解決策が気に入りませんでした。

jetty プラグインの詳細を読んで、jetty 7 の最新バージョンに移行することにしました。最初は一度に多くの変更を加えたくないので 6 のままにすることにしましたが、7 に移行することは賢明な決定であることがわかりました。dataSource ファイルの問題はすぐになくなりました。これは、支柱に関する次の一連の問題につながります。struts.xml で default と admin のパッケージ名をオーバーライドして再利用しているようです。これも、run-war または run-exploded では正常に機能しますが、run では struts エラーが発生します。現在、appfuse バージョン 2.0.2 を使用していますが、それもアップデートすることを考えています。

Struts の問題を回避できるようになると、web.xml に関する問題が発生しました。リソース フィルタリングを使用して、web.xml といくつかの jsp にいくつかの値を動的に設定しています。これは、webapp ファイルが静的であり、リソース フィルタリングが適用されないことを前提としているため、jetty:run の問題です。タグを使用して、jetty と war プラグインに web.xml のリソース フィルター バージョンを使用するように指示することができました。ただし、jsp は別の問題でした。

少しグーグルで見つけました。プロパティ ファイルを使用して、リソース フィルタリングを is に適用し、Spring を使用して、jsp にアクセスするときにプロパティ ファイルから値を読み取ることができました。最後に、jetty:run を取得してアプリを起動できます。ただし、コードをホットスワップしようとすると、PermGen space エラーが発生するようです。再起動の試行が複数回行われ、最終的に PermGen エラーが発生するようです。現在、PermGen のサイズを -XX:PermSize=64M -XX:MaxPermSize=128M に設定しています。試行錯誤の時間が増えると思います。

于 2012-07-02T12:56:31.530 に答える