Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Архитектура приложения уровня предприятия / 25 сообщений из 37, страница 1 из 2
19.02.2016, 15:19
    #39175364
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Здравствуйте, всем!
подскажите пожалуйста, какая должна быть архитектура?

некоторые предлагали такой вариант:
Entities - Facades/Session Beans - Bussiness Logic - Precedents - etc

и отсюда вопросы возникли:
1) Сессионные бины и бизнес логика не одна и тоже? и чем они отличаются ?
2) что дают Прецеденты? типа определяют права доступа ?

да вопрос тривиальный, но все же...

заранее спасибо!
...
Рейтинг: 0 / 0
19.02.2016, 15:31
    #39175382
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффар,

Вопрос тривиальный? Одна только Patterns of Enterprise Application Architecture - 557 страниц.
Или вот ещё тривиальная картинка из другого тривиального издания.



А вы хотите чтобы вам тут вкратце на форуме расписали?
...
Рейтинг: 0 / 0
19.02.2016, 15:48
    #39175403
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффар1) Сессионные бины и бизнес логика не одна и тоже? и чем они отличаются ?

Сессионные бины это классы, которые соответствуют EJB спеке и обслуживается JEE контейнером соответствующим образом.
Бизнес-логика это реализация логики самого приложения. Сессионные бины по-хорошему являются фасадом к логике, потому что к той же самой логике могут обращаться и другие фасады, которые не EJB.

Музаффар2) что дают Прецеденты? типа определяют права доступа ?

Не знаю что именно в вашем случае под этим подразумевается. Обычно это Use Cases. Просто сценарии использования ПО.
...
Рейтинг: 0 / 0
19.02.2016, 15:49
    #39175406
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Blazkowicz,
когда говорил про тривиальность я имел ввиду
автор1) Сессионные бины и бизнес логика не одна и тоже? и чем они отличаются ?
2) что дают Прецеденты? типа определяют права доступа?


а за картинку отдельное спасибо.
...
Рейтинг: 0 / 0
19.02.2016, 21:16
    #39175646
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффар,
Ты бы ссылку про контекст дал. Т.к непонятно почему смешано все в одну кучу.
...
Рейтинг: 0 / 0
21.02.2016, 12:42
    #39176379
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Petro123Ты бы ссылку про контекст дал.
прошу прошение, но Вы про какой ссылке говорите?
или речь о классах?
Petro123Т.к непонятно почему смешано все в одну кучу.
этого я тоже хочу понять :)
...
Рейтинг: 0 / 0
21.02.2016, 15:10
    #39176411
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффарнекоторые предлагали
про этих ссылка
...
Рейтинг: 0 / 0
21.02.2016, 15:15
    #39176414
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Petro123Музаффарнекоторые предлагали
про этих ссылка

таких ссылок сам не нашел, сказав "некоторые" имел ввиду сотрудников...

по этим предложениям мы создавали классы и т.д.
вот только не совсем понятно зачем столько слои...
...
Рейтинг: 0 / 0
21.02.2016, 17:00
    #39176454
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффар,
у тебя сабж слишком общий - "как строятся большие корабли средства передвижения"
...
Рейтинг: 0 / 0
21.02.2016, 17:54
    #39176476
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Petro123Музаффар,
у тебя сабж слишком общий - "как строятся большие корабли средства передвижения"
да я этого понимаю, но все же...
вот что у меня получился пока что:
Entity
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
package entity;

import java.io.Serializable;

import java.sql.Timestamp;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;

@Entity
@NamedQueries({
  @NamedQuery(name = "Document.findAll", query = "select o from Document o")
})
public class Document implements Serializable {
   @Id 
    private Long id;
    private String docName;    
    private int docNumb;    
    private Timestamp docCreateDate;    
    private String formName;
    public Document() {
    }

    @Override
    public String toString() {
        StringBuffer buffer = new StringBuffer();
        buffer.append(getClass().getName()+"@"+Integer.toHexString(hashCode()));
        buffer.append('[');
        buffer.append(']');
        return buffer.toString();
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setDocName(String docName) {
        this.docName = docName;
    }

    public String getDocName() {
        return docName;
    }

    public void setDocNumb(int docNumb) {
        this.docNumb = docNumb;
    }

    public int getDocNumb() {
        return docNumb;
    }

    public void setDocCreateDate(Timestamp docCreateDate) {
        this.docCreateDate = docCreateDate;
    }

    public Timestamp getDocCreateDate() {
        return docCreateDate;
    }

    public void setFormName(String formName) {
        this.formName = formName;
    }

    public String getFormName() {
        return formName;
    }
}


и др.
----------------------------

Facade
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package facade;

import entity.Document;
import entity.Person;
import facade.AbstractFacade;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author User
 */
@Stateless
public class DocumentFacade extends AbstractFacade<Document> implements DocumentFacadeLocal {

  
    @Override
    public void createDocument(Document entity) throws MySequenceException {
        entity.setId(next(Document.class.getName()));
        super.create(entity); //To change body of generated methods, choose Tools | Templates.
    }
    @PersistenceContext(unitName = "AppEE-ejbPU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public DocumentFacade() {
        super(Document.class);
    }

    @Override
    public void create(Person person) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}


естественно имеется другие фасады с локальными интерфейсами
-------------------------

Business
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package business;


import entity.Document;
import entity.Enterprise;
import entity.Park;
import entity.PathStatus;
import entity.Peregon;
import entity.PerevozDoc;
import entity.Person;
import entity.SortStation;
import entity.StateItem;
import entity.StateList;
import entity.Station;
import entity.TGNL;
import entity.TGNLItem;
import entity.VagPasport;
import facade.DocumentFacadeLocal;
import facade.EnterpriseFacadeLocal;
import facade.MySequenceException;
import facade.ParkFacadeLocal;
import facade.PathStatusFacadeLocal;
import facade.PeregonFacadeLocal;
import facade.PerevozDocFacadeLocal;
import facade.PersonFacadeLocal;
import facade.SortStationFacadeLocal;
import facade.StateItemFacadeLocal;
import facade.StateListFacadeLocal;
import facade.StationFacadeLocal;
import facade.TGNLFacadeLocal;
import facade.TGNLItemFacadeLocal;
import facade.VagPasportFacadeLocal;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author User
 */
@Stateless
public class FullControl implements FullControlLocal {

    
    @EJB
    private PersonFacadeLocal personFacade;

    @EJB
    private EnterpriseFacadeLocal enterpriseFacade;

    @EJB
    private DocumentFacadeLocal documentFacade;
  
//...............

    public FullControl() {
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

        
    @Override
    public void create(Document document) {
        documentFacade.create(document);
    }

    @Override
    public void edit(Document document) {
        documentFacade.edit(document);
    }

    @Override
    public void remove(Document document) {
        documentFacade.remove(document);
    }

    @Override
    public Document findDocument(Object id) {
        return documentFacade.find(id);
    }

    @Override
    public List<Document> findAllDocument() {
        return documentFacade.findAll();
    }

    @Override
    public List<Document> findRangeDocument(int[] range) {
        return documentFacade.findRange(range);
    }

    @Override
    public int countDocument() {
        return documentFacade.count();
    }

    //Enterprise
    @Override
    public void create(Enterprise enterprise) {
        enterpriseFacade.create(enterprise);
    }

    @Override
    public void edit(Enterprise enterprise) {
        enterpriseFacade.edit(enterprise);
    }

    @Override
    public void remove(Enterprise enterprise) {
        enterpriseFacade.remove(enterprise);
    }

    @Override
    public Enterprise findEnterprise(Object id) {
        return enterpriseFacade.find(id);
    }

    @Override
    public List<Enterprise> findAllEnterprise() {
        return enterpriseFacade.findAll();
    }

    @Override
    public List<Enterprise> findRangeEnterprise(int[] range) {
        return enterpriseFacade.findRange(range);
    }

    @Override
    public int countEnterprise() {
        return enterpriseFacade.count();
    }

    
    //Person
    @Override
    public void create(Person person) {
        personFacade.create(person);
    }

    @Override
    public void edit(Person person) {
        personFacade.edit(person);
    }

    @Override
    public void remove(Person person) {
        personFacade.remove(person);
    }

    @Override
    public Person findPerson(Object id) {
        return personFacade.find(id);
    }

    @Override
    public List<Person> findAllPerson() {
        return personFacade.findAll();
    }
    

    @Override
    public List<Person> findRangePerson(int[] range) {
        return personFacade.findRange(range);
    }

    @Override
    public int countPerson() {
        return personFacade.count();
    }
//.......
}


и имеется соответствующие интерфейсы
----------------------------

Precedent
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package precendent;

import business.StationControlLocal;
import entity.PathStatus;
import entity.Station;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author RasulovMS.VCIKT
 */
@Stateless
public class Dispetcher implements DispetcherRemote {

