Я пытаюсь запустить dpHibernate 2.0 RC6 на Apache Tomcat 7.0.12 с BlazeDS 4.0.0.14931, Spring 3.0.5 и Spring-BlazeDS-Integration 1.5.0.M2
При следующей конфигурации сервер запускается нормально, но как только я хочу получить доступ к службе или RDSDispatchServlet через FlashBuilder4 DCD, я получаю исключение NullPointerException. Похоже, что serializerFactory неправильно введен в dpHibernate HibernateUtil. Я что-то упустил в конфигурации в remoting-config.xml?
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<display-name>Server</display-name>
<description>Server Side based on BlazeDS, Spring and Hibernate</description>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<!-- begin SPRING INTEGRATION -->
<servlet>
<servlet-name>springMessageBroker</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- <init-param> -->
<!-- <param-name>contextConfigLocation</param-name> -->
<!-- <param-value></param-value> Do not use if using ContextLoaderListener (would load app context twice -> Error) -->
<!-- </init-param> -->
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMessageBroker</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
<!-- end SPRING INTEGRATION -->
<!-- begin rds -->
<servlet>
<servlet-name>RDSDispatchServlet</servlet-name>
<servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
<init-param>
<param-name>useAppserverSecurity</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>messageBrokerId</param-name>
<param-value>_messageBroker</param-value>
</init-param>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>RDSDispatchServlet</servlet-name>
<url-pattern>/CFIDE/main/ide.cfm</url-pattern>
</servlet-mapping>
<!-- end rds -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
<filter>
<filter-name>dpHibernateSessionFilter</filter-name>
<filter-class>org.dphibernate.filters.HibernateSessionServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>dpHibernateSessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
applicationContext.xml (файл конфигурации Spring Servlet по умолчанию)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:flex="http://www.springframework.org/schema/flex"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:security="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<import resource="flexContext.xml" />
<import resource="dataAccessContext.xml" />
<import resource="dpHibernateContext.xml"/>
<!-- Enable Spring Transaction Manager with Annotations -->
<tx:annotation-driven />
<context:annotation-config />
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="/WEB-INF/server.properties" /></bean>
<context:component-scan base-package="com.mycompany.myproject.*" />
</beans>
flexContext.xml (определения служб, доступных для flex)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:flex="http://www.springframework.org/schema/flex"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd">
<flex:message-destination id="chat"/>
<flex:message-broker services-config-path="/WEB-INF/flex/services-config.xml">
<flex:remoting-service default-adapter-id="dpHibernateRemotingAdapter" default-channels="my-amf,my-secure-amf" />
<flex:message-service default-channels="my-streaming-amf,my-polling-amf"/>
</flex:message-broker>
</beans>
fpHibernateContext.xml (настройка dpHibernate)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:flex="http://www.springframework.org/schema/flex"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
">
<!-- Defines the remoting adapter, which intercepts inbound & outbound messages, and routes them thruogh dpHibernate -->
<bean id="dpHibernateRemotingAdapter"
class="org.springframework.flex.core.ManageableComponentFactoryBean">
<constructor-arg value="org.dphibernate.adapters.RemotingAdapter" />
<property name="properties">
<value>
{"dpHibernate" :
{
"serializerFactory" : "org.dphibernate.serialization.SpringContextSerializerFactory"
}
}
</value>
</property>
</bean>
<bean id="dpHibernateMessagingAdapter"
class="org.springframework.flex.core.ManageableComponentFactoryBean">
<constructor-arg value="org.dphibernate.adapters.MessagingAdapter" />
</bean>
<bean id="dataAccessService" class="org.dphibernate.services.SpringLazyLoadService" autowire="constructor">
<flex:remoting-destination />
</bean>
<!-- Required -->
<bean id="hibernateSessionFilter" class="org.dphibernate.filters.SpringHibernateSessionServletFilter" />
<!-- The cache is used to prevent serializing the same object many times during serialization. Required -->
<bean id="dpHibernateCache"
class="org.dphibernate.serialization.DPHibernateCache" scope="prototype" />
<!-- The main serializer. Converts outbound POJO's to ASObjects with dpHibernate proxies for lazy loading. Required -->
<bean id="dpHibernateSerializer"
class="org.dphibernate.serialization.HibernateSerializer" scope="prototype">
<property name="pageSize" value="10"/>
</bean>
<bean id="dpHibernateDeserializer" class="org.dphibernate.serialization.HibernateDeserializer" scope="prototype" />
<!-- Handles entity updates (CRUD). Required if using entity persistence. -->
<bean id="objectChangeUpdater"
class="org.dphibernate.persistence.state.AuthenticatedObjectChangeUpdater"
scope="prototype">
<property name="preProcessors" ref="dpHibernatePreProcessors" />
<property name="postProcessors" ref="dpHibernatePostProcessors" />
</bean>
</beans>
remoting-config.xml (импортировано в services-config.xml)
<service id="remoting-service"
class="flex.messaging.services.RemotingService"
messageTypes="flex.messaging.messages.RemotingMessage">
<adapters>
<adapter-definition id="hibernate-object" class="org.dphibernate.adapters.RemotingAdapter" default="true">
<properties>
<hibernate>
<sessionFactory>
<class>org.dphibernate.utils.HibernateUtil</class>
<getCurrentSessionMethod>getCurrentSession</getCurrentSessionMethod>
</sessionFactory>
</hibernate>
</properties>
</adapter-definition>
<adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter"/>
</adapters>
<default-channels>
<channel ref="my-amf"/>
</default-channels>
</service>
NullPointerException (при доступе к сервису или доступе через RDS через FB4 DCD)
startInternal INFO: запуск сервлета
Двигатель: Apache Tomcat / 7.0.12
11.04.2011 18:34:19 org.apache.catalina.core.ApplicationContext
log INFO: Инициализация корня Spring
WebApplicationContext 1027 [Тема-2]
ИНФОРМАЦИЯ
org.hibernate.annotations.common.Version
- Hibernate Commons Annotations 3.2.0.Final 1066 [Thread-2] INFO org.hibernate.cfg.Environment -
Hibernate 3.6.2.Final 1074 [Тема-2]
ИНФОРМАЦИЯ org.hibernate.cfg.Environment -
hibernate.properties не найден 1085
[Тема-2] ИНФО
org.hibernate.cfg.Environment -
Имя поставщика байт-кода: javassist
1116 [Тема-2] ИНФОРМАЦИЯ
org.hibernate.cfg.Environment - использование
JDK 1.4 java.sql. Обработка временных меток
2146 [Тема-2] ИНФОРМАЦИЯ
org.hibernate.cfg.Configuration -
Валидатор гибернации не найден:
игнорируя 2182 [Тема-2] ИНФОРМАЦИЯ
org.hibernate.cfg.search.HibernateSearchEventListenerRegister
- Невозможно найти org.hibernate.search.event.FullTextIndexEventListener
на пути к классам. Поиск в спящем режиме
не включено. 2194 [Тема-2] ИНФОРМАЦИЯ
org.hibernate.connection.ConnectionProviderFactory
- Инициализация поставщика соединений: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider
2658 [Тема-2] ИНФОРМАЦИЯ
org.hibernate.cfg.SettingsFactory -
База данных ->
имя: MySQL
версия: 5.0.51a-24 + lenny5-log
Major: 5
несовершеннолетний: 0 2658 [Тема-2] ИНФОРМАЦИЯ org.hibernate.cfg.SettingsFactory -
Водитель ->
имя: MySQL-AB Драйвер JDBC
версия: mysql-connector-java-5.1.15 (
Редакция: $ {bzr.revision-id})
Major: 5
несовершеннолетний: 1 2861 [Тема-2] INFO org.hibernate.dialect.Dialect - Использование
говор:
org.hibernate.dialect.MySQLInnoDBDialect
2981 [Тема-2] ИНФОРМАЦИЯ
org.hibernate.transaction.TransactionFactoryFactory
- Стратегия транзакции: org.springframework.orm.hibernate3.SpringTransactionFactory
2991 [Тема-2] ИНФОРМАЦИЯ
org.hibernate.transaction.TransactionManagerLookupFactory
- TransactionManagerLookup не настроен (в среде JTA использование
чтение-запись или транзакция
кеш второго уровня не рекомендуется)
2991 [Тема-2] ИНФОРМАЦИЯ
org.hibernate.cfg.SettingsFactory -
Автоматическая промывка во время
beforeCompletion (): отключено 2991
[Тема-2] ИНФО
org.hibernate.cfg.SettingsFactory -
Автоматическое закрытие сессии в конце
транзакция: отключена 2991 [Тема-2]
ИНФОРМАЦИЯ org.hibernate.cfg.SettingsFactory
- Размер пакета JDBC: 20 2991 [Тема-2] ИНФОРМАЦИЯ org.hibernate.cfg.SettingsFactory
- Пакетные обновления JDBC для версионных данных: отключено 2998 [Thread-2] INFO
org.hibernate.cfg.SettingsFactory -
Прокручиваемые наборы результатов: включено 2998
[Тема-2] ИНФО
org.hibernate.cfg.SettingsFactory -
JDBC3 getGeneratedKeys (): включено 2998
[Тема-2] ИНФО
org.hibernate.cfg.SettingsFactory -
Режим разъединения соединения: авто 3003
[Тема-2] ИНФО
org.hibernate.cfg.SettingsFactory -
Максимальная глубина извлечения внешнего соединения: 2 3003
[Тема-2] ИНФО
org.hibernate.cfg.SettingsFactory -Размер пакетной выборки по умолчанию: 1 3003 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Создать SQL с комментариями: отключено 3003 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Упорядочить обновления SQL по первичному ключу: отключено3003 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Заказать вставки SQL для пакетирования: отключено 3003 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Переводчик запросов: org.hibernate.hql.ast.ASTQueryTranslatorFactory 3023[Thread-2] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Использование ASTQueryTranslatorFactory 3023 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Запросы замены языка: {} 3023 [Thread-2] INFO org.hiber.cfg.SettingsFactory - строгое соответствие JPA-QL: отключено 3023 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - кэш второго уровня: включено 3023 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - кэш запросов:отключено 3029 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Фабрика области кэша: org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge 3074 [Thread-2] ИНФОРМАЦИЯ org.hibernate.cache.impl.bridge.RegionFactoryCacheProviderBridge - Поставщик кэша: org.hibernate.cache.HashtableCacheProvider 3084 [Thread-2] INFO org.hibernate.izeF.FFминимальные значения: отключено 3084 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - записи структурированного кэша второго уровня: отключено 3131 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - вывод всех SQL в стандартный вывод 3138 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Статистика: отключено 3138 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Откат синтетического идентификатора удаленного объекта: отключено 3138 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Режим объекта по умолчанию: pojo 3138 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Проверка именованного запроса: включено 3138 [Thread-2] INFO org.hibernate.cfg.SettingsFactory - Проверка Nullability в ядре (должно бытьотключено при включенной проверке бина): включено 3239 [Thread-2] INFO org.hibernate.impl.SessionFactoryImpl - создание фабрики сеансов 3282 [Thread-2] INFO org.hibernate.type.BasicTypeRegistry - регистрация типа [blob] переопределяет предыдущее: org.hibernate.type.BlobType@17f7be7b 3282 [Thread-2] INFO org.hibernate.type.BasicTypeRegistry - регистрация типа [java.sql.Blob] переопределяет предыдущее: org.hibernate.type.BlobType@17f7be7b 3282 [Thread-2] INFO org.hibernate.type.BasicTypeRegistry - регистрация типа [materialized_clob] переопределяет предыдущее:org.hibernate.type.MaterializedClobType@9fa8988 3282 [Thread-2] INFO org.hibernate.type.BasicTypeRegistry - регистрация типов [wrapper_materialized_blob] переопределяет предыдущее: org.hibernate.type.WrappedMaterializedBlobType@6f0. INFO2.hibernate.type.BasicTypeRegistry - регистрация типа [clob] переопределяет предыдущее: org.hibernate.type.ClobType@21044daf 3282 [Thread-2] INFO org.hibernate.type.BasicTypeRegistry - регистрация типа [java.sql.Clob] переопределяет предыдущее:org.hibernate.type.ClobType@21044daf 3282 [Thread-2] INFO org.hibernate.type.BasicTypeRegistry - регистрация типа [characters_clob] переопределяет предыдущее: org.hibernate.type.PrimitiveCharacterArrayClobType@21882d18 3282 [Thread-2] INFO org.hibernate.type.BasicTypeRegistrywrapper_characters_clob] переопределяет предыдущее: org.hibernate.type.CharacterArrayClobType@734893da 3282 [Thread-2] INFO org.hibernate.type.BasicTypeRegistry - регистрация типа [materialized_blob] переопределяет предыдущее: org.hibernate.type-Blog.79.T32] ИНФОРМАЦИЯ org.hibernate.impl.SessionFactoryObjectFactory - Не привязана фабрика к JNDI, имя JNDI не настроено 11.04.2011 18:34:36 org.apache.catalina.core.ApplicationContext log INFO: Инициализация Spring FrameworkServlet «springMessageBroker»11.04.2011 18:34:36 org.apache.coyote.AbstractProtocolHandler start INFO: Запуск ProtocolHandler ["http-bio-8080"] 11.04.2011 18:34:36 org.apache.coyote.AbstractProtocolHandler start INFO: Запуск ProtocolHandler ["ajp-bio-8009"] 11.04.2011 18:34:36 org.apache.catalina.startup.Catalina start INFO: запуск сервера в 21332 мс 11.04.2011 18:49:02 org.apache.catalina.core.StandardWrapperValveвызовите SCHWERWIEGEND: Servlet.service () для сервлета [RDSDispatchServlet] в контексте с путем [/ myJavaServer] выбросило исключение java.lang.NullPointerException в org.dphibernate.utils. * HibernateUtil.actSession(Неизвестный источник) в org.dphibernate.filters.HibernateSessionServletFilter.getSessionFactory (Неизвестный источник) в org.dphibernate.filters.AbstractHibernateSessionServletFilter.doFilter (неизвестный источник) в org.apache.catalina.core.) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:240) в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValche.cat) org..authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:462) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:164) в org.apache.catalina.valves.ErrorReportValveinport (RevalValve.in).) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:395) в org.apache.coyote.orp11.http11процесс (Http11Processor.java:250) в org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:188) в org.apache.coyote.http11.Http11Protocol $ Httttp11protocol (Http11166)в org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:302) в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) в java.lang.Thread.run (Thread.java:662) * 10391040 * org.dphibernate.utils.HibernateUtil (фрагмент)
private static ISerializerFactory serializerFactory; // should be injected by Spring
public static SessionFactory getSessionFactory() throws HibernateException
{
return serializerFactory.getSessionFactory(); // but is null on this call?
}