[
http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-640?pag...
]
Mario Winterer commented on HSEARCH-640:
----------------------------------------
Thanks for your comment on this issue. After inspecting relevant code of hibernate core
and search, I think you pinpointed it exactly.
That's why it works perfectly when hibernate is configured to use the
JTATransactionFactory, in which case session.beginTransaction() delegates to a JTA
UserTransaction instead of just joining an existing transaction (which is not available
because the indexing threads run 'outside' the container). So I think it is not
necessarily required to omit session.beginTransaction() in an EE container as long as
there is an active UserTransaction that can be joined.
If this is true, it might be sufficient to wrap the Runnables that are executed by
BatchIndexingWorkspace.run() into 'JTA aware Runnables' that start a
UserTransaction before delegating to the original Runnable.
MassIndexer/JBoss 6: Could not register synchronization for container
transaction
---------------------------------------------------------------------------------
Key: HSEARCH-640
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-640
Project: Hibernate Search
Issue Type: Bug
Components: massindexer
Affects Versions: 3.3.0.CR1
Environment: Hibernate 3.6.0.Final, JBoss 6.0.0.CR1, HSQL 1.8.0 (shipped with
JBoss 6.0.0.CR1)
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Reporter: Mario Winterer
Assignee: Sanne Grinovero
Priority: Critical
Fix For: 3.3.0.Final
Attachments: contacts.ear
If a mass indexer is used inside a CMP bean in JBoss 6 to rebuild the search index, an
org.hibernate.TransactionException is thrown:
{noformat}
2010-12-06 14:01:30,720 ERROR
[org.hibernate.search.batchindexing.EntityConsumerLuceneworkProducer]
(Hibernate Search: collectionsloader-1) error during batch indexing:
: org.hibernate.TransactionException: Could not register synchronization for container
transaction
at org.hibernate.transaction.CMTTransaction.begin(CMTTransaction.java:76)
[:3.6.0.Final]
at
org.hibernate.ejb.transaction.JoinableCMTTransaction.begin(JoinableCMTTransaction.java:89)
[:3.6.0.Final]
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473)
[:3.6.0.Final]
at
org.hibernate.search.batchindexing.EntityConsumerLuceneworkProducer.run(EntityConsumerLuceneworkProducer.java:90)
[:3.3.0.CR1]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
[:1.6.0_20]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
[:1.6.0_20]
at java.lang.Thread.run(Thread.java:619) [:1.6.0_20]
{noformat}
I've included an example EAR (see attachment) that can be deployed to JBoss 6.0.0.CR1
without any modifications.
It contains the required hibernate search libraries and defines one single indexed entity
bean {{Contact}} as well as a JBoss service EJB named {{at.mw.contacts:ContactsService}}
that can be accessed via JMX console.
Use this service to do one of the following things:
* add new contacts by specifying firstName/lastName
* list all contacts
* search for contacts using the search index
* rebuild the entire search index (using a MassIndexer)
Rebuilding the index fails with the exception listed above.
Sources included.
(the example uses an in-memory HSQL-DB and the ram directory provider for the lucene
index).
(see also forum discussion: [Could not register synchronization for container
transaction|https://forum.hibernate.org/viewtopic.php?f=9&t=1004515&a...])
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira