SourceForge.net Logo
Main Overview Wiki Issues Forum Build Fisheye

Welcome, Guest
Guest Settings
Help

Compass Support Forums » Compass » Compass Users

Thread: CompassSearchHelper + Transaction Error

This question is not answered. Helpful answers available: 2. Correct answers available: 1.


Permlink Replies: 9 - Pages: 1 - Last Post: Nov 8, 2011 8:28 PM Last Post By: ying
Harini

Posts: 43
Registered: 5/10/07
CompassSearchHelper + Transaction Error
Posted: Jun 4, 2007 8:04 AM
 
  Click to reply to this thread Reply
Hi Everyone,

I have integrated Compass in to the search workflow in my application. It seems to work, but after searching twice or thrice, it is giving the following exception.

--------------error message -------------------------------
org.compass.core.engine.SearchEngineException: Search engine transaction not successfully started or already committed/rolledback
at org.compass.core.lucene.engine.LuceneSearchEngine.verifyWithinTransaction(Lucen eSearchEngine.java:223)
at org.compass.core.lucene.engine.LuceneSearchEngine.find(LuceneSearchEngine.java: 378)
at org.compass.core.lucene.engine.LuceneSearchEngineQuery.hits(LuceneSearchEngineQ uery.java:144)
at org.compass.core.impl.DefaultCompassQuery.hits(DefaultCompassQuery.java:119)

Here is the code that is building the query and invoking the CompassSearchHelper to search. Looks like the CompassSearchHelper is trying to start a new transaction and not joining the existing one. Should this not be enclosed in a Compass transaction?

