2016-09-16 4 views
0

Я пытался расширить объект Customer в своем приложении на основе DemoSite 5.0.1-GA. Я расширил оригинальный интерфейс клиента и класс CustomerImpl. Затем добавили мой класс CustomerImpl в persistence-core.xml и applicationContext-entity.xml в основной проект, переопределив компонент bean с идентификатором «org.broadleafcommerce.profile.core.domain.Customer».Как расширить клиентскую организацию Broadleaf Commerce?

Я мог бы успешно расширить объект заказа этими шагами. Но для объекта Customer я обнаружил, что всегда получаю экземпляр org.broadleafcommerce.profile.core.domain.CustomerImpl, будь то в относительных объектах, таких как Order или непосредственно получить «org.broadleafcommerce.profile.core.domain.Customer «bean из контекста Spring, но не экземпляр моего расширенного класса, как ожидалось.

Вот мой ApplicationContext-entity.xml, я опустил атрибуты <beans> элемента:

<?xml version="1.0" encoding="UTF-8"?> 
<beans> 
    <bean id="org.broadleafcommerce.core.order.domain.Order" class="com.ddklife.core.ecommerce.domain.OrderImpl" scope="prototype"/> 
    <bean id="com.ddklife.core.autovending.domain.MachineChannel" class="com.ddklife.core.autovending.domain.MachineChannelImpl" scope="prototype"/> 
    <bean id="com.ddklife.core.autovending.domain.OrderChannelXref" class="com.ddklife.core.autovending.domain.OrderChannelXrefImpl" scope="prototype"/> 
    <bean id="org.broadleafcommerce.profile.core.domain.Customer" class="com.ddklife.core.customer.domain.CustomerImpl" scope="prototype"/> 
</beans> 

А вот мой расширенный класс CustomerImpl, я опустил все геттеры/сеттеры методы:

package com.ddklife.core.customer.domain; 

@Entity(name = "DdlCustomer") 
@Inheritance(strategy = InheritanceType.JOINED) 
@Table(name = "DDL_CUSTOMER") 
@NamedQueries({ 
    @NamedQuery(name="DD_READ_CUSTOMER_BY_WECHATOPENID", query="from DdlCustomer c where weChatOpenId = :weChatOpenId") 
}) 
public class CustomerImpl extends org.broadleafcommerce.profile.core.domain.CustomerImpl implements Customer { 

    private static final long serialVersionUID = 1L; 

    @Column(name = "DDLIFE_POINTS") 
    protected Long ddlifePoints; 

    @Column(name = "WECHAT_OPEN_ID") 
    protected String weChatOpenId; 

} 

И вот мой расширенный класс OrderImpl, который может быть правильно загружен из относительных объектов или с использованием метода весеннего контекста getBean:

package com.ddklife.core.ecommerce.domain; 

@Entity(name = "DdlOrder") 
@Inheritance(strategy = InheritanceType.JOINED) 
@Table(name = "DDL_ORDER") 
public class OrderImpl extends org.broadleafcommerce.core.order.domain.OrderImpl implements Order { 

    private static final long serialVersionUID = 1L; 

    @Column(name = "STORE_TYPE") 
    protected String storeType; 

    @Column(name = "STORE_ID") 
    protected Long storeId; 

    @Column(name = "PAYMENT_QRCODE_URL") 
    protected String paymentQrcodeUrl; 

    @OneToMany(fetch = FetchType.LAZY, targetEntity = OrderChannelXrefImpl.class, mappedBy = "order", orphanRemoval = true, 
      cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) 
    protected List<OrderChannelXref> allChannelXrefs = new ArrayList<OrderChannelXref>(); 

} 

ответ

0

Можете ли вы опубликовать всю свою заявкуContext-entity.xml? Он должен выглядеть следующим образом:

<bean id="org.broadleafcommerce.profile.core.domain.Customer" class="com.mycompany.core.MyCustomer" scope="prototype" /> 

вещи, которые можно было бы происходит:

  1. Вы получили активные сеансы, которые уже имели Broadleaf CustomerImpl хранится там до переопределения; попробуйте очистить все ваши файлы cookie и повторить попытку
  2. Вы не выполнили установку основного проекта mvn до восстановления файла войны «site». Когда вы идете построить проект сайта, вам нужно убедиться, что основной проект также включен. Вы можете сделать это с помощью этой команды Maven из корня:

    МВН -pl сайт -am чистой установки

Это будет гарантировать, что модуль «сайт» и его зависимости (например, ядро) перестраиваются

+0

Привет phillipuniverse, я отправил мой ApplicationContext-entity.xml ирасширенный класс CustomerImpl в моем исходном вопросе. Мне интересно, почему я мог успешно расширить OrderImpl так же, но не удалось в CustomerImpl. Спасибо за вашу помощь! – Lunastone

+0

Можете ли вы установить контрольную точку в CustomerDaoImpl.create() и посмотреть, что произойдет, когда вы перейдете на сайт в режиме инкогнито или после очистки ваших файлов cookie? Вы должны увидеть, что там создается новый клиент. Является ли это еще одним клиентом Broadlaf CustomerImpl или вашей версией CustomerImpl? – phillipuniverse

0

Вам нужно добавить новый объект в: /core/src/main/resources/META-INF/persistence-core.xml

<persistence-unit name="blPU" transaction-type="RESOURCE_LOCAL"> 
    ... 
    <class>com.mycompany.order.domain.MyOrderImpl</class> 
    ... 
</persistence-unit>