2

「DrinksArchive」と呼ばれるこの古いWebプロジェクトがあります。特に、飲み物の追加、削除、一覧表示、編集を行うことができます。NetBeansからローカルで正常に実行されますが、プロジェクトを.warファイルとしてTomcat 6を使用するサーバーにデプロイすると、データベース操作(たとえば、dbへの飲み物の追加)を実行しようとするたびに次のエラーが発生します。

javax.persistence.PersistenceException:例外[EclipseLink-4002](Eclipse Persistence Services-2.3.0.v20110604-r9504):org.eclipse.persistence.exceptions.DatabaseException内部例外:java.sql.SQLNonTransientConnectionException:java.net.ConnectException: 「接続が拒否されました」というメッセージが表示された、ポート1527のサーバーローカルホストへの接続中にエラーが発生しました。エラーコード:40000 org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:501)org.eclipse.persistence.internal.jpa.EntityManagerFactoryDe​​legate.getDatabaseSession(EntityManagerFactoryDe​​legate.java:188)org.eclipse.persistence。 internal.jpa.EntityManagerFactoryDe​​legate.createEntityManagerImpl(EntityManagerFactoryDe​​legate.java:277)org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl。

これが私のソースコードです(NetBeansではGlassFishをサーバーとして使用しています)。

Register.java:

public class Register {

private static Register instance;
private EntityManager em;

private EntityManagerFactory emf = null;

public static Register getInstance() {
    if (instance == null) {
        instance = new Rekisteri();
    }

    return instance;
}

private Register() {
    try {
        Class.forName("org.apache.derby.jdbc.ClientDriver");
    } catch (ClassNotFoundException ex) {
        Logger.getLogger(Rekisteri.class.getName()).log(Level.SEVERE, null, ex);
    }
    emf = Persistence.createEntityManagerFactory("DrinksArchivePU");
}

public EntityManager getEntityManager() {
    return emf.createEntityManager();
}

public void addDrink(Drink new) {
    em = getEntityManager();
    em.getTransaction().begin();
    em.merge(new);
    em.getTransaction().commit();     
}

etc...//
}

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="DrinksArchivePU" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="eclipselink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
        <property name="eclipselink.jdbc.user" value="d"/> 
        <property name="eclipselink.jdbc.password" value="d"/> 
        <property name="eclipselink.jdbc.url" value="jdbc:derby://localhost:1527/drinks;create=true"/>
        <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
        <property name="eclipselink.ddl-generation.output-mode" value="database"/>
        <property name="eclipselink.weaving" value="false"/>
        <property name="eclipselink.logging.level" value="FINE"/>
    </properties>
</persistence-unit>

ダービーネットワークサーバーがサーバーで起動していないことが原因である可能性があることを読みましたが、そうであれば、どのように修正しますか?

編集:修正済み。persistence.xml設定でHSQLDB JDBCドライバーに変更しました。その後、サーバー内のプロジェクトにさまざまな欠落しているjarファイルを追加することがすべてでした。

これがpersistence.xmlです。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="DrinksAchivePU" transaction-type="RESOURCE_LOCAL">

    <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <class>archive.Ingredient</class>
    <class>archive.Review</class>
    <class>archive.Drink</class>
    <class>archive.DrinkCategory</class>
    <class>archive.User</class>
    <class>archive.Register</class>

    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
        <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:testdb;default_schema=true"/>
        <property name="javax.persistence.jdbc.user" value="sa"/>
        <property name="javax.persistence.jdbc.password" value=""/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
    </properties>
</persistence-unit>

4

1 に答える 1

0

Glassfish には Java DB がバンドルされています。そのため、ローカル マシンで動作します。展開サーバーのデータベース サーバー構成が異なるか (persistence.xml を確認してください)、そのポートで実行されているデータベース サーバーがありません。

于 2012-05-28T18:59:26.447 に答える