Map searchResults = (Map) compassTemplate.execute( CompassTransaction.TransactionIsolation.READ_ONLY_READ_COMMITTED, new CompassCallback() {
public Object doInCompass(CompassSession session) throws CompassException {
Map results = null;
try {
String query = builder.getSearchQuery(searchCriteria, userMyCompanies);
final CompassQuery compassQuery = CompassSessionManager.currentSession().queryBuilder()
.queryString(query.trim())
.toQuery()
.addSort("lastName", CompassQuery.SortPropertyType.STRING)
.addSort("firstName", CompassQuery.SortPropertyType.STRING);
results = searchCompass(compassQuery, new Integer(page));
} catch(CompassException ce) {
logger.error("CompassException in doInCompass() while searching for people ", ce);
} catch(Exception e) {
logger.error("Exception in doInCompass() while searching for people ", e);
}
return results;
}

Thanks,
Harini

jolinar13

Posts: 129
Registered: 12/21/06
Re: CompassSearchHelper + Transaction Error
Posted: Jun 4, 2007 8:21 AM   in response to: Harini in response to: Harini
 
  Click to reply to this thread Reply
Hello,
Make sure to examine the whole stack trace, since another exception is sometimes thrown before this one.
Florian
Harini

Posts: 43
Registered: 5/10/07
Re: CompassSearchHelper + Transaction Error
Posted: Jun 4, 2007 11:43 PM   in response to: jolinar13 in response to: jolinar13
 
  Click to reply to this thread Reply
Hello Florian,

I checked the stack trace. This seems to be the root excpetion. Below is the exception stack trace.

-Harini

2007-06-05 10:10:09,500 INFO [integration.compass.CompassQueryStringBuilder] First Name Clause..."adam"
2007-06-05 10:10:09,500 INFO [integration.compass.CompassSearcher] Page: 1
2007-06-05 10:10:09,500 DEBUG [org.compass.core.transaction.LocalTransaction] Joining an existing local transcation on thread [http-0.0.0.0-8080-Processor23] Compass [32412895] Session [13660829]
2007-06-05 10:10:09,515 DEBUG [org.compass.core.transaction.LocalTransaction] Rolling back local transaction, which exists within another local transaction on thread [http-0.0.0.0-8080-Processor23] Compass [32412895] Session [13660829]
2007-06-05 10:10:09,515 ERROR [integration.compass.CompassSearcher] CompassException in doInCompass() while searching for people
org.compass.core.engine.SearchEngineException: Search engine transaction not successfully started or already committed/rolledback
at org.compass.core.lucene.engine.LuceneSearchEngine.verifyWithinTransaction(LuceneSearchEngine.java:223)
at org.compass.core.lucene.engine.LuceneSearchEngine.find(LuceneSearchEngine.java:378)
at org.compass.core.lucene.engine.LuceneSearchEngineQuery.hits(LuceneSearchEngineQuery.java:144)
at org.compass.core.impl.DefaultCompassQuery.hits(DefaultCompassQuery.java:119)
at org.compass.core.support.search.CompassSearchHelper.performSearch(CompassSearchHelper.java:101)
at org.compass.core.support.search.CompassSearchHelper$1.doInCompass(CompassSearchHelper.java:82)
at org.compass.core.CompassTemplate.execute(CompassTemplate.java:137)
at org.compass.core.support.search.CompassSearchHelper.search(CompassSearchHelper.java:79)
at integration.compass.CompassSearcher.searchCompass(CompassSearcher.java:91)
at integration.compass.CompassSearcher$1.doInCompass(CompassSearcher.java:71)
at org.compass.core.CompassTemplate.execute(CompassTemplate.java:137)
at integration.compass.CompassSearcher.loadPeople(CompassSearcher.java:61)
at services.search.SearchSessionBean.loadPeopleBySection(SearchSessionBean.java:663)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.jboss.invocation.Invocation.performCall(Invocation.java:345)
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:214)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:113)
at org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:48)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:105)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:313)
at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:146)
at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:122)
at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:192)
at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:122)
at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:624)
at org.jboss.ejb.Container.invoke(Container.java:870)
at org.jboss.ejb.plugins.local.BaseLocalProxyFactory.invoke(BaseLocalProxyFactory.java:413)
at org.jboss.ejb.plugins.local.StatelessSessionProxy.invoke(StatelessSessionProxy.java:82)
at $Proxy114.loadPeopleBySection(Unknown Source)
at services.delegate.SearchSessionDelegate.loadPeopleBySection(SearchSessionDelegate.java:121)
at webtier.actions.search.PeopleSearchAction.searchPeople(PeopleSearchAction.java:688)
at webtier.actions.search.PeopleSearchAction.executePeopleSearch(PeopleSearchAction.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:276)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:196)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at webtier.interceptor.ActivityLogFilter.doFilter(ActivityLogFilter.java:95)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at webtier.interceptor.RememberLoginFilter.doFilter(RememberLoginFilter.java:223)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at webtier.interceptor.RecentlyViewedCompanyFilter.doFilter(RecentlyViewedCompanyFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.hdiv.filter.ValidatorFilter.processRequest(ValidatorFilter.java:162)
at org.hdiv.filter.ValidatorFilter.doFilter(ValidatorFilter.java:121)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:66)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:150)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:54)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:595)
jolinar13

Posts: 129
Registered: 12/21/06
Re: CompassSearchHelper + Transaction Error
Posted: Jun 5, 2007 2:13 AM   in response to: Harini in response to: Harini
 
  Click to reply to this thread Reply
Hello,
Sorry, can't help you on this one
Florian
Harini

Posts: 43
Registered: 5/10/07
Re: CompassSearchHelper + Transaction Error
Posted: Jun 5, 2007 4:08 AM   in response to: jolinar13 in response to: jolinar13
 
  Click to reply to this thread Reply
No problem. I got it working now.

I think there might be some problem with the CompassTemplate. Instead of the CompassTemplate, I modified the code to open the session and start/commit/rollback the transaction and now it is working fine.

Here is the modified code:

try {
session = CompassSessionManager.currentSession();
tr = session.beginTransaction();

String query = builder.getSearchQuery(searchCriteria, userMyCompanies);
compassQuery = session.queryBuilder()
.queryString(query.trim())
.toQuery()
.addSort("lastName", CompassQuery.SortPropertyType.STRING)
.addSort("firstName", CompassQuery.SortPropertyType.STRING);

searchResults = searchCompass(compassQuery, page);

tr.commit();
} catch(Exception e) {
e.printStackTrace();
tr.rollback();
} finally {
CompassSessionManager.closeSession();
}
jolinar13

