2012-06-28 4 views
0

프로젝트를 상속 받았으며 jetty를 통해 실행되도록하려고 시도했지만 실행은했지만 아무 소용이 없습니다. 런 - 워 또는 런 - 폭발을 사용하여 잘 작동하지만, 평범한 구식 런으로 문제를 해결할 수없는 것 같습니다.Spring, Hibernate, C3P0 and Jetty

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} 

특성

<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

'root'@ 'localhost'에 대해 _Access가 거부되었습니다 (암호 : NO 사용) _ –

+0

'jdbc.password'가 어떻게 그리고 어디에서 정의 되었습니까? 거기에 'PropertyPlaceholderResolver' 또는 비슷한 것이 있습니까? –

+0

암호는 Pom에 정의되어 있으며 applicationContext.xml 및 jdbc.properties에 설정되어 있습니다. – James

답변

0

그래서 pom.xml 파일에 구성, 많은 연구와 시행 착오를 많이 후, 그것은 본다 jetty-maven-plugin. 이 프로젝트는 버전 6.1.9를 사용하고 있었고 즉시 부두를 할 때 전쟁 오버레이를 허용하지 않는다는 것을 깨달았을 때 6.1.26으로 변경했습니다. 위의 오류가 발생했습니다.

시행 착오를 통해 dataSource bean 및 applicationContext-resources.xml 파일에 문제가 있음을 확인할 수있었습니다. dataSource가 정의되지 않은 것처럼 sessionFactory를 만들려고 할 때 xml 파일의 bean 정의를 주석 처리하면 BeanCreationException이 발생해야합니다. 그러나 이것은 사실이 아니며 동일한 오류가 발생했습니다. 이는 다른 데이터 소스를 가리키고 있음을 의미합니다. 이는 Spring에서 기본값으로 구성된 것으로 추정됩니까? 이 시점에서 확실하지 않습니다. dataSource2를 dataSource2로 이름을 변경하면 문제가 해결되었지만 해결책이 마음에 들지 않았습니다.

부두 플러그인에 대한 자세한 내용을 보려면 부티크 최신 버전으로 마이그레이션하기로 결정했습니다. 7. 처음에는 너무 많은 변경 사항을 원하지 않았기 때문에 6시에 머물기로 결정했지만 7로 이동하면 현명한 결정. dataSource 파일의 문제는 즉시 사라졌습니다. 이것은 스트럿츠와 함께 다음 이슈 세트로 이어집니다. 우리가 struts.xml에서 default와 admin에 대한 패키지 이름을 오버라이드하고 재사용하고있는 것으로 보입니다. 이것은 다시 달리기 나 달리기로 잘 작동하지만 실행하면 스트럿트 오류가 발생합니다. 우리는 현재 appfuse 버전 2.0.2를 사용하고 있습니다. 그러나 업데이트하는 것도 고려 중입니다.

일단 스트럿츠 문제를 해결할 수있게되면 web.xml에 문제가 발생했습니다. 우리는 리소스 필터링을 사용하여 web.xml 및 몇 개의 JSP에서 일부 값을 동적으로 설정했습니다. 이는 부두에서 발생하는 문제입니다. 웹 응용 프로그램 파일이 정적이며 리소스 필터링을 적용하지 않는다고 가정 할 때 실행됩니다. 이 태그를 사용하여 jetty와 war 플러그인에게 web.xml의 자원 필터링 버전을 사용할 수 있다고 말할 수있었습니다. jsp는 또 다른 문제였습니다.

약간의 인터넷 검색 결과를 발견했습니다. 특성 파일을 사용하여 jsp에 액세스 할 때 특성 파일에서 값을 읽은 다음 spring을 사용하여 자원 필터링을 적용 할 수있었습니다. 마지막으로, 나는 부두를 얻을 수있다 : 실행 내 애플 리케이션을 실행합니다. 그러나 코드를 핫 스왑하려고 할 때 PermGen 공간 오류가 발생하는 것 같습니다. 그것이 재시작의 여러 attmept를 통과하고 결국 PermGen 오류가 발생하는 것 같습니다. 현재 PermGen 크기를 -XX로 설정하고 있습니다. PermSize = 64M -XX : MaxPermSize = 128M. 더 많은 시행 착오의 시간을 맞춰라.