私は、UIなしで、カートへの追加、数量の更新、注文などの基本的なショッピングカート操作を実行できるかどうかを確認するための概念実証として、BroadleafCommerceを単純なJUnit単体テストで実行しようとしています。
Broadleafをバックエンドとして使用して完全に異なるUIを使用できるかどうかを確認するためのアイデア。
これまでのところ、これを機能させるのは少し大変でした(Springコンテキストを起動して実行するためだけに)。Gradleを使用してプロジェクトをビルドしています。構成は次のようになります。
テストクラス:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
"MyTest.xml",
})
public class BltMainTest {
@Test
public void test() {
System.out.println("THIS IS A TEST");
}
}
MyTest.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
">
<import resource="classpath:bl-framework-applicationContext-persistence.xml"/>
<import resource="classpath:bl-framework-applicationContext-entity.xml"/>
<import resource="classpath:bl-framework-applicationContext-workflow.xml"/>
<import resource="classpath:bl-framework-applicationContext.xml"/>
<import resource="classpath:bl-profile-applicationContext.xml"/>
<import resource="classpath:bl-profile-applicationContext-entity.xml"/>
<import resource="classpath:bl-profile-applicationContext-persistence.xml"/>
</beans>
build.gradleの抜粋(ehcacheをMaven Centralに対して機能させるには、少しハックする必要がありましたが、理由は完全にはわかりません):
...
dependencies {
...
compile 'net.sf.ehcache:ehcache-core:2.6.0'
compile('org.broadleafcommerce:broadleaf-framework:1.6.1-GA') {
exclude module: 'ehcache-terracotta'
exclude module: 'ehcache'
}
compile('org.broadleafcommerce:broadleaf-profile:1.6.1-GA') {
exclude module: 'ehcache-terracotta'
exclude module: 'ehcache'
}
...
}
私が取得するスタックトレースはかなり長いですが、一番下の(そして私が関連すると思う)部分はこれです:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'blEntityManagerFactorySecureInfo' defined in class path resource [bl-framework-applicationContext-persistence.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1455)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.orm.jpa.EntityManagerFactoryUtils.findEntityManagerFactory(EntityManagerFactoryUtils.java:99)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findNamedEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:511)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:493)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:657)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:630)
at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:150)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:339)
... 55 more
Caused by: java.lang.NullPointerException
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:527)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:268)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 69 more
クラスを見ると、指定されていない永続性ユニットがあるようですが、それを修正するためにどこを見ればよいかわかりません。
その上、config.xmlファイルのSpringインポート行の順序を変更するとエラーが変わります。
おそらく私はこれに間違った方法でアプローチしていますが、デフォルトのBroadleaf Spring XMLを正しい順序で含めることで、これを機能させることができるはずだと思います-しかし、私はそれらのいくつかを試しましたが、サイコロはありません(いくつか同じエラー、いくつかの異なる、すべて悪い)。
これを機能させる方法について何かアイデアはありますか?