Posts: 129
Registered: 12/21/06
Re: CompassSearchHelper + Transaction Error
Posted: Jun 5, 2007 4:25 AM   in response to: Harini in response to: Harini
 
  Click to reply to this thread Reply
Actually, CompassTemplate works for me:

// Creating and initializing the CompassConfiguration object.
CompassConfiguration conf = new CompassConfiguration()
	.configure("/compass.cfg.xml");	// Specifying the path from where
						// to load the compass.cfg.xml file.
 
// Creating and initializing the Compass object.
this.myCompass = conf.buildCompass();
 
//Initialize CompassTemplate to provide search functionality
this.myCompassTemplate = new CompassTemplate(this.myCompass);
 
//Search
CompassDetachedHits hits = this.myCompassTemplate.findWithDetach(criteria);
Shay Banon

Posts: 4,028
Registered: 9/6/05
Re: CompassSearchHelper + Transaction Error
Posted: Jun 5, 2007 2:09 PM   in response to: jolinar13 in response to: jolinar13
 
  Click to reply to this thread Reply
This is what CompassTemplate does:

code
CompassSession session = compass.openSession();
session.getSettings().addSettings(globalSessionSettings);
CompassTransaction tx = null;
try {
tx = session.beginTransaction(transactionIsolation);
Object result = action.doInCompass(session);
tx.commit();
return result;
} catch (RuntimeException e) {
if (tx != null) {
try {
tx.rollback();
} catch (Exception e1) {
log.error("Failed to rollback transaction, ignoring", e1);
}
}
throw e;
} catch (Error err) {
if (tx != null) {
try {
tx.rollback();
} catch (Exception e1) {
log.error("Failed to rollback transaction, ignoring", e1);
}
}
throw err;
} finally {
session.close();
}
code

Note, it rollbacks only on runtime exception which is different than your code.
msolnit

Posts: 108
Registered: 10/12/06
Re: CompassSearchHelper + Transaction Error
Posted: Jun 5, 2007 3:58 PM   in response to: Shay Banon in response to: Shay Banon
 
  Click to reply to this thread Reply
Hi Harini. Glad to hear you got it working. Just out of curiosity, does your Compass configuration use JTASyncTransactionFactory? The reason I ask is that it looks like you are operating inside of a container-managed transaction (I see "CMT" in your stack trace).

-- Matt
Harini

Posts: 43
Registered: 5/10/07
Re: CompassSearchHelper + Transaction Error
Posted: Jun 6, 2007 5:52 AM   in response to: msolnit in response to: msolnit
 
  Click to reply to this thread Reply
Actually the compass search is being invoked through a session bean. That might be the reason it is in a CMT. My compass.cfg.xml is pretty simple. I have not specified any transaction factory.

<compass-core-config>
<compass name="default">
<connection>
<file path="/nfs/lucene-t/index2/"/>
</connection>
<mappings>
<class name="integration.compass.ExecutiveObject" />
</mappings>
</compass>
</compass-core-config>
ying

Posts: 182
Registered: 11/8/11
Re: CompassSearchHelper + Transaction Error
Posted: Nov 8, 2011 8:28 PM   in response to: Harini in response to: Harini
 
  Click to reply to this thread Reply
