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

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

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

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

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

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



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

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

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

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


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

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

по этим предложениям мы создавали классы и т.д.
вот только не совсем понятно зачем столько слои...
...
Рейтинг: 0 / 0
Архитектура приложения уровня предприятия
    #39176454
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар,
у тебя сабж слишком общий - "как строятся большие корабли средства передвижения"
...
Рейтинг: 0 / 0
Архитектура приложения уровня предприятия
    #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
Архитектура приложения уровня предприятия
    #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
Архитектура приложения уровня предприятия
    #39176579
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффар1) Сессионные бины и бизнес логика не одна и тоже? и чем они отличаются ?
Очень грубо говоря состоянием.
Сессионные бины обязательно сохраняют состояние сессии.
Бины бизнес логики очень желательно, чтобы были без состояния (stateless)
Т.е. в сессионных бинах мы храним данные, а в бинах бизнес логики их обрабатываем.
...
Рейтинг: 0 / 0
Архитектура приложения уровня предприятия
    #39176588
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulОчень грубо говоря состоянием.
Сессионные бины обязательно сохраняют состояние сессии.
Бины бизнес логики очень желательно, чтобы были без состояния (stateless)
Т.е. в сессионных бинах мы храним данные, а в бинах бизнес логики их обрабатываем.

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

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

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

реализацию/интерфейс можете показать ? (:
...
Рейтинг: 0 / 0
Архитектура приложения уровня предприятия
    #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
Архитектура приложения уровня предприятия
    #39176665
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарведь у нас у бизнеса осталась аннотация Stateless , т.е. я могу просто убрать?

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


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

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

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

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

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

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

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

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

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

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

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

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


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