How to extend HibernateService
zsv May 10, 2011 7:32 AMHello!
I need to extend HibernateServiceImpl and add this as service.
I created interface:
public interface HibernateService extends org.exoplatform.services.database.HibernateService{ }
and class:
package ru.tersys.projects.asdu.repair.core.service.impl; import ru.tersys.projects.asdu.repair.core.service.HibernateService; import org.exoplatform.container.component.ComponentPlugin; import org.exoplatform.container.xml.InitParams; import org.exoplatform.services.cache.CacheService; public class HibernateServiceImpl extends org.exoplatform.services.database.impl.HibernateServiceImpl implements HibernateService { public HibernateServiceImpl(InitParams initParams, CacheService cacheService) { super(initParams, cacheService); } }
conf/portal/configuration.xml:
<?xml version="1.0" encoding="UTF-8"?> <configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.exoplaform.org/xml/ns/kernel_1_1.xsd http://www.exoplaform.org/xml/ns/kernel_1_1.xsd" xmlns="http://www.exoplaform.org/xml/ns/kernel_1_1.xsd"> <component> <key>ru.tersys.projects.asdu.repair.core.service.HibernateService</key> <type>ru.tersys.projects.asdu.repair.core.service.impl.HibernateServiceImpl</type> <init-params> <properties-param> <name>hibernate.properties</name> <description>My Hibernate Service</description> <property name="hibernate.show_sql" value="false"/> <property name="hibernate.current_session_context_class" value="thread"/> <property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.use_query_cache" value="true"/> <!--CHANGEME HashtableCacheProvider shold not be used in production env--> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> <property name="hibernate.connection.datasource" value="asduRWS${container.name.suffix}"/> <property name="hibernate.connection.autocommit" value="true"/> </properties-param> </init-params> </component> <external-component-plugins> <target-component>org.exoplatform.services.naming.InitialContextInitializer</target-component> <component-plugin> <name>bind.datasource</name> <set-method>addPlugin</set-method> <type>org.exoplatform.services.naming.BindReferencePlugin</type> <init-params> <value-param> <name>bind-name</name> <value>asduRWS${container.name.suffix}</value> </value-param> <value-param> <name>class-name</name> <value>javax.sql.DataSource</value> </value-param> <value-param> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </value-param> <properties-param> <name>ref-addresses</name> <description>ref-addresses</description> <property name="driverClassName" value="${portal.container.gatein.jcr.datasource.driver}"/> <property name="url" value="${portal.container.gatein.jcr.datasource.url}"/> <property name="username" value="${portal.container.gatein.jcr.datasource.username}"/> <property name="password" value="${portal.container.gatein.jcr.datasource.password}"/> </properties-param> </init-params> </component-plugin> </external-component-plugins> <external-component-plugins> <target-component>ru.tersys.projects.asdu.repair.core.service.HibernateService</target-component> <component-plugin> <name>add.hibernate.mapping</name> <set-method>addPlugin</set-method> <type>org.exoplatform.services.database.impl.AddHibernateMappingPlugin</type> <init-params> <values-param> <name>hibernate.annotations</name> <value>ru.tersys.projects.asdu.repair.planning.model.RepairRequest</value> <value>ru.tersys.projects.asdu.repair.planning.model.RepairRequestHistory</value> <value>ru.tersys.projects.asdu.repair.planning.model.dictionary.CpprStatus</value> <value>ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadErrorType</value> <value>ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadStatus</value> <value>ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadUchType</value> </values-param> </init-params> </component-plugin> </external-component-plugins> </configuration>
But when server starts there is no tables in database (if switch to "classic" HibernateService - all ok).
In logs I found following:
2011-05-10 15:17:29,775 DEBUG [exo.kernel.container.ExoContainer] ru.tersys.projects.asdu.repair.core.service.impl.HibernateServiceImpl {hibernate.properties={hibernate.show_sql=false, hibernate.current_session_context_class=thread, hibernate.cache.use_second_level_cache=true, hibernate.cache.use_query_cache=true, hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider, hibernate.connection.datasource=asduRWS, hibernate.connection.autocommit=true}} added to portal
2011-05-10 15:17:29,882 INFO [org.hibernate.dialect.Dialect] Using dialect: org.hibernate.dialect.Oracle10gDialect
2011-05-10 15:17:29,883 DEBUG [exo.kernel.container.ExoContainer] org.exoplatform.services.database.impl.AddHibernateMappingPlugin {hibernate.annotations=ru.tersys.projects.asdu.repair.planning.model.RepairRequest,ru.tersys.projects.asdu.repair.planning.model.RepairRequestHistory,ru.tersys.projects.asdu.repair.planning.model.dictionary.CpprStatus,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadErrorType,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadStatus,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadUchType} added to portal
2011-05-10 15:17:29,883 ERROR [exo.kernel.container.MX4JComponentAdapter] Failed to instanciate plugin add.hibernate.mappingfor component ru.tersys.projects.asdu.repair.core.service.impl.HibernateServiceImpl@1d416eb: null
java.lang.NullPointerException
at org.exoplatform.container.jmx.MX4JComponentAdapter.addComponentPlugin(MX4JComponentAdapter.java:148)
at org.exoplatform.container.jmx.MX4JComponentAdapter.getComponentInstance(MX4JComponentAdapter.java:106)
at org.exoplatform.container.management.ManageableComponentAdapter.getComponentInstance(ManageableComponentAdapter.java:68)
at org.exoplatform.container.ConcurrentPicoContainer.getInstance(ConcurrentPicoContainer.java:400)
at org.exoplatform.container.ConcurrentPicoContainer.getComponentInstancesOfType(ConcurrentPicoContainer.java:350)
at org.exoplatform.container.CachingContainer.getComponentInstancesOfType(CachingContainer.java:111)
at org.exoplatform.container.component.RequestLifeCycleStack.begin(RequestLifeCycleStack.java:66)
at org.exoplatform.container.component.RequestLifeCycle.begin(RequestLifeCycle.java:107)
at org.exoplatform.container.component.RequestLifeCycle.begin(RequestLifeCycle.java:141)
at org.exoplatform.portal.config.UserPortalConfigService.start(UserPortalConfigService.java:694)
at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.picocontainer.defaults.LifecycleVisitor.traverse(LifecycleVisitor.java:75)
at org.picocontainer.defaults.LifecycleVisitor.start(LifecycleVisitor.java:113)
at org.exoplatform.container.ConcurrentPicoContainer.start(ConcurrentPicoContainer.java:453)
at org.exoplatform.container.ExoContainer.start(ExoContainer.java:186)
at org.exoplatform.container.PortalContainer.start(PortalContainer.java:595)
at org.exoplatform.container.ExoContainer.start(ExoContainer.java:180)
at org.exoplatform.container.RootContainer.createPortalContainer(RootContainer.java:338)
2011-05-10 15:17:29,882 INFO [org.hibernate.dialect.Dialect] Using dialect: org.hibernate.dialect.Oracle10gDialect
2011-05-10 15:17:29,883 DEBUG [exo.kernel.container.ExoContainer] org.exoplatform.services.database.impl.AddHibernateMappingPlugin {hibernate.annotations=ru.tersys.projects.asdu.repair.planning.model.RepairRequest,ru.tersys.projects.asdu.repair.planning.model.RepairRequestHistory,ru.tersys.projects.asdu.repair.planning.model.dictionary.CpprStatus,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadErrorType,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadStatus,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadUchType} added to portal
2011-05-10 15:17:29,883 ERROR [exo.kernel.container.MX4JComponentAdapter] Failed to instanciate plugin add.hibernate.mappingfor component ru.tersys.projects.asdu.repair.core.service.impl.HibernateServiceImpl@1d416eb: null
java.lang.NullPointerException
at org.exoplatform.container.jmx.MX4JComponentAdapter.addComponentPlugin(MX4JComponentAdapter.java:148)
at org.exoplatform.container.jmx.MX4JComponentAdapter.getComponentInstance(MX4JComponentAdapter.java:106)
at org.exoplatform.container.management.ManageableComponentAdapter.getComponentInstance(ManageableComponentAdapter.java:68)
at org.exoplatform.container.ConcurrentPicoContainer.getInstance(ConcurrentPicoContainer.java:400)
at org.exoplatform.container.ConcurrentPicoContainer.getComponentInstancesOfType(ConcurrentPicoContainer.java:350)
at org.exoplatform.container.CachingContainer.getComponentInstancesOfType(CachingContainer.java:111)
at org.exoplatform.container.component.RequestLifeCycleStack.begin(RequestLifeCycleStack.java:66)
at org.exoplatform.container.component.RequestLifeCycle.begin(RequestLifeCycle.java:107)
at org.exoplatform.container.component.RequestLifeCycle.begin(RequestLifeCycle.java:141)
at org.exoplatform.portal.config.UserPortalConfigService.start(UserPortalConfigService.java:694)
at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.picocontainer.defaults.LifecycleVisitor.traverse(LifecycleVisitor.java:75)
at org.picocontainer.defaults.LifecycleVisitor.start(LifecycleVisitor.java:113)
at org.exoplatform.container.ConcurrentPicoContainer.start(ConcurrentPicoContainer.java:453)
at org.exoplatform.container.ExoContainer.start(ExoContainer.java:186)
at org.exoplatform.container.PortalContainer.start(PortalContainer.java:595)
at org.exoplatform.container.ExoContainer.start(ExoContainer.java:180)
at org.exoplatform.container.RootContainer.createPortalContainer(RootContainer.java:338)
2011-05-10 15:17:29,775 DEBUG [exo.kernel.container.ExoContainer] ru.tersys.projects.asdu.repair.core.service.impl.HibernateServiceImpl {hibernate.properties={hibernate.show_sql=false, hibernate.current_session_context_class=thread, hibernate.cache.use_second_level_cache=true, hibernate.cache.use_query_cache=true, hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider, hibernate.connection.datasource=asduRWS, hibernate.connection.autocommit=true}} added to portal 2011-05-10 15:17:29,882 INFO [org.hibernate.dialect.Dialect] Using dialect: org.hibernate.dialect.Oracle10gDialect 2011-05-10 15:17:29,883 DEBUG [exo.kernel.container.ExoContainer] org.exoplatform.services.database.impl.AddHibernateMappingPlugin {hibernate.annotations=ru.tersys.projects.asdu.repair.planning.model.RepairRequest,ru.tersys.projects.asdu.repair.planning.model.RepairRequestHistory,ru.tersys.projects.asdu.repair.planning.model.dictionary.CpprStatus,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadErrorType,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadStatus,ru.tersys.projects.asdu.repair.planning.model.dictionary.PlanLoadUchType} added to portal 2011-05-10 15:17:29,883 ERROR [exo.kernel.container.MX4JComponentAdapter] Failed to instanciate plugin add.hibernate.mappingfor component ru.tersys.projects.asdu.repair.core.service.impl.HibernateServiceImpl@1d416eb: null java.lang.NullPointerException at org.exoplatform.container.jmx.MX4JComponentAdapter.addComponentPlugin(MX4JComponentAdapter.java:148) at org.exoplatform.container.jmx.MX4JComponentAdapter.getComponentInstance(MX4JComponentAdapter.java:106) at org.exoplatform.container.management.ManageableComponentAdapter.getComponentInstance(ManageableComponentAdapter.java:68) at org.exoplatform.container.ConcurrentPicoContainer.getInstance(ConcurrentPicoContainer.java:400) at org.exoplatform.container.ConcurrentPicoContainer.getComponentInstancesOfType(ConcurrentPicoContainer.java:350) at org.exoplatform.container.CachingContainer.getComponentInstancesOfType(CachingContainer.java:111) at org.exoplatform.container.component.RequestLifeCycleStack.begin(RequestLifeCycleStack.java:66) at org.exoplatform.container.component.RequestLifeCycle.begin(RequestLifeCycle.java:107) at org.exoplatform.container.component.RequestLifeCycle.begin(RequestLifeCycle.java:141) at org.exoplatform.portal.config.UserPortalConfigService.start(UserPortalConfigService.java:694) at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.picocontainer.defaults.LifecycleVisitor.traverse(LifecycleVisitor.java:75) at org.picocontainer.defaults.LifecycleVisitor.start(LifecycleVisitor.java:113) at org.exoplatform.container.ConcurrentPicoContainer.start(ConcurrentPicoContainer.java:453) at org.exoplatform.container.ExoContainer.start(ExoContainer.java:186) at org.exoplatform.container.PortalContainer.start(PortalContainer.java:595) at org.exoplatform.container.ExoContainer.start(ExoContainer.java:180) at org.exoplatform.container.RootContainer.createPortalContainer(RootContainer.java:338)
Please help!