powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Переделать код
12 сообщений из 12, страница 1 из 1
Переделать код
    #39901064
fallen2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создал чат, он полностью работает, подключается к бд. Проблема в том что чат реализован с помощью этих двух бинов, нужно от них избавиться, реализовать без них. Можете помочь сделать без этих двух бинов

Spring Configurator
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Configuration
@SpringComponent
@ApplicationScope
public class SpringConfigurator {
    @Bean
    UnicastProcessor<Message> publisher(){
        return  UnicastProcessor.create();
    }

    @Bean
    Flux<Message> messages(UnicastProcessor<Message> publisher) {
        return publisher.replay(0).autoConnect();
    }
}


Я использую эти два бина в этом классе

Код: 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.
@StyleSheet("frontend://styles/styles.css")
@Route
@PWA(name = "Vaadin Chat", shortName = "Vaadin Chat")
@Push
public class MainView extends VerticalLayout {
  private final UnicastProcessor<Message> publisher;
  private final Flux<Message> messages;
  private String username;

  private final RestService restService;



   @Autowired
      public MainView(UnicastProcessor<Message> publisher,
                      Flux<Message> messages,
                      RestService restService) {
        this.publisher = publisher;
        this.messages = messages; 
    addClassName("main-view");
    setSizeFull();
    setDefaultHorizontalComponentAlignment(Alignment.CENTER);

    H1 header = new H1("Vaadin Chat");
    header.getElement().getThemeList().add("dark");

    add(header);

    askUsername();
    this.restService = restService;
  }

  private void askUsername() {
    HorizontalLayout layout = new HorizontalLayout();
    TextField usernameField = new TextField();
    Button startButton = new Button("Start chat");

    layout.add(usernameField, startButton);

    startButton.addClickListener(click -> {
      username = usernameField.getValue();
      remove(layout);
      showChat();
    });

    add(layout);
  }

  private void showChat() {
    MessageList messageList = new MessageList();


    add(messageList, createInputLayout());
    expand(messageList);

    List<Message> lasts = restService.getLast();
    for (Message message : lasts)
      messageList.add(new Paragraph(message.getFrom() + ": " + message.getMessage()));

    messages.subscribe(message -> {
      getUI().ifPresent(ui ->
              ui.access(() ->
                      messageList.add(
                              new Paragraph(message.getFrom() + ": " +
                                      message.getMessage())
                      )
              ));
    });
  }

  private Component createInputLayout() {
    HorizontalLayout layout = new HorizontalLayout();
    layout.setWidth("100%");

    TextField messageField = new TextField();
    messageField.addKeyDownListener(Key.ENTER, keyDownEvent -> sender(messageField));
    Button sendButton = new Button("Send");
    sendButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);

    layout.add(messageField, sendButton);
    layout.expand(messageField);

    sendButton.addClickListener(click -> sender(messageField));
    messageField.focus();

    return layout;
  }

  private void sender(TextField textField) {
    Message message = new Message(username, textField.getValue());
    publisher.onNext(message);
    restService.saveMessage(message);
    textField.clear();
    textField.focus();
  }
}



Другие файлы проекта

MessageServiceImpl
Код: 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.
@Service
@Transactional
public class MessageServiceImpl implements MessageService {
    private final MessageRepository repository;
    private final PageRequest lastRequest;

    @Autowired
    public MessageServiceImpl(MessageRepository repository) {
        this.repository = repository;
        lastRequest = new PageRequest(0, 10, Sort.Direction.DESC, "id");
    }

    @Override
    public void add(Message message) {
        message.setTime(new Timestamp(new Date().getTime()));
        repository.saveAndFlush(message);
    }

    @Override
    public List<Message> getAllMessages() {
        return repository.findAll();
    }

    @Override
    public List<Message> getLast() {
        List<Message> result = repository.findAll(lastRequest).getContent();

        return result.stream()
                .sorted(Comparator.comparingLong(Message::getId))
                .collect(Collectors.toList());
    }
}


RestService
Код: 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.
@Service
public class RestService {
    private final RestTemplate restTemplate;

    public RestService(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder.build();
    }

    public void saveMessage(Message message) {
        String url = "http://localhost:8080/api/save";

        this.restTemplate.put(url, new Gson().toJson(message));
    }

    public List<Message> getLast() {
        String url = "http://localhost:8080/api/last";

        String json = restTemplate.getForObject(url, String.class);
        return new Gson().fromJson(json, new TypeToken<List<Message>>(){}.getType());
    }
}
MessageService

public interface MessageService {
    void add(Message message);

    List<Message> getAllMessages();
    List<Message> getLast();
}


MessageList

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class MessageList extends Div {

  public MessageList() {
    addClassName("message-list");
  }

  @Override
  public void add(Component... components) {
    super.add(components);

    components[components.length-1]
        .getElement()
        .callFunction("scrollIntoView");
  }


}
...
Рейтинг: 0 / 0
Переделать код
    #39901101
Фотография SQL2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fallen2019
нужно от них избавиться
зачем?
...
Рейтинг: 0 / 0
Переделать код
    #39901102
fallen2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL2008,

Я через них сделал(два бина те что в коде) все хорошо работает. Но почему то сказали, что лучше будет без них попробывать сделать, избавится от них, написать чтобы не использовать эти два бина
...
Рейтинг: 0 / 0
Переделать код
    #39901118
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fallen2019, сообществу наверное не сложно выкосить эти два бина.

Но было-бы интересно и познавательно услышать сначала мотивацию к этому дейсвтию.
Иначе получается что вы пришли такой в форум и говорите - дескыть я хочу "птичьего молока".

Понимаете, да?
...
Рейтинг: 0 / 0
Переделать код
    #39901133
fallen2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Понимаю, просто я хочу попросить помощи как можно реализовать, идеи вообще нет.
...
Рейтинг: 0 / 0
Переделать код
    #39901138
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fallen2019
mayton,

Понимаю, просто я хочу попросить помощи как можно реализовать, идеи вообще нет.
бин это класс. А классы это ООП.
Вы хотите без классов, ооп, в процедурном стиле. Так?
...
Рейтинг: 0 / 0
Переделать код
    #39901140
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fallen2019,
Или просто без спринга, десктоп. Тогда можно на классах но без бинов.
...
Рейтинг: 0 / 0
Переделать код
    #39901141
fallen2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

Сказали без бинов создать классы можно, главное чтобы он смог заменить работу этих двух бинов
...
Рейтинг: 0 / 0
Переделать код
    #39901147
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fallen2019
PetroNotC Sharp,

Сказали без бинов создать классы можно, главное чтобы он смог заменить работу этих двух бинов

Вырежи везде @Bean и делай.
...
Рейтинг: 0 / 0
Переделать код
    #39901159
fallen2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

Я уточнил сказали, что типа надо создать таймер. Эти два бина заменить таймером, допустим каждую минуты чтобы он присылал все непрочитанные сообщения из сервера.
...
Рейтинг: 0 / 0
Переделать код
    #39901179
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fallen2019,
Пиши new Timer()
Или в ветку работа.
...
Рейтинг: 0 / 0
Переделать код
    #39901301
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Способен-ли Spring-ориентированный программист программировать на Java?

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


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