    @EJB
    private StationControlLocal stationControl;

  
    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    public List<Station> findAll() {
        return stationControl.findAll();
    }

    public List<PathStatus> getInParkPath() {
        return stationControl.getInParkPath();
    }
//.....
}



вот пока что у нас так получается, хотя делаем но не совсем понятно...
если можно прошу вкратце объяснить...
...
Рейтинг: 0 / 0
21.02.2016, 18:50
    #39176491
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
off
Музаффаресли можно прошу вкратце объяснить...
по EJB я пас.
Без него основа БЛ делается так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void processTrade(TradeData trade) throws Exception 
{
   try 
   {
      // сперва проверяем и вставляем сделку
      TraderData trader =          service.getTrader(trade.getTraderID());
      validateTraderEntitlements(trade, trader);
      verifyTraderLimits(trade, trader);
      performPreTradeCompliance(trade, trader);
      service.insertTrade(trade);

      // теперь изменяем счет
      AcctData acct = service.getAcct(trade.getAcctId());
      verifyFundsAvailability(acct, trade);
      adjustBalance(acct, trade);
      service.updateAcct(trade);

      // последующая обработка
      performPostTradeCompliance(trade, trader);
   } 
   catch (Exception up) 
   {
      ctx.setRollbackOnly();
      throw up;
   }
}
...
Рейтинг: 0 / 0
22.02.2016, 07:24
    #39176579
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффар1) Сессионные бины и бизнес логика не одна и тоже? и чем они отличаются ?
Очень грубо говоря состоянием.
Сессионные бины обязательно сохраняют состояние сессии.
Бины бизнес логики очень желательно, чтобы были без состояния (stateless)
Т.е. в сессионных бинах мы храним данные, а в бинах бизнес логики их обрабатываем.
...
Рейтинг: 0 / 0
22.02.2016, 08:44
    #39176588
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
mad_nazgulОчень грубо говоря состоянием.
Сессионные бины обязательно сохраняют состояние сессии.
Бины бизнес логики очень желательно, чтобы были без состояния (stateless)
Т.е. в сессионных бинах мы храним данные, а в бинах бизнес логики их обрабатываем.

ведь у нас у бизнеса осталась аннотация Stateless , т.е. я могу просто убрать?

нельзя хранить и обрабатывать в одном (т.е. объеденить два слоя СессБин и БизЛогику)?

З.Ы. а для чего Прцеденты ?
...
Рейтинг: 0 / 0
22.02.2016, 11:44
    #39176645
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
МузаффарЗ.Ы. а для чего Прцеденты ?Музаффар
Код: java
1.
2.
@EJB
private StationControlLocal stationControl;

реализацию/интерфейс можете показать ? (:
...
Рейтинг: 0 / 0
22.02.2016, 12:25
    #39176660
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
UsmanМузаффарЗ.Ы. а для чего Прцеденты ?Музаффар
Код: java
1.
2.
@EJB
private StationControlLocal stationControl;

реализацию/интерфейс можете показать ? (:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
package business;

import entity.Park;
import entity.PathStatus;
import entity.Station;
import java.util.List;

/**
 *
 * @author RasulovMS.VCIKT
 */
public  interface StationControlLocal {

    public List<Station> findAll();

    public List<PathStatus> getInParkPath();

    public List<Station> findRange(int[] range);

    public Park getOutPark();

    public void setOutPark(Park outPark);

    public Park getInPark();

    public void setInPark(Park inPark);

    public String getKod();

    public void setKod(String kod);

    public List<PathStatus> getOutParkPath();

    public void setStation(Station station);

    public Station getStation();

    public Station getStation(Long id);
    
}



просто человек приходит раз в неделю... а иногда вообще не приходит
по этому такие вопросы...
...
Рейтинг: 0 / 0
22.02.2016, 12:35
    #39176665
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффарведь у нас у бизнеса осталась аннотация Stateless , т.е. я могу просто убрать?

нельзя хранить и обрабатывать в одном (т.е. объеденить два слоя СессБин и БизЛогику)?


В общем случае этого лучше не делать.
Т.к. сессионый бин создается на каждую сессию.
А стейтлесс по необходимости.
Если в БЛ-бине есть обращение к БД, то будет весело.
Память или пул-соединений к БД могут неожиданно закончиться.

МузаффарЗ.Ы. а для чего Прцеденты ?

Фиг его знает.
У меня фильтр на маркетинговый бред.
Скорее всего еще один не нужный уровень абстракции.
Но я могу быть и не правым. ;-)
...
Рейтинг: 0 / 0
22.02.2016, 13:06
    #39176675
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Как верно сказали, главное не накосячить с состоянием. Тестируй время жизни. Это работа программиста. Преценденты, ВИ, USE CASE выбрось из кода. Это методология проектирования.
...
Рейтинг: 0 / 0
22.02.2016, 13:31
    #39176685
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
походу Прецеденты дает возможность определить что может тот или иной пользователь системы...
просто я раньше так не разделял, по этому такая путаница получается...

а вот если сюда добавлять MDB то будет ващще ништяк :) (с ним тоже не работал, но нинешнем проекте походу придется работать...)

и соответственно вопрос каком промежутке делжен находится этот MDB?
...
Рейтинг: 0 / 0
22.02.2016, 15:26
    #39176751
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Может не стоит поднимать топики с такими неподъёмными темами? Как их модерировать?

Это об устройстве вселенной получается...
...
Рейтинг: 0 / 0
22.02.2016, 15:35
    #39176755
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффари соответственно вопрос каком промежутке делжен находится этот MDB?

Сбоку?!
<:o)
...
Рейтинг: 0 / 0
22.02.2016, 17:54
    #39176823
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Предлагаю, если топик продолжать то больше кода и меньше слов.
Удачи аффтару!
...
Рейтинг: 0 / 0
22.02.2016, 18:56
    #39176846
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Petro123,

