2

私はJPAが初めてです。私のコードは、Oracle 10.3 データベースに接続していくつかのテーブルにデータを入力しようとしています。ただし、コードを作成する前に、EntityManagerFactoryImpl.createEntityManager(String) で NullPointerException をスローします。emf変数が null でないことは既に確認済みです。これは、多くのチュートリアルの例と同様に、Populator.java の関連コードです。

public static void main(String[] args) {
    EntityManagerFactory emf =
        Persistence.createEntityManagerFactory("LeaveSchedulerJPA");
    EntityManager em = emf.createEntityManager();

例外トレースは次のとおりです。

[EL Severe]: 2012-10-11 14:37:02.415--ServerSession(37999235)--java.lang.NullPointerException
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:950)
    at org.eclipse.persistence.exceptions.i18n.ExceptionMessageGenerator.buildMessage(ExceptionMessageGenerator.java:47)
    at org.eclipse.persistence.exceptions.ValidationException.errorDecryptingPassword(ValidationException.java:864)
    at org.eclipse.persistence.internal.security.JCEEncryptor.decryptPassword(JCEEncryptor.java:124)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateLogins(EntityManagerSetupImpl.java:1183)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.updateServerSession(EntityManagerSetupImpl.java:1450)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:372)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getServerSession(EntityManagerFactoryImpl.java:164)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:221)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:209)
    at com.engilitycorp.leaveschedulerjpa.Populator.main(Populator.java:28)

私のpersistence.xmlは以下です。指定した URL は、Eclipse から使用してテーブルに対応するクラスを生成すると機能します。何か案は?

<?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="LeaveSchedulerJPA" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>com.engilitycorp.leaveschedulerjpa.Holiday</class>
        <class>com.engilitycorp.leaveschedulerjpa.Leave</class>
        <class>com.engilitycorp.leaveschedulerjpa.LeaveType</class>
        <class>com.engilitycorp.leaveschedulerjpa.Notification</class>
        <class>com.engilitycorp.leaveschedulerjpa.NotificationType</class>
        <class>com.engilitycorp.leaveschedulerjpa.Role</class>
        <class>com.engilitycorp.leaveschedulerjpa.User</class>
        <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
            <property name="javax.persistence.jdbc.user" value="leavescheduler"/>
            <property name="javax.persistence.jdbc.password" value="xxxx"/>
            <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/>
        </properties>
    </persistence-unit>
</persistence>
4

1 に答える 1

0

問題は、永続性をスタンドアロンの Java アプリケーションであるかのようにテストしようとしていたことが判明しました。ドキュメントには、EntityManagerFactoryImpl が「アクティブな ServerSession への参照」を維持すると記載されています。WebLogic 内で同じコードを実行したところ、問題なく動作しました。

同僚は、同じコードをスタンドアロンの Java アプリケーションとして実行できました。重要な構成の違いが何であるかはまだわかりません。

于 2012-10-12T16:58:33.857 に答える