doudoune moncler pas cherMoncler fut d’abord bien tout au long des mois d’hiver relatives à 2011, un сеrtа?n nombre de fête sont généralement profondément en reconna?tre la valeur de l’utilisation moncler femme revêtement à bas prix à bas prix sur des filles de plus revêtement males adultes. Chaque fois que vous la liste des prochains à internet, vous êtes en mesure de savoir qui à son tour, vous découvrirez que l’information Moncler à bas prix revêtement sauve une р?асе par inhalation énorme. Ils devraient opter pour plut?t tendance supplémentaires manteaux d’hiver Moncler quincy. Moncler n’est pas vraiment la seule forme réelle, mais de haute qualité des produits. Ils doivent reconna?tre la valeur de pour obtenir de plus actuel, il doudoune Moncler femme, l’identité AOS. Jusqu’à ce n’est certainement pas trop d’effort précédemment, de nombreuses personnes peuvent ainsi dans la capacité de l’essence de cette nature avec l’évasion tandis que dans le film. Bien que cette unique, élégant savoir-faire en raison de la vocation qui va dupliquer un analogue audio-visuels d’adresse de la bonne fa?οn de découvrir personnels dortoirs. I, ??ll accorder une attention particulière aux éléments relatifs à la technique des maisons performance live en utilisant une telle étude. Découvrez le savoir comment ces compétences essentielles pourrait bien offrir l’image exceptionnelle notamment utiles rencontré probables dans chaque élément de sur-mesure la position d’activité.
MonclerBatiment performance live Filles expérience nord Denali Revêtement savamment points générés sur la processus particulier tout en créant un processus triplex personnels activité procrastination est nécessaire pour être le genre alors que dans la position où que vous soyez seul en mesure de configurer ce ménage de sortie direct Moncler vestes des performances. Un des facteurs les plus essentiels avec chaque personne, personne AO ??mesure pour votre activité actuelle technique personnelle maison de tergiverser, qui pourrait être définitivement le concept, dépend avec pour à peu près aucune mesure à travers la chambre à coucher, si ou non cet avenant est le fait de cette 35 po collection de Telly est probablement ce quantité critique pour à peu près aucun divertissement à domicile utilisés. A tout moment, généralement chercher, ce n’est pas vraiment considéré en outre une grande tension actuelle à c?té de cette confirmation de provoquer, de découvrir comment résoudre ce tenues de route assez bonne. Tenues Moncler femme pourrait transporter des avantages qui appartiennent à cette costumes attrayants, les plus connus feraient. Le concept sera probablement votre branche individuelle alors que dans cette conséquence cette unique suggère à son tour pour vous si vous avez besoin de posséder un réellement bénéfiques au chaud fantastique stupéfiant, téléphone cellulaire Moncler homme experts acheter en ligne sur l’adresse est vraiment un groupe beaucoup plus la mère recommandée tests de la nature.
Par conséquent, pour un nombre de males et femelles, de l’acheter, AOS volonté Abercrombie prise électrique, afin qu’ils soient généralement de planification pour recevoir la fa?οn dont ces gens la demande des clients. Ainsi, il, AOS braveness outre, la conviction.abercrombie paris cher sont généralement gentil! Recevez directement vers le bas est de qualité très premier associé, comme l’égalité, offrant d’énormes vestes moncler, la prudence doit être consommé Moncler prise électrique. Exactement pourquoi, comme les producteurs de film, en fait obtenir la plupart des sacs à main boutique Abercrombie & Fitch initiales en ligne vers le bas Gilet pour eux de se traduire par une plus grande renverser cette ligne droite. Concernant perfectionne! Tirs spécifiques sac de voyage, alors que dans la zone qui ressemble, y compris la bonne qualité énorme, modestes, plus la lumière. Beaucoup d’entre nous généralement à la baisse, étant entendu que l’intention quiconque est excessivement gras, nerveux peuvent appara?tre poids actuel, en fait tout simplement ISN, France Abercrombie s’apparente à ce genre d’, si jamais vous trouvez le mental petits, des enveloppements à la hausse de cette colocalisation astucieux immédiatement vers le bas, pas simplement vous aidera à graisses semblent être néanmoins une identité propre pourrait être colorier dans le bois dur. Ainsi, Il, AOS ne fait aucun doute que, de nombreuses filles seront enthousiasmés par France Abercrombie énormes doublons. Vérifiez exactement pourquoi, commères aussi ce de nombreuses stars d’utiliser sophistiqués vers le bas souvent. Comme l’engouement pourrait être nécessaire, la plupart de ces téléphones cellulaires avant de chercher pour presque n’importe quel sac de voyage, aujourd’hui, toute Là encore, il ya certainement encore une autre , plus de téléphone de l’plusieurs possibilités.
Legend
Guru: 2001 + pts
Expert: 501 - 2000 pts
Super-star: 101 - 500 pts
Assistant: 51 - 100 pts
Participant: 0 - 50 pts
Helpful Answer (5 pts)
Correct Answer (10 pts)

Point your RSS reader here for a feed of the latest messages in all forums