с Вами соглашусь, вот только мы ждем того человека который предлагал такую структуру...
по мере написания кода буду обращаться тут, чтоб лучше вникать...
...
Рейтинг: 0 / 0
22.02.2016, 23:54
    #39176959
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Музаффар,
ok
Пока imho не вижу бизнес логики. Одни сеттеры и геттеры. Как будто у вас предметка подсчёт товара на полках.
...
Рейтинг: 0 / 0
23.02.2016, 11:05
    #39177027
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
МузаффарPetro123,

с Вами соглашусь, вот только мы ждем того человека который предлагал такую структуру...
по мере написания кода буду обращаться тут, чтоб лучше вникать...

Забейте.
Если он не смог вам объяснить что и зачем нужно.
То вы сделаете фигню по данной архитектуре.

Архитектурные абстракции должны быть понятны в первую очередь вам.
Т.е. вы должны понимать как и что сделать по картинке.

В противном случае, получится не поддерживаемая, тормозная и глючная фигня.
...
Рейтинг: 0 / 0
23.02.2016, 19:51
    #39177216
breath
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архитектура приложения уровня предприятия
Код: java
1.
public class DocumentFacade extends AbstractFacade<Document>


так
Код: java
1.
public class DocumentDB extends AbstractDB<Document>


и перемещается EntityManager в абстракт

это
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Stateless
public class FullControl implements FullControlLocal {
    @EJB
    private PersonFacadeLocal personFacade;

    @EJB
    private EnterpriseFacadeLocal enterpriseFacade;

    @EJB
    private DocumentFacadeLocal documentFacade;


так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Stateless
public class FullControlFacade {
    @EJB
    private PersonDB personFacade;

    @EJB
    private EnterpriseDB enterpriseFacade;

    @EJB
    private DocumentDB documentFacade;



похоже на фасад
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Архитектура приложения уровня предприятия / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]