Итак, что вы в основном хотите - это выполнить соединение между результатом запроса к базе данных и веб-сервисом.
Конечно, вам не нужно загружать всю БД в каком-либо бине, чтобы выполнить это «соединение», просто загрузите данные, которые вы хотели бы отобразить на экране, в вспомогательном бине, загрузите адреса для каждой строки и связывайте результат к датируемому.
Примерно так:
@ManagedBean
@ViewScoped
public class MyBean {
@EJB
private someDataService;
@EJB
private someWebService;
List<Person> persons;
Map<Long, String> addresses;
@PostConstruct
public void retrieveData() {
persons = someDataService.getByID(someID);
for (Person person : persons) {
addresses.put(person.getID(), someWebService.getByID(person.getID));
}
}
// getters here
}
И Facelet:
<h:dataTable value="#{myBean.persons}" var="person">
<h:column>
#{person.name}
</h:column>
<h:column>
#{person.lastName}
</h:column>
<h:column>
#{myBean.addresses[person.ID]}
</h:column>
</h:dataTable>
Есть несколько вариантов выбора. Вы также можете выполнить соединение внутри одного сервиса и вернуть ему некоторый тип, который включает адрес. Вы также можете сделать обертку или декоратор.
Было бы также более эффективно, если бы веб-служба могла обрабатывать список идентификаторов, а не требовать отдельного вызова для каждого извлекаемого адреса. Вы также можете захотеть заняться локальным кэшированием и т. Д., Но эти детали зависят от вас;)