Hibernate-Search зависает со многими (90) классами сущностей. - PullRequest
2 голосов
/ 30 марта 2010

Я использую поиск в спящем режиме для своего приложения. Он хорошо настроен и отлично работает до некоторого времени назад, когда внезапно перестал работать. Причиной, по мне, является количество классов моей модели (бобов). У меня есть около 90 классов, которые я добавляю в свою конфигурацию при сборке конфигурации Hibernate.

Когда я отключаю поиск в спящем режиме (удаляю аннотации поиска и использую конфигурацию вместо AnnotationsConfiguration), я пытаюсь запустить приложение, оно работает нормально.

Но, то же самое приложение, когда я включаю поиск, просто зависает. Я попытался отладить и нашел точное место, где он висит.

После добавления всего класса в мой объект AnnotationsConfiguration, когда я говорю cfg.buildSessionfactory (), Это никогда не выходит из этого заявления. (Я ждал часами !!!)

Кроме того, когда я уменьшаю количество своих классов моделей (например, наполовину, т.е. 50), это получается из этого утверждения, и приложение работает нормально ..

Может кто-нибудь сказать, почему это происходит ?? Мои версии Hibernate: Зимуют-ядро-3.3.1.GA.jar Hibernate, для аннотаций-3.4.0.GA.jar спящая-Викисклад аннотации-3.1.0.GA.jar Зимуют-поиск-3.1.0.GA.jar

Также, если необходимо избежать использования AnnotationsConfiguration, я прочитал, что мне нужно явно настроить прослушиватели событий поиска. Может ли кто-нибудь перечислить всех необходимых прослушивателей и их соответствующие классы? (Я попробовал стандартные, приведенные в книгах Hibernate Search, но они дают мне исключение ClassNotFound, и у меня есть все необходимые библиотеки в classpath)

Вот несколько последних строк трассировки гибернации, которые мне удалось вытащить:

16:09:32,814  INFO AnnotationConfiguration:369 - Hibernate Validator not found: ignoring
16:09:32,892  INFO ConnectionProviderFactory:95 - Initializing connection provider: org.hibernate.connection.C3P0ConnectionProvider
16:09:32,895  INFO C3P0ConnectionProvider:103 - C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/autolinkcrmcom_data
16:09:32,898  INFO C3P0ConnectionProvider:104 - Connection properties: {user=root, password=****}
16:09:32,900  INFO C3P0ConnectionProvider:107 - autocommit mode: false
16:09:33,694  INFO SettingsFactory:116 - RDBMS: MySQL, version: 5.1.37-1ubuntu5.1
16:09:33,696  INFO SettingsFactory:117 - JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-3.1.10 ( $Date: 2005/05/19 15:52:23 $, $Revision: 1.1.2.2 $ )
16:09:33,701  INFO Dialect:175 - Using dialect: org.hibernate.dialect.MySQLDialect
16:09:33,707  INFO TransactionFactoryFactory:59 - Using default transaction strategy (direct JDBC transactions)
16:09:33,709  INFO TransactionManagerLookupFactory:80 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
16:09:33,711  INFO SettingsFactory:170 - Automatic flush during beforeCompletion(): disabled
16:09:33,714  INFO SettingsFactory:174 - Automatic session close at end of transaction: disabled    16:09:32,814  INFO AnnotationConfiguration:369 - Hibernate Validator not found: ignoring
16:09:32,892  INFO ConnectionProviderFactory:95 - Initializing connection provider: org.hibernate.connection.C3P0ConnectionProvider
16:09:32,895  INFO C3P0ConnectionProvider:103 - C3P0 using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost:3306/autolinkcrmcom_data
16:09:32,898  INFO C3P0ConnectionProvider:104 - Connection properties: {user=root, password=****}
16:09:32,900  INFO C3P0ConnectionProvider:107 - autocommit mode: false
16:09:33,694  INFO SettingsFactory:116 - RDBMS: MySQL, version: 5.1.37-1ubuntu5.1
16:09:33,696  INFO SettingsFactory:117 - JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-3.1.10 ( $Date: 2005/05/19 15:52:23 $, $Revision: 1.1.2.2 $ )
16:09:33,701  INFO Dialect:175 - Using dialect: org.hibernate.dialect.MySQLDialect
16:09:33,707  INFO TransactionFactoryFactory:59 - Using default transaction strategy (direct JDBC transactions)
16:09:33,709  INFO TransactionManagerLookupFactory:80 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
16:09:33,711  INFO SettingsFactory:170 - Automatic flush during beforeCompletion(): disabled
16:09:33,714  INFO SettingsFactory:174 - Automatic session close at end of transaction: disabled
16:09:33,716  INFO SettingsFactory:181 - JDBC batch size: 15
16:09:33,719  INFO SettingsFactory:184 - JDBC batch updates for versioned data: disabled
16:09:33,721  INFO SettingsFactory:189 - Scrollable result sets: enabled
16:09:33,723 DEBUG SettingsFactory:193 - Wrap result sets: disabled
16:09:33,725  INFO SettingsFactory:197 - JDBC3 getGeneratedKeys(): enabled
16:09:33,727  INFO SettingsFactory:205 - Connection release mode: auto
16:09:33,730  INFO SettingsFactory:229 - Maximum outer join fetch depth: 2
16:09:33,732  INFO SettingsFactory:232 - Default batch fetch size: 1000
16:09:33,735  INFO SettingsFactory:236 - Generate SQL with comments: disabled
16:09:33,737  INFO SettingsFactory:240 - Order SQL updates by primary key: disabled
16:09:33,740  INFO SettingsFactory:244 - Order SQL inserts for batching: disabled
16:09:33,742  INFO SettingsFactory:420 - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
16:09:33,744  INFO ASTQueryTranslatorFactory:47 - Using ASTQueryTranslatorFactory
16:09:33,747  INFO SettingsFactory:252 - Query language substitutions: {}
16:09:33,750  INFO SettingsFactory:257 - JPA-QL strict compliance: disabled
16:09:33,752  INFO SettingsFactory:262 - Second-level cache: enabled
16:09:33,754  INFO SettingsFactory:266 - Query cache: disabled
16:09:33,757  INFO SettingsFactory:405 - Cache region factory : org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge
16:09:33,759  INFO RegionFactoryCacheProviderBridge:61 - Cache provider: net.sf.ehcache.hibernate.EhCacheProvider
16:09:33,762  INFO SettingsFactory:276 - Optimize cache for minimal puts: disabled
16:09:33,764  INFO SettingsFactory:285 - Structured second-level cache entries: disabled
16:09:33,766  INFO SettingsFactory:314 - Statistics: disabled
16:09:33,769  INFO SettingsFactory:318 - Deleted entity synthetic identifier rollback: disabled
16:09:33,771  INFO SettingsFactory:333 - Default entity-mode: pojo
16:09:33,774  INFO SettingsFactory:337 - Named query checking : enabled
16:09:33,869  INFO Version:20 - Hibernate Search 3.1.0.GA
16:09:35,134 DEBUG DocumentBuilderIndexedEntity:157 - Field selection in projections is set to false for entity **com.xyz.abc**.
recognized hibernaterecognized hibernaterecognized hibernaterecognized hibernaterecognized hibernaterecognized hibernaterecognized hibernaterecognized hibernaterecognized hibernaterecognized hibernateDocumentBuilderIndexedEntity

Донно, что указывает последняя строка ??? (Hibernaterecognized ....) После последней строки он ничего не делает (тоже не отслеживает) и просто зависает ....

Ответы [ 2 ]

0 голосов
/ 10 апреля 2010

Я обнаружил проблему. Я не аннотировал свой суперкласс. У меня есть один класс, который является базовым классом почти для всех моих других классов моделей. Но странно, что поиск в спящем режиме не дал ни ошибок, ни предупреждений ... Я попробовал трюк, чтобы найти, где на самом деле он висел. Я собрал сессионный завод в отдельном потоке и печатал его след каждые 10 с лишним секунд. К моему удивлению, он фактически не зависал, но трассировка стека менялась, и он всегда был в аннотационных классах пакетов отражения.

Просто чтобы проверить, я увидел свой суперкласс и прокомментировал его, и вуаля ...... это сработало ......

@ Эммануэль Бернард: Можете ли вы просто подтвердить, почему поиск в спящем режиме не дал никаких следов или ошибок раньше и просто завис?

0 голосов
/ 31 марта 2010

Вам нужно будет дать нам больше информации. Можете ли вы взять поток дампа и показать последние несколько строк ваших журналов?

Возможно, что либо: - одна из ваших сущностей ставит проблему - какая-то блокировка или файл зависает (какую операционную систему вы используете? некоторые ограничивают количество файлов, открытых параллельно)

Для более поздней версии, если на Linux или Unix, вы можете попробовать поиграть с

ulimit -n <number>

Также убедитесь, что вы время от времени запускаете оптимизатор индекса (проверьте документацию по Hibernate Search).

...