Hi,

 

I would like Drools to save my POJO objects as Hibernate Entities so that I can see my POJO objects as db tables in my database.

 

These are my relevant files:

 

1.       ApplicationContext.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

       xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"

       xmlns:util="http://www.springframework.org/schema/util" xmlns:drools="http://drools.org/schema/drools-spring"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.1.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.1.xsd

http://www.springframework.org/schema/util

http://www.springframework.org/schema/util/spring-util-3.1.xsd

http://drools.org/schema/drools-spring

drools-spring.xsd

http://camel.apache.org/schema/spring

http://camel.apache.org/schema/spring/camel-spring.xsd">

 

       <bean id="dataSourceH2"

              class="org.springframework.jdbc.datasource.DriverManagerDataSource">

              <property name="driverClassName" value="org.h2.Driver" />

              <property name="url" value="jdbc:h2:tcp://localhost/~/hibernateExample" />

              <property name="username" value="sa" />

              <property name="password" value="" />

       </bean>

 

       <bean id="entityManagerFactory"

              class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

              <property name="dataSource" ref="dataSourceH2" />

              <property name="persistenceUnitName" value="stewardcareH2" />

              <!-- The persistenceXmlLocation needs to be set so that the application will

                   not incorrectly use the test version.  See:

                   http://stackoverflow.com/a/2949496 -->

       <property name="persistenceXmlLocation" value="META-INF/persistence.xml" />

       </bean>

 

       <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">

              <property name="entityManagerFactory" ref="entityManagerFactory" />

       </bean>

 

       <drools:grid-node id="CAREEngineNode" />

       <drools:kstore id="CAREKnowledgeStore" />

 

       <drools:kbase id="CAREEngineKBase" node="CAREEngineNode">

              <drools:configuration>

                     <drools:assert-behavior mode="EQUALITY" />

              </drools:configuration>

              <drools:resources>

                     <drools:resource type="DRL" source="classpath:lily.drl" />

                    

              </drools:resources>

       </drools:kbase>

 

</beans>

 

2. persistence.xml:

 

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"

xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd

http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">

 

       <persistence-unit name="stewardcareH2" transaction-type="JTA">

              <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <class>org.drools.persistence.info.SessionInfo</class>

        <class>org.jbpm.persistence.processinstance.ProcessInstanceInfo</class>

              <class>org.drools.persistence.info.WorkItemInfo</class>

              <class>com.mkyong.stock.Stock</class>

        <class>com.mkyong.stock.StockDailyRecord</class>

             

              <properties>

                     <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />

                     <property name="hibernate.max_fetch_depth" value="3" />

                     <property name="hibernate.hbm2ddl.auto" value="create" />

                     <property name="hibernate.show_sql" value="true" />

                     <property name="hibernate.connection.autocommit" value="true" />

                     <!-- <property name="hibernate.transaction.manager_lookup_class" value= "org.hibernate.transaction.BTMTransactionManagerLookup"/> -->

                     <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.BitronixJtaPlatform"/>

              </properties>

       </persistence-unit>

      

</persistence>

 

3. Rule file:

package com.mlyong.stock

 

//list any import classes here.

import com.mkyong.stock.Stock;

 

//declare any global variables here

 

rule "My First Rule"

 

    when

        $stock: Stock(stockCode == "123")//conditions

    then

        System.out.println("lily"); //actions

 

end

 

4. Java code:

 

public static void main(String[] args) throws Exception {

              System.out.println("Hibernate one to many (Annotation)");

       //     Session session = HibernateUtil.getSessionFactory().openSession();

 

       //     session.beginTransaction();

             

              context = new ClassPathXmlApplicationContext(APPLICATION_CONTEXT_XML);

      

       KnowledgeStoreService kstore = (KnowledgeStoreService) context.getBean("CAREKnowledgeStore");

       Environment env = KnowledgeBaseFactory.newEnvironment();

             

       env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, context.getBean("entityManagerFactory"));

  

       BitronixTransactionManager transactionManager= TransactionManagerServices.getTransactionManager();

        

        try {

              UserTransaction ut = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");

              ut.begin();

              //     transactionManager.begin();

                     env.set( EnvironmentName.TRANSACTION_MANAGER, transactionManager);

                  env.set(EnvironmentName.OBJECT_MARSHALLING_STRATEGIES, new ObjectMarshallingStrategy[]{

                              new JPAPlaceholderResolverStrategy(env),

                              new SerializablePlaceholderResolverStrategy

                              (ClassObjectMarshallingStrategyAcceptor.DEFAULT)});

 

      session = kstore.newStatefulKnowledgeSession((KnowledgeBase)context.getBean("CAREEngineKBase"), null, env);

 

              Stock stock = new Stock();

        stock.setStockCode("7052");

        stock.setStockName("Lily");

        session.insert(stock);

       

        StockDailyRecord stockDailyRecords = new StockDailyRecord();

        stockDailyRecords.setPriceOpen(new Float("1.2"));

        stockDailyRecords.setPriceClose(new Float("1.1"));

        stockDailyRecords.setPriceChange(new Float("10.0"));

        stockDailyRecords.setVolume(3000000L);

        stockDailyRecords.setDate(new Date());

       

        stockDailyRecords.setStock(stock);       

        stock.getStockDailyRecords().add(stockDailyRecords);

 

        session.insert(stockDailyRecords);

 

        ut.commit();

              System.out.println("Done");

             

         } catch (SecurityException | IllegalStateException | RollbackException

                           | HeuristicMixedException | HeuristicRollbackException e) {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

          } catch (SystemException e) {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

                    

              }

       }

}

 

I can create tables in db, but there is data saved in the tables. Does anyone know what I am missing here?

 

Thank you so much in advance,

 

 

Hong Lily Ju

Software Engineer

hong.ju@steward.org

Steward Heath Care

 

Description: cid:image001.png@01CD0DC1.C0D81BD0

 

Office: 781-375-3034

Cell: 781-801-9313