2013-02-27 16 views
15

Jeśli łączenie połączeń nie jest zdefiniowane w linku persistence.xml for eclipse, jakie jest domyślne zachowanie?połączenie połączenia eclipselink

Czy otworzy i zamknie połączenie JDBC dla każdej transakcji? Czy utworzy pulę połączeń z pewnymi ustawieniami domyślnymi?

+0

Który typ transakcji został określony w pliku persistence.xml? – MRalwasser

Odpowiedz

11

The defaul • Połączenie puli dla EclipseLink, gdy nie używa się źródła danych, to pula połączeń min/max 32, z początkowym 1 połączeniem. Każda transakcja będzie korzystała z połączonego połączenia, a nie z połączenia/rozłączenia.

+0

Czy jesteś mówiąc, że eclipselink obsługuje pulowanie połączeń, nawet jeśli nie ma odniesienia do pulowania w pliku persistence.xml? – user1796571

+0

Tak, to jest domyślne (pula 32 połączeń) – James

+1

A tutaj są właściwości konfiguracji: http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_connection_pool.htm – eskatos

4

Jeśli używasz serwera aplikacji (Java EE) i trwałości zarządzanej kontenera, musisz skonfigurować pulę połączeń w konsoli administracyjnej serwera aplikacji i nie musisz ustawiać właściwości puli w trwałości .xml, np:

<persistence-unit name="myPU" transaction-type="JTA"> 
    <jta-data-source>jdbc_my_DataSource</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <shared-cache-mode>NONE</shared-cache-mode> 
    <properties/> 
</persistence-unit> 

Jeśli używasz EclipseLink bez serwera aplikacji (Java SE), przy użyciu aplikacji udało wytrwałości, a następnie, jeśli nie zostanie skonfigurowane łączenia, zostaną wykorzystane Internal Connection Pooling, np:

<persistence-unit name="DemoPU" transaction-type="RESOURCE_LOCAL"> 
    <properties> 
    <property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@localhost:1521:xe"/> 
    <property name="javax.persistence.jdbc.user" value="myuser"/> 
    <property name="javax.persistence.jdbc.password" value="mypassword"/> 
    <property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver"/> 
    </properties> 
</persistence-unit> 
+0

Kiedy masz na myśli serwer aplikacji, masz na myśli EE lub SE? Więc kiedy nie ma zdefiniowanej puli połączeń, jest to połączenie dla każdego tx? A co z trwałością zarządzaną przez bean za pomocą Spring/Tomcat? – user1796571

+3

Eclipselink nadal korzysta z pul połączeń, to po prostu utrzymuje pulę zamiast używać źródła danych. Wewnętrzne pule Eclipselink są nieco opisane tutaj http://wiki.eclipse.org/Configuring_an_Internal_Connection_Pool_(ELUG) i właściwości trwałości jpa do wykorzystania są zamieszczone tutaj http://wiki.eclipse.org/EclipseLink/Features/JPA#EntityManagerFactory_Properties – Chris

1
<property name="eclipselink.connection-pool.default.initial" value="1"/> 
<property name="eclipselink.connection-pool.default.min" value="64"/> 
<property name="eclipselink.connection-pool.default.max" value="64"/> 
+0

1/32/32 jak powiedział James wydaje się być poprawny (patrz kod źródłowy, do którego odniosłem się w mojej odpowiedzi w tym wątku). –

0

prostu chciał podać kod źródłowy do odpowiedzi Jamesa powyżej: Widać, że basen domyślne połączenie jest tworzone w konstruktorów ServerSession, używając init/Min/Max domyślne zdefiniowane w ConnectionPool i opcjonalnie nadpisane/dostosowane przez programistę za pośrednictwem właściwości w EntityManagerSetupImpl.

Powiązane problemy