Skip to content

Instantly share code, notes, and snippets.

@hferentschik
Created May 13, 2015 11:43
Show Gist options
  • Save hferentschik/1c0708926c0e77cb310a to your computer and use it in GitHub Desktop.
Save hferentschik/1c0708926c0e77cb310a to your computer and use it in GitHub Desktop.
import java.util.List;
import java.util.Map;
import acme.Film;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.metadata.ClassMetadata;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.exception.SearchException;
import org.hibernate.search.query.dsl.QueryBuilder;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
/**
* @author Hardy Ferentschik
*/
public class Main {
private static final SessionFactory ourSessionFactory;
private static final ServiceRegistry serviceRegistry;
static {
try {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings( configuration.getProperties() )
.buildServiceRegistry();
ourSessionFactory = configuration.buildSessionFactory( serviceRegistry );
}
catch ( Throwable ex ) {
throw new ExceptionInInitializerError( ex );
}
}
public static Session getSession() throws HibernateException {
return ourSessionFactory.openSession();
}
public static void main(final String[] args) throws Exception {
indexEntities();
search();
}
private static void indexEntities() throws Exception {
FullTextSession fullTextSession = Search.getFullTextSession( getSession() );
try {
fullTextSession.createIndexer().startAndWait();
System.out.println("Indexing complete");
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.out.println("thread interrupted");
}
finally {
fullTextSession.close();
}
}
private static void search() {
Session session = getSession();
try {
FullTextSession fullTextSession = Search.getFullTextSession( session );
QueryBuilder builder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity( Film.class ).get();
org.apache.lucene.search.Query query = builder.keyword()
.wildcard()
.onField( "actors.firstName" )
.matching( "me*" )
.createQuery();
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query, Film.class );
List<Film> films = fullTextQuery.list();
System.out.println("Search results:");
for ( Film film : films ) {
System.out.println( film );
}
System.out.println("Done");
}
finally {
session.close();
}
}
private static void dumpEntities(Session session) {
System.out.println( "querying all the managed entities..." );
final Map metadataMap = session.getSessionFactory().getAllClassMetadata();
for ( Object key : metadataMap.keySet() ) {
final ClassMetadata classMetadata = (ClassMetadata) metadataMap.get( key );
final String entityName = classMetadata.getEntityName();
final Query query = session.createQuery( "from " + entityName );
System.out.println( "executing: " + query.getQueryString() );
for ( Object o : query.list() ) {
System.out.println( " " + o );
}
}
}
}
@hferentschik
Copy link
Author

Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.45-b08 mixed mode):

"DestroyJavaVM" prio=5 tid=0x00007f98c3611000 nid=0x1503 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Hibernate Search sync consumer thread for index acme.Film" daemon prio=5 tid=0x00007f98c321e000 nid=0x5303     waiting on condition [0x00000001124af000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:349)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor.parkCurrentThread(SyncWorkProcessor.    java:155)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor.access$300(SyncWorkProcessor.java:33)
    at org.hibernate.search.backend.impl.lucene.SyncWorkProcessor$Consumer.run(SyncWorkProcessor.java:131)
    at java.lang.Thread.run(Thread.java:744)

"pool-1-thread-1" prio=5 tid=0x00007f98c29b3800 nid=0x5107 waiting on condition [0x00000001123ac000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000007aec62220> (a java.util.concurrent.locks.    AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(    AbstractQueuedSynchronizer.java:2082)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.    java:1090)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.    java:807)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)

"Abandoned connection cleanup thread" daemon prio=5 tid=0x00007f98c1867000 nid=0x4b03 in Object.wait() [    0x00000001122a9000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000007af10fa28> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
    - locked <0x00000007af10fa28> (a java.lang.ref.ReferenceQueue$Lock)
    at com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:43)

"Monitor Ctrl-Break" daemon prio=5 tid=0x00007f98c28b4000 nid=0x4903 runnable [0x0000000111b79000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:152)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
    - locked <0x00000007ad1fb3a8> (a java.io.InputStreamReader)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:154)
    at java.io.BufferedReader.readLine(BufferedReader.java:317)
    - locked <0x00000007ad1fb3a8> (a java.io.InputStreamReader)
    at java.io.BufferedReader.readLine(BufferedReader.java:382)
    at com.intellij.rt.execution.application.AppMain$1.run(AppMain.java:93)
    at java.lang.Thread.run(Thread.java:744)

"Service Thread" daemon prio=5 tid=0x00007f98c283d800 nid=0x4503 runnable [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread1" daemon prio=5 tid=0x00007f98c300c800 nid=0x4303 waiting on condition [    0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"C2 CompilerThread0" daemon prio=5 tid=0x00007f98c182d800 nid=0x4103 waiting on condition [    0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=5 tid=0x00007f98c2014000 nid=0x320f waiting on condition [    0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=5 tid=0x00007f98c1818000 nid=0x2f03 in Object.wait() [0x000000010f96e000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000007af111130> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
    - locked <0x00000007af111130> (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189)

"Reference Handler" daemon prio=5 tid=0x00007f98c180d000 nid=0x2d03 in Object.wait() [0x000000010f86b000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on <0x00000007af1112a8> (a java.lang.ref.Reference$Lock)
    at java.lang.Object.wait(Object.java:503)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
    - locked <0x00000007af1112a8> (a java.lang.ref.Reference$Lock)

"VM Thread" prio=5 tid=0x00007f98c2838000 nid=0x2b03 runnable 

"GC task thread#0 (ParallelGC)" prio=5 tid=0x00007f98c180f000 nid=0x2303 runnable 

"GC task thread#1 (ParallelGC)" prio=5 tid=0x00007f98c3001000 nid=0x2503 runnable 

"GC task thread#2 (ParallelGC)" prio=5 tid=0x00007f98c200f000 nid=0x2703 runnable 

"GC task thread#3 (ParallelGC)" prio=5 tid=0x00007f98c200f800 nid=0x2903 runnable 

"VM Periodic Task Thread" prio=5 tid=0x00007f98c283b800 nid=0x4703 waiting on condition 

@hferentschik
Copy link
Author

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:mysql://localhost:3306/sakila</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="connection.username">hibernate</property>
        <property name="connection.password">hibernate</property>
        <mapping class="acme.Actor"/>
        <mapping class="acme.Film"/>
        <!-- DB schema will be updated if needed -->
        <!-- <property name="hbm2ddl.auto">update</property> -->
    </session-factory>
</hibernate-configuration>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment