代码之家  ›  专栏  ›  技术社区  ›  Marquee

Broadleaf社区-启动BLC作为战争爆发演示站点管理文件上载[重复]

  •  0
  • Marquee  · 技术社区  · 7 年前

    我正在运行一个基于社区版的Broadleaf Commerce演示站点(hot sauce)的应用程序。

    broadleaf 和 spring 文档

    我有几个相关的问题:

    1. 当从jar转换到war时,是否需要额外的配置或注意事项来初始化/访问JPA(通过Hibernate)资源,而不是在上面的spring文档中指定的配置或注意事项?
    2. 通过maven goal跑步有什么区别 mvn spring-boot:run (成功)vs运行 java -jar <war-file> (失败)?
    3. 与我看到的关于JPA标准路径的错误(复制如下)相关,我发现 SO post

    潜在相关信息:

    • 我已经确认DB正在通过其他客户端进行响应。

    2018-11-08 17:46:22.578  INFO 17053 --- [nio-8443-exec-7] o.h.cache.internal.StandardQueryCache    : HHH000248: Starting query cache at region: query.Order
    
    2018-11-08 17:46:22.820 ERROR 17053 --- [nio-8443-exec-7] .BroadleafSimpleMappingExceptionResolver : Error caught and handled.:05d420e6-69fc-4098-b085-2f8393a9ad7f
    
    org.springframework.dao.InvalidDataAccessApiUsageException: Unable to resolve attribute [archiveStatus] against path; nested exception is java.lang.IllegalArgumentException: Unable to resolve attribute [archiveStatus] against path
        at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:384) ~[spring-orm-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
        at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:246) ~[spring-orm-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
        ...
    Caused by: java.lang.IllegalArgumentException: Unable to resolve attribute [archiveStatus] against path
        at org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:120) ~[hibernate-entitymanager-4.1.11.Final.jar!/:4.1.11.Final]
        at org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:229) ~[hibernate-entitymanager-4.1.11.Final.jar!/:4.1.11.Final]
        at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:200) ~[hibernate-entitymanager-4.1.11.Final.jar!/:4.1.11.Final]
        at org.broadleafcommerce.core.search.dao.SearchFacetDaoImpl.readAllSearchFacets(SearchFacetDaoImpl.java:65) ~[broadleaf-framework-5.2.6-GA.jar!/:na]
        at org.broadleafcommerce.core.search.dao.SearchFacetDaoImpl$$FastClassBySpringCGLIB$$7573d5b3.invoke(<generated>) ~[broadleaf-framework-5.2.6-GA.jar!/:na]
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:736) ~[spring-aop-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.3.18.RELEASE.jar!/:4.3.18.RELEASE]
        ... 150 common frames omitted
    

      @SpringBootApplication
      @EnableAutoConfiguration
      public class SiteApplication extends SpringBootServletInitializer {
    
        @Configuration
        @EnableBroadleafSiteAutoConfiguration
        public static class BroadleafFrameworkConfiguration {}
    
          @Override
          protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(SiteApplication.class);
          }
    
          public static void main(String[] args) {
            SpringApplication.run(SiteApplication.class, args);
          }
      }
    

    pom.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <parent>
        <groupId>org.broadleafcommerce</groupId>
        <artifactId>broadleaf-boot-starter-parent</artifactId>
        <version>5.2.6-GA</version>
      </parent>
    
      <artifactId>our-site</artifactId>
      <packaging>war</packaging>
      ... 
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <scope>provided</scope>
        </dependency>
        ...
      </dependencies>
      ...
    </project>
    

    存档状态类(根据错误消息)

    @Embeddable
    public class ArchiveStatus implements Serializable, SandBoxNonProductionSkip {
    
        @Column(name = "ARCHIVED")
        @AdminPresentation(friendlyName = "archived", visibility = VisibilityEnum.HIDDEN_ALL, group = "ArchiveStatus")
        protected Character archived = 'N';
    
        public Character getArchived() {
            return archived;
        }
    
        public void setArchived(Character archived) {
            this.archived = archived;
        }
    }
    

    产品类别(嵌入存档状态)

    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    @javax.persistence.Table(name = "BLC_PRODUCT")
    //multi-column indexes don't appear to get exported correctly when declared at the field level, so declaring here as a workaround
    @org.hibernate.annotations.Table(appliesTo = "BLC_PRODUCT", indexes = {
            @Index(name = "PRODUCT_URL_INDEX",
                    columnNames = {"URL", "URL_KEY"}
            )
    })
    @Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "blProducts")
    ... (BLC-specific overrides ommitted) ...
    public class ProductImpl implements Product, ProductAdminPresentation, Status, AdminMainEntity, Locatable, TemplatePathContainer {
        ...
        @Embedded
        protected ArchiveStatus archiveStatus = new ArchiveStatus();
        ...
    }
    

        public List<SearchFacet> readAllSearchFacets(FieldEntity entityType) {
            CriteriaBuilder builder = em.getCriteriaBuilder();
            CriteriaQuery<SearchFacet> criteria = builder.createQuery(SearchFacet.class);
    
            Root<SearchFacetImpl> facet = criteria.from(SearchFacetImpl.class);
    
            criteria.select(facet);
    
            Path<Character> archived = facet.get("archiveStatus").get("archived");
    
            criteria.where(
                    builder.equal(facet.get("showOnSearch").as(Boolean.class), true),
                    builder.or(builder.isNull(archived.as(String.class)),
                               builder.notEqual(archived.as(Character.class), 'Y')),
                    facet.join("fieldType")
                            .join("indexField")
                            .join("field")
                            .get("entityType")
                            .as(String.class)
                            .in(entityType.getAllLookupTypes())
            );
    
            TypedQuery<SearchFacet> query = em.createQuery(criteria);
            query.setHint(QueryHints.HINT_CACHEABLE, true);
            query.setHint(QueryHints.HINT_CACHE_REGION, "query.Search");
    
            return query.getResultList();
        }
    
    0 回复  |  直到 7 年前
        1
  •  1
  •   Jaumzera    7 年前

    我在编译的JAR文件中运行DemoSite时发现了相同的错误。

    https://github.com/BroadleafCommerce/DemoSite/issues/51

    就我而言,我必须包括 spring-instrument -javaagent 论据:

    $ java -Xmx1024m -javaagent:./path/to/spring-instrument.jar -jar site.jar