Nick Kasvosve 10 years ago
parent
commit
541b380bd5

+ 23 - 0
frameworks/Java/beyondj/beyondj-data/src/main/java/com/techempower/beyondj/ApplicationContextProvider.java

@@ -0,0 +1,23 @@
+package com.techempower.beyondj;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+/**
+ * 
+ * @author nickk
+ * 
+ */
+public class ApplicationContextProvider implements ApplicationContextAware {
+
+	private static ApplicationContext applicationContext = null;
+
+	public static ApplicationContext getApplicationContext() {
+		return applicationContext;
+	}
+
+	public void setApplicationContext(ApplicationContext _applicationContext) throws BeansException {
+		applicationContext = _applicationContext;
+	}
+}

+ 19 - 0
frameworks/Java/beyondj/beyondj-data/src/main/java/com/techempower/beyondj/domain/beyondj.hbm.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="com.techempower.beyondj.domain">
+    <class name="com.techempower.beyondj.domain.Fortune" table="Fortune">
+        <id name="id" column="id">
+            <generator class="native"/>
+        </id>
+        <property name="message" column="message" />
+    </class>
+    <class name="com.techempower.beyondj.domain.World" table="World">
+        <id name="id" column="id">
+            <generator class="native"/>
+        </id>
+        <property name="randomNumber" column="randomNumber" />
+    </class>
+</hibernate-mapping>

+ 2 - 13
frameworks/Java/beyondj/beyondj-data/src/main/java/com/techempower/beyondj/repository/FortuneRepository.java

@@ -1,18 +1,7 @@
 package com.techempower.beyondj.repository;
 
 import com.techempower.beyondj.domain.Fortune;
-import com.techempower.beyondj.domain.World;
-
-import java.util.List;
-
-public interface FortuneRepository {
-
-    Fortune findOne(Integer id);
-
-    long count();
-
-    void save(Fortune var1);
-
-    List<Fortune> findAll();
+import org.springframework.data.repository.CrudRepository;
 
+public interface FortuneRepository extends CrudRepository<Fortune, Integer> {
 }

+ 2 - 14
frameworks/Java/beyondj/beyondj-data/src/main/java/com/techempower/beyondj/repository/WorldRepository.java

@@ -1,19 +1,7 @@
 package com.techempower.beyondj.repository;
 
 import com.techempower.beyondj.domain.World;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-public interface WorldRepository {
-
-    World findOne(Integer id);
-
-    long count();
-
-    @Transactional
-    void save(World var1);
-
-    List<World> findAll();
+import org.springframework.data.repository.CrudRepository;
 
+public interface WorldRepository extends CrudRepository<World, Integer>{
 }

+ 4 - 6
frameworks/Java/beyondj/beyondj-data/src/main/java/com/techempower/beyondj/repository/WorldRepositoryImpl.java

@@ -1,8 +1,6 @@
 package com.techempower.beyondj.repository;
 
 import com.techempower.beyondj.domain.World;
-import org.hibernate.criterion.Projections;
-import org.hibernate.criterion.Restrictions;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.persistence.EntityManager;
@@ -11,17 +9,17 @@ import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
 import java.util.List;
 
-public class WorldRepositoryImpl implements WorldRepository {
+public class WorldRepositoryImpl { //implements WorldRepository {
 
     @PersistenceContext
     private EntityManager entityManager;
 
-    @Override
+    //@Override
     public World findOne(Integer id) {
         return entityManager.find(World.class, id);
     }
 
-    @Override
+    //@Override
     public long count() {
         CriteriaBuilder qb = entityManager.getCriteriaBuilder();
         CriteriaQuery<Long> cq = qb.createQuery(Long.class);
@@ -33,7 +31,7 @@ public class WorldRepositoryImpl implements WorldRepository {
         return entityManager.createQuery("Select t from " + World.class.getSimpleName() + " t").getResultList();
     }
 
-    @Override
+    //@Override
     @Transactional
     public void save(World obj) {
         entityManager.merge(obj);

+ 15 - 3
frameworks/Java/beyondj/beyondj-service/src/main/java/com/techempower/beyondj/action/FortuneActionBean.java

@@ -1,9 +1,13 @@
 package com.techempower.beyondj.action;
 
+import com.techempower.beyondj.ApplicationContextProvider;
 import com.techempower.beyondj.domain.Fortune;
 import com.techempower.beyondj.repository.FortuneRepository;
+import com.techempower.beyondj.repository.WorldRepository;
 import net.sourceforge.stripes.action.*;
 import net.sourceforge.stripes.integration.spring.SpringBean;
+import net.sourceforge.stripes.validation.ValidationMethod;
+import net.sourceforge.stripes.validation.ValidationState;
 
 import java.util.*;
 
@@ -15,7 +19,7 @@ public class FortuneActionBean extends BaseActionBean {
     @DefaultHandler
     @HandlesEvent(FORTUNES)
     public Resolution fortunes() {
-         Iterable<Fortune> it = this.fortuneRepository.findAll();
+        Iterable<Fortune> it = this.fortuneRepository.findAll();
         fortunes = new ArrayList<>();
         Iterator<Fortune> iterator = it.iterator();
         while (iterator.hasNext()) {
@@ -23,7 +27,7 @@ public class FortuneActionBean extends BaseActionBean {
         }
         fortunes.add(new Fortune(0, "Additional fortune added at request time."));
         Collections.sort(fortunes);
-        Map<String,String> headers = new HashMap<>();
+        Map<String, String> headers = new HashMap<>();
         headers.put(TRANSFER_ENCODING, Boolean.TRUE.toString());
         setResponseHeaders(headers);
         return new ForwardResolution(JSP);
@@ -33,11 +37,19 @@ public class FortuneActionBean extends BaseActionBean {
         return fortunes;
     }
 
-    @SpringBean
+    @ValidationMethod(when = ValidationState.ALWAYS)
+    public void validateRepository() {
+        fortuneRepository = (FortuneRepository) applicationContextProvider.getApplicationContext().getBean(FORTUNE_REPOSITORY);
+    }
+
     private FortuneRepository fortuneRepository;
 
+    @SpringBean
+    private ApplicationContextProvider applicationContextProvider;
+
     public static final String FORTUNES = "fortunes";
     public static final String JSP = "/WEB-INF/templates/fortunes.jsp";
     public static final String TRANSFER_ENCODING = "Transfer-Encoding";
+    public static final String FORTUNE_REPOSITORY = "fortuneRepository";
 }
 

+ 31 - 13
frameworks/Java/beyondj/beyondj-service/src/main/java/com/techempower/beyondj/action/WorldDatabaseActionBean.java

@@ -2,6 +2,7 @@ package com.techempower.beyondj.action;
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+import com.techempower.beyondj.ApplicationContextProvider;
 import com.techempower.beyondj.Common;
 import com.techempower.beyondj.domain.World;
 import com.techempower.beyondj.repository.WorldRepository;
@@ -12,6 +13,8 @@ import net.sourceforge.stripes.action.Resolution;
 import net.sourceforge.stripes.action.UrlBinding;
 import net.sourceforge.stripes.integration.spring.SpringBean;
 import net.sourceforge.stripes.validation.Validate;
+import net.sourceforge.stripes.validation.ValidationMethod;
+import net.sourceforge.stripes.validation.ValidationState;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.stripesrest.JsonResolution;
@@ -31,8 +34,9 @@ public class WorldDatabaseActionBean extends BaseActionBean {
     @HandlesEvent(DB)
     @DefaultHandler
     public Resolution queryOne() {
+
         final Random random = ThreadLocalRandom.current();
-        World world = worldRepository.findOne(random.nextInt(DB_ROWS) + 1);
+        World world = worldRepositoryImpl.findOne(random.nextInt(DB_ROWS) + 1);
         Gson gson = new GsonBuilder()
                 .enableComplexMapKeySerialization()
                 .serializeNulls()
@@ -43,15 +47,15 @@ public class WorldDatabaseActionBean extends BaseActionBean {
 
         String rawJsonText = gson.toJson(world);
 
-        Map<String,String> headers = new HashMap<>();
+        Map<String, String> headers = new HashMap<>();
         headers.put(CONTENT_LENGTH, String.valueOf(rawJsonText.getBytes().length));
-         setResponseHeaders(headers);
+        setResponseHeaders(headers);
         return new JsonResolution(rawJsonText);
     }
 
     @HandlesEvent(QUERIES)
     @Transactional
-    public Resolution queries() throws Exception{
+    public Resolution queries() throws Exception {
         int value = boundQueryCount();
         List<Future<World>> wfs = new ArrayList<>(value);
         for (int i = 0; i < value; i++) {
@@ -60,7 +64,7 @@ public class WorldDatabaseActionBean extends BaseActionBean {
                             new Callable<World>() {
                                 @Override
                                 public World call() throws Exception {
-                                    return (World) worldRepository.findOne(
+                                    return (World) worldRepositoryImpl.findOne(
                                             ThreadLocalRandom.current().nextInt(DB_ROWS) + 1);
                                 }
                             }));
@@ -76,9 +80,9 @@ public class WorldDatabaseActionBean extends BaseActionBean {
                 .create();
 
         String rawJsonText = gson.toJson(worlds);
-        Map<String,String> headers = new HashMap<>();
+        Map<String, String> headers = new HashMap<>();
         headers.put(CONTENT_LENGTH, String.valueOf(rawJsonText.getBytes().length));
-         setResponseHeaders(headers);
+        setResponseHeaders(headers);
         return new JsonResolution(rawJsonText);
     }
 
@@ -105,7 +109,7 @@ public class WorldDatabaseActionBean extends BaseActionBean {
                         @Transactional(propagation = Propagation.REQUIRES_NEW)
                         public World call() throws Exception {
                             Random random = ThreadLocalRandom.current();
-                            World world = (World) worldRepository.findOne(random.nextInt(DB_ROWS) + 1);
+                            World world = (World) worldRepositoryImpl.findOne(random.nextInt(DB_ROWS) + 1);
                             world.setRandomNumber(random.nextInt(DB_ROWS) + 1);
                             worldRepositoryImpl.save(world);
                             return world;
@@ -123,9 +127,9 @@ public class WorldDatabaseActionBean extends BaseActionBean {
                 .create();
 
         String rawJsonText = gson.toJson(worlds);
-        Map<String,String> headers = new HashMap<>();
+        Map<String, String> headers = new HashMap<>();
         headers.put(CONTENT_LENGTH, String.valueOf(rawJsonText.getBytes().length));
-         setResponseHeaders(headers);
+        setResponseHeaders(headers);
         return new JsonResolution(rawJsonText);
     }
 
@@ -159,19 +163,33 @@ public class WorldDatabaseActionBean extends BaseActionBean {
         return queriesValue;
     }
 
+    @ValidationMethod(when = ValidationState.ALWAYS)
+    public void validateRepository() {
+
+        String[] beanNames = applicationContextProvider.getApplicationContext().getBeanDefinitionNames();
+
+        for (String beanName : beanNames) {
+
+            System.out.println(beanName + " : " + applicationContextProvider.getApplicationContext().getBean(beanName).getClass().toString());
+        }
+       // worldRepository = (WorldRepository) applicationContextProvider.getApplicationContext().getBean(WORLD_REPOSITORY);
+    }
 
     private static final int DB_ROWS = 10000;
 
-    @SpringBean
-    private WorldRepository worldRepository;
+    //private WorldRepository worldRepository;
 
     @SpringBean
     private WorldRepositoryImpl worldRepositoryImpl;
 
+    @SpringBean
+    private ApplicationContextProvider applicationContextProvider;
+
     private static final String DB = "db";
-    public static final String NEW = "new";
     private static final String QUERIES = "queries";
     private static final String UPDATES = "updates";
     public static final String CONTENT_LENGTH = "Content-Length";
+    public static final String WORLD_REPOSITORY = "worldRepositoryImpl";
+
 }
 

+ 13 - 7
frameworks/Java/beyondj/beyondj-service/src/main/resources/beyondj-service-jpa-spring-config.xml

@@ -33,12 +33,6 @@
     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
     <aop:aspectj-autoproxy proxy-target-class="true" expose-proxy="true"/>
 
-    <bean id="sessionFactory"
-          class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
-        <property name="dataSource" ref="dataSource"/>
-        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
-    </bean>
-
     <bean id="configProperties"
           class="org.springframework.beans.factory.config.PropertiesFactoryBean">
         <property name="ignoreResourceNotFound" value="true"/>
@@ -61,13 +55,23 @@
         <property name="databasePlatform" value="${system.jdbc.dialect}"/>
     </bean>
 
-    <bean id="entityManagerFactory"
+    <bean id="entityManagerFactory" name="beyondjEntityManagerFactory"
           class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
         <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
         <property name="persistenceUnitName" value="beyondj_persistence_unit"/>
         <property name="dataSource" ref="dataSource"/>
         <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
         <property name="jpaDialect" ref="jpaDialect"/>
+        <property name="packagesToScan" value="com.techempower.beyondj.domain,com.techempower.beyondj.repository"/>
+        <!--<property name="persistenceUnitPostProcessors">
+            <list>
+                <bean
+                        class="org.springframework.data.jpa.support.ClasspathScanningPersistenceUnitPostProcessor">
+                    <constructor-arg name="basePackage" value="org.xxxxxx.server.beans" />
+                    <property name="mappingFileNamePattern" value="**/*hbm.xml" />
+                </bean>
+            </list>
+        </property>-->
     </bean>
 
     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
@@ -82,6 +86,8 @@
         <property name="password" value="${system.jdbc.password}"/>
     </bean>
 
+    <bean id="applicationContextProvider" class="com.techempower.beyondj.ApplicationContextProvider"/>
+
     <bean  id="worldRepositoryImpl" class="com.techempower.beyondj.repository.WorldRepositoryImpl"/>
 
 </beans>