Eclipselink factory.createEntityManager () останавливается с более чем одним запущенным экземпляром - PullRequest
0 голосов
/ 26 марта 2010

с моей программой RCP У меня проблема в том, что я хочу, чтобы на моем компьютере было запущено более одной копии. Первый экземпляр работает очень хорошо. Если я запускаю второй экземпляр, все в порядке, пока я не хочу получить доступ к базе данных.

Используя этот код:

..    
Map properties = new HashMap();
            properties.put("javax.persistence.jdbc.driver", dbDriver);
            properties.put("javax.persistence.jdbc.url", dbUrl);
            properties.put("javax.persistence.jdbc.user", dbUser);
            properties.put("javax.persistence.jdbc.password", dbPass);
            try {
                factory = Persistence.createEntityManagerFactory(
                        PERSISTENCE_UNIT_NAME, properties);
            } catch (Exception e) {
                System.out.println(e);
            }
            em=factory.createEntityManager(); // the second instance stops here
    ...

с постоянством.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
    <persistence-unit name="default">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 

        <class>myclasshere</class>


        <properties>
            <property name="eclipselink.ddl-generation" value="create-tables" />
            <property name="eclipselink.ddl-generation.output-mode" value="database" />     

            <property name="eclipselink.jdbc.read-connections.min" value="1" />
            <property name="eclipselink.jdbc.write-connections.min" value="1" />
            <property name="eclipselink.jdbc.batch-writing" value="JDBC" />
            <property name="eclipselink.logging.level" value="SEVERE" />
            <property name="eclipselink.logging.timestamp" value="false" />
            <property name="eclipselink.logging.session" value="false" />
            <property name="eclipselink.logging.thread" value="false" />    
        </properties>
    </persistence-unit>
</persistence>

Программа останавливается / не продолжается во втором случае после этого шага:

ет = factory.createEntityManager ();

Отладка программы шаг за шагом показала мне, что на этом этапе ничего не происходит. Возможно, программа сталкивается с таймаутом. Я не просыпаюсь больше 1 минуты ...

Есть ли у вас какие-либо подсказки, что может вызвать этот ларек?

1 Ответ

2 голосов
/ 26 марта 2010

В отладчике остановите все потоки (выберите приложение и нажмите кнопку паузы), а затем проверьте, какой поток висит в Object.wait(). Один из них должен быть связан с вашей проблемой. Проверьте трассировку стека на наличие экземпляров EclipseLink, чтобы выяснить, какой из них. Это может дать вам подсказку, что происходит.

...