1

Spring MVC webapp (Hibernate および JPA) を Cloudbees の Tomcat 7 ClickStack にデプロイしようとしていますが、データベース接続を適切に構成できないようです。複数のチュートリアル (多くの解決策を提供しています) に従ってみましたが、どれもうまくいきませんでした。誰かが以下の私の構成ファイルを見て、何か問題があれば教えていただければ幸いです。

エラー:

java.lang.NullPointerException
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 

最初に、cloudbees cli を使用してデータベースをアプリにバインドし、cloudbees-web.xml でデータベースを宣言する必要がないようにしました。

bees app:bind -a myapp/app -db mydatabase
    application - myapp/app bound to cb-db:myapp/mydatabase as mydatabase

(データベースのバインドを解除し、cloudbees-web.xml と context.xml でも定義しようとしましたが、成功しませんでした)

春-data.xml:

<jee:jndi-lookup id="datasource" jndi-name="jdbc/mydatabase"
                 lookup-on-startup="false" proxy-interface="javax.sql.DataSource"
                 cache="true" resource-ref="true"  />

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="hibernate-jpa"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
            <property name="showSql" value="false"/>
            <property name="generateDdl" value="true"/>
        </bean>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
    </property>
</bean>

web.xml:

<resource-ref>
    <res-ref-name>jdbc/mydatabase</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

Maven ファイルからコネクタへのすべての参照を削除し、libフォルダーからすべての jar を削除しました。エラーメッセージを検索すると、通常はドライバーが見つからないことに関係していることがわかります...しかし、データベースはコンテナーによって提供されるため、なぜそれについて心配する必要があるのでしょうか?

-- 編集: META-INF/context.xml ファイルの作業 --

多くのドキュメントで参照されている com.cloudbees.jdbc.Driver が機能しなかった (classnotfound 例外がスローされた) ため、mysql-connector-java.jar ファイルを lib フォルダーにパッケージ化する必要があったことに注意してください。また、今のところ、システム プロパティを使用するように設定する代わりに、URL、ユーザー名、およびパスワードをハードコードしただけです。

<Context>
<Loader delegate="true"/>
<Resource
        name="jdbc/mydatabase"
        auth="Container"
        type="javax.sql.DataSource"
        maxActive="5"
        maxIdle="2"
        username="USERNAME"
        maxWait="5000"
        driverClassName="com.mysql.jdbc.Driver"
        password="PASSWORD"
        url="jdbc:mysql://MY_EC2_DB_URL:3306/mydatabase"/>
</Context>
4

2 に答える 2

1

私は同じ問題に直面していましたが、最終的にデータソースを「適切に」構成することができました!

次のように PropertyPlaceholderConfigurer を使用しています。

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
   <property name="showSql" value="false" />
   <property name="database" value="MYSQL" />
   <property name="generateDdl" value="false" />
</bean>

<context:property-placeholder system-properties-mode="FALLBACK" />

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="${dt4j.driver}" />
   <property name="url" value="${dt4j.url}" />
   <property name="username" value="${dt4j.username}" />
   <property name="password" value="${dt4j.password}" />
</bean>

"FALLBACK" は、プレースホルダーをローカル プロパティに対して解決し、次にシステム プロパティに対して解決する必要があることを示します。

最後に、システム プロパティ (-Dprop=value) を追加するか、Cloudbees デプロイヤー プラグインに追加して機能させるだけです。もっと良い方法があるに違いありませんが、主な目的は達成されました。データ ソースの構成がプロジェクトにハードコードされていません。

于 2013-01-30T19:40:09.977 に答える
0

残念ながら、現時点では tomcat7 スタックで JNDI DB のセットアップは行われていません。

データベースをアプリにバインドすると、いくつかのシステム プロパティが挿入されます。

MYSQL_PASSWORD_MYDB 
MYSQL_URL_MYDB
MYSQL_USERNAME_MYDB

(MYDB は db リソースの名前です)。その後、コード/構成でそれらを参照できます。Tomcat 7 の場合、/META-INF/context.xml をアプリに追加して、JNDI データ ソースを設定できます ( http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examplesを参照)。 -howto.html )

于 2012-11-28T00:36:28.693 に答える