Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 春天、冬眠、C3P0和码头_Java_Spring_Hibernate_Jetty_C3p0 - Fatal编程技术网

Java 春天、冬眠、C3P0和码头

Java 春天、冬眠、C3P0和码头,java,spring,hibernate,jetty,c3p0,Java,Spring,Hibernate,Jetty,C3p0,我继承了一个项目,并试图通过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: nul

我继承了一个项目,并试图通过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>
在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>

org.dbunit.ext.oracle.OracleDataTypeFactory
系统
org.hibernate.dialen.oracle10galent
com.oracle
ojdbc14
10.2.0.3.0
oracle.jdbc.OracleDriver
jdbc:oracle:thin:@${oracle.host}:1521:${oracle.sid}
*******
*******

因此,经过大量研究和反复试验,看来罪魁祸首是jetty maven插件。该项目使用的是6.1.9版,当我意识到在执行jetty:run时它不允许战争覆盖时,我立即将其更改为6.1.26版。这导致了上述错误

通过反复试验,我能够确定DataSourceBean和applicationContext-resources.xml文件存在问题。由于未定义数据源,在尝试创建sessionFactory时,注释掉xml文件中的bean定义应该会导致BeanCreationException。然而,这被证明是不真实的,并导致了相同的错误,这意味着它引用了不同的数据源,可能在Spring中配置为默认值?现在还不确定。将数据源重命名为dataSource2解决了这个问题,但我不喜欢这个解决方案

阅读更多关于jetty插件的信息,我决定迁移到jetty 7的最新版本。我最初决定留在6号,因为我不想一下子改变太多,但事实证明,搬到7号是一个明智的决定。数据源文件的问题立即消失了。这将导致下一组问题,即struts。似乎我们正在覆盖和重用struts.xml中default和admin的包名。这同样适用于run war或run exploded,但在run中会导致struts错误。我们目前正在使用appfuse版本2.0.2,但我也在考虑更新它

一旦我能够绕过struts问题,我就会遇到web.xml的问题。我们一直在使用资源过滤在web.xml和一些jsp中动态设置一些值。这是jetty的一个问题:运行时假定webapp文件是静态的,并且不应用资源筛选。使用这个标签,我可以告诉jetty和war插件使用一个经过资源过滤的web.xml版本。不过jsp是另一个问题


在谷歌上搜索一下,我发现了。通过使用属性文件,我能够对is应用资源过滤,然后在访问jsp时使用spring从属性文件读取值。最后,我终于可以使用jetty:run启动我的应用程序了。然而,现在当它尝试热交换代码时,我似乎遇到了PermGen空间错误。看起来它经历了多次重新启动,最终导致PermGen错误。我目前正在将PermGen大小设置为-XX:PermSize=64M-XX:MaxPermSize=128M。猜它需要更多的试错时间。

错误很明显:用户“root”@“localhost”(使用密码:否)的访问被拒绝。您知道如何定义jdbc.password以及在哪里定义吗?其中是否有
属性PlaceHolderResolver
或类似内容?密码在Pom中定义,并在applicationContext.xml和jdbc.properties中设置。奇怪的是,我没有使用本地数据库或根用户。此外,它在作为战争运行时也能工作,但不能未装配;jetty:运行。我想,它无法在类路径中找到数据库属性文件。这些变量(${jdbc.driverClassName})在哪里?该文件在应用程序中的位置?
<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>
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}
<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>