Skip to content

Instantly share code, notes, and snippets.

@eiswind
Created October 7, 2012 09:25
Show Gist options
  • Save eiswind/3847642 to your computer and use it in GitHub Desktop.
Save eiswind/3847642 to your computer and use it in GitHub Desktop.
OSGI bound Backend Processor for Hibernate Search
package de.eiswind.mango.hibernate.osgi;
import java.util.List;
import javax.jms.Queue;
import javax.jms.QueueConnectionFactory;
import org.apache.log4j.Logger;
import org.hibernate.search.backend.IndexingMonitor;
import org.hibernate.search.backend.LuceneWork;
import org.hibernate.search.backend.impl.jms.JMSBackendQueueProcessor;
import org.hibernate.search.backend.impl.jms.JMSBackendQueueTask;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Filter;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
import de.eiswind.org.hibernate.Activator;
public class OSGIJmsBackendQueueProcessor extends JMSBackendQueueProcessor {
private static final Logger log = Logger.getLogger(OSGIJmsBackendQueueProcessor.class);
private QueueConnectionFactory jmsConnectionFactory;
private Queue jmsQueue;
private BundleContext ctx;
@Override
public void prepareJMSTools() {
if(jmsConnectionFactory!=null && jmsQueue!=null){
return;
}
ctx = Activator.getContext();
ServiceTracker<QueueConnectionFactory, Object> tracker = new ServiceTracker<QueueConnectionFactory, Object>(ctx, QueueConnectionFactory.class, null) {
@Override
public Object addingService(ServiceReference<QueueConnectionFactory> reference) {
log.info("Found JMS Connection Factory");
OSGIJmsBackendQueueProcessor.this.jmsConnectionFactory = ctx.getService(reference);
return OSGIJmsBackendQueueProcessor.this.jmsConnectionFactory;
}
};
tracker.open();
Filter filter;
try {
filter = ctx.createFilter("(&(objectClass=javax.jms.Queue)(queue=hibernatesearch))");
ServiceTracker<Queue, Object> tracker2 = new ServiceTracker<Queue, Object>(ctx, filter, null) {
@Override
public Object addingService(ServiceReference<Queue> reference) {
log.info("Found JMS Queue");
OSGIJmsBackendQueueProcessor.this.jmsQueue = ctx.getService(reference);
return OSGIJmsBackendQueueProcessor.this.jmsQueue;
}
};
tracker2.open();
} catch (InvalidSyntaxException e) {
log.error("Create filter", e);
}
}
public QueueConnectionFactory getJMSFactory() {
if(this.jmsConnectionFactory==null){
throw new IllegalStateException("Connection not ready.");
}
return jmsConnectionFactory;
}
public Queue getJmsQueue() {
if(this.jmsQueue==null){
throw new IllegalStateException("Queue not ready");
}
return jmsQueue;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment