yes the transaction commits, and the business method exits too, but
there are no update or insert statements in the transaction.
also if i add an em.flush() at the end of the business method, then
update statements are done.
Am 06.08.2010 21:43, schrieb Marina Vatkina:
> Do you wait until transaction commits, or do you check before the
> business method exits?
>
>
> Oleg Mayevskiy wrote:
>> I am watching database statement logs, also tables that should be
>> filled with new data. Additional i see all statements produced by
>> hibernate in java logs, because of hibernate.show_sql property.
>>
>> Am 06.08.2010 20:58, schrieb Marina Vatkina:
>>> Hi Oleg,
>>>
>>> How do you check that nothing is flushed to the database?
>>>
>>> -marina
>>>
>>> Oleg Mayevskiy wrote:
>>>> Hi.
>>>>
>>>> I have a question about a following abstract problem.
>>>>
>>>> i have a stateless bean like this:
>>>>
>>>> @Stateless
>>>>
>>>> Public class MyBean implements MyLocalInterface {
>>>>
>>>> ….
>>>>
>>>> @PersistenceContext(unitName = "ReadWritePU")
>>>> private EntityManager em;
>>>>
>>>> ….
>>>>
>>>> @Override
>>>>
>>>> public void execute() {
>>>>
>>>> …
>>>>
>>>> em.find(…) (some finds)
>>>>
>>>> …
>>>>
>>>> em.merge(…) (some merges)
>>>>
>>>> …
>>>>
>>>> em.persist(…) (some persists)
>>>>
>>>> }
>>>>
>>>> but what happens on db is:
>>>>
>>>> BEGIN
>>>> some SELECTs(from some finds)
>>>> ....
>>>> COMMIT
>>>>
>>>> so what happens is, entity manager does not flush the objects from
>>>> merge and persist methods, no updates or inserts are done to the
>>>> database. Also no Runtime Exceptions are thrown.
>>>>
>>>> But if i put an em.flush() at the end of the business method, every
>>>> thing is ok and new objects are flushed to the db.
>>>>
>>>> What could be a reason for this behavior?
>>>>
>>>> I tried to change non-transactional-connections from false to true,
>>>> the transaction-isolation-level from serializable to read-commited
>>>> and is-isolation-level-guaranteed from true to false, but it did
>>>> not help.
>>>>
>>>>
>>>> Here is my whole persistence.xml
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?>
>>>>
>>>> <persistence version="1.0"
>>>> xmlns="http://java.sun.com/xml/ns/persistence"
>>>> <http://java.sun.com/xml/ns/persistence>
>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>>> <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"
>>>> <http://java.sun.com/xml/ns/persistencehttp:/java.sun.com/xml/ns/persistence/persistence_1_0.xsd>>
>>>>
>>>>
>>>> <persistence-unit name="ReadWritePU" transaction-type="JTA">
>>>>
>>>> <provider>org.hibernate.ejb.HibernatePersistence</provider>
>>>>
>>>> <jta-data-source>jdbc/Postgres</jta-data-source>
>>>>
>>>> <exclude-unlisted-classes>false</exclude-unlisted-classes>
>>>>
>>>> <properties>
>>>>
>>>> <property name="hibernate.show_sql" value="true"/>
>>>>
>>>> <property name="hibernate.dialect"
>>>> value="org.hibernate.dialect.PostgreSQLDialect"/>
>>>>
>>>> <property name="hibernate.order_updates" value="true"/>
>>>>
>>>> <property name="hibernate.transaction.manager_lookup_class"
>>>> value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
>>>>
>>>> <property name="hibernate.transaction.factory_class"
>>>> value="org.hibernate.transaction.CMTTransactionFactory"/>
>>>>
>>>> </properties>
>>>>
>>>> </persistence-unit>
>>>>
>>>> <persistence-unit name="ReadOnlyPU" transaction-type="JTA">
>>>>
>>>> <provider>org.hibernate.ejb.HibernatePersistence</provider>
>>>>
>>>> <jta-data-source>jdbc/PostgresReadonly</jta-data-source>
>>>>
>>>> <exclude-unlisted-classes>false</exclude-unlisted-classes>
>>>>
>>>> <properties>
>>>>
>>>> <property name="hibernate.dialect"
>>>> value="org.hibernate.dialect.PostgreSQLDialect"/>
>>>>
>>>> <property name="hibernate.show_sql" value="true"/>
>>>>
>>>> <property name="hibernate.transaction.manager_lookup_class"
>>>> value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
>>>>
>>>> <property name="hibernate.transaction.factory_class"
>>>> value="org.hibernate.transaction.CMTTransactionFactory"/>
>>>>
>>>> </properties>
>>>>
>>>> </persistence-unit>
>>>>
>>>> </persistence>
>>>>
>>>> And here are my connection pool settings from the domain.xml
>>>>
>>>> <jdbc-connection-pool allow-non-component-callers="true"
>>>> associate-with-thread="false"
>>>> connection-creation-retry-attempts="0"
>>>> connection-creation-retry-interval-in-seconds="10"
>>>> connection-leak-reclaim="false"
>>>> connection-leak-timeout-in-seconds="0"
>>>> connection-validation-method="table"
>>>> datasource-classname="org.postgresql.ds.PGConnectionPoolDataSource"
>>>> fail-all-connections="false" idle-timeout-in-seconds="300"
>>>> is-connection-validation-required="true"
>>>> is-isolation-level-guaranteed="true"
>>>> lazy-connection-association="false"
>>>> lazy-connection-enlistment="false" match-connections="false"
>>>> max-connection-usage-count="0" max-pool-size="32"
>>>> max-wait-time-in-millis="60000" name="PostgresConnectionPool"
>>>> non-transactional-connections="false" pool-resize-quantity="2"
>>>> res-type="javax.sql.ConnectionPoolDataSource"
>>>> statement-timeout-in-seconds="-1" steady-pool-size="8"
>>>> transaction-isolation-level="serializable"
>>>> validate-atmost-once-period-in-seconds="0"
>>>> validation-table-name="pg_type" wrap-jdbc-objects="false">
>>>>
>>>> <property name="Password" value="********"/>
>>>>
>>>> <property name="PrepareThreshold" value="0"/>
>>>>
>>>> <property name="ServerName" value="******"/>
>>>>
>>>> <property name="DatabaseName" value="*****"/>
>>>>
>>>> <property name="LoginTimeout" value="0"/>
>>>>
>>>> <property name="User" value="*********"/>
>>>>
>>>> <property name="PortNumber" value="*******"/>
>>>>
>>>> <property name="Ssl" value="true"/>
>>>>
>>>> <property name="sslfactory"
>>>> value="org.postgresql.ssl.NonValidatingFactory"/>
>>>>
>>>> </jdbc-connection-pool>
>>>>
>>>>
>>>> Thank you very much
>>>>
>>>> Oleg Mayevskiy
>>