2016-11-17 7 views
1

Я использую Eclipse Neon и Maven для разработки. Есть два основных проекта. Проект 1 содержит все веб-службы, включая SOAP и RESTful. В нем также реализованы все обращения к базе данных. Проект 2 содержит пользовательский интерфейс, который является угловой реализацией. Угловой интерфейс использует сервисы RESTful для проекта 1 для доступа к данным. Приложение упаковано в файл EAR, содержащий файлы WAR из двух проектов. (Это НЕ мой дизайн !!!)EAR-файл с несколькими файлами WAR. Классы общего доступа

В приложении пользовательского интерфейса есть несколько классов сервлета, которые обрабатывают вопросы авторизации. До сих пор классы в каждом файле WAR были полностью независимыми. Теперь мне нужно получить доступ к данным из таблиц базы данных из одного из классов сервлета. Поскольку эта возможность уже находится в Project 1, я должен просто использовать классы в Project 2.

В Eclipse У меня есть оба проекта в моей рабочей области и добавили Project 1 в путь сборки Project 2, поэтому я могу добавить правильные объекты, необходимые для проекта 2. Однако, когда я пытаюсь построить Project 2, он не может найти классы из Project 1. Я попытался добавить Project 1 в список экспорта Project 2, но это не имело никакого значения.

Я могу предоставить файлы pom, необходимые.

Я просто не знаю, что попробовать.

+1

Если Project 2 имеет зависимости от Project 1, вам нужно будет [редактировать файлы pom] (http://stackoverflow.com/questions/22438304/intermodule-dependencies-in-maven), чтобы добавить эту зависимость. Если вам нужна помощь в этом, я предлагаю вам предоставить файлы pom с избыточным контентом. (Тем не менее, для Project 2 будет сложно иметь зависимость от времени компиляции проекта, в котором размещены веб-сервисы: к веб-сервису должен быть доступен доступ к его услугам, а не к его внутренним классам.) – DavidS

+0

Я был сильно ограничен моим архитектуры приложения. Поэтому мне пришлось отказаться от того, что я пытался сделать, и использовать службы RESTful и вызовы сервлета из Angular. Я очень оценил интерес и вклад. Я хотел бы высказать некоторые отзывы относительно некоторых ответов. Иногда многие из нас работают на компании, у которых есть архитекторы и аналитики, которые решают, как все будет работать над этим проектом. Разработчики не могут прийти и внести изменения, потому что считают, что это будет работать лучше. Мы должны внести изменения в рамки этой архитектуры. – OldGuy

+0

Что еще более затруднительно в моем случае - я не могу изменить какие-либо конфигурации проекта в Eclipse.Все должно быть сделано в конфигурации Maven. Это делает его во много раз сложнее. Если это невозможно было сделать из Maven, это было запрещено. – OldGuy

ответ

0

Один из способов обмена этими функциями доступа к БД в обоих приложениях просто заключался бы в упаковке их как общих библиотек в вашем EAR.

См this maven documentation

Только одно замечание, ИМО это не очень хорошая картина, чтобы иметь несколько приложений Получение доступа/модификации той же модели данных. См. this answer по вопросу «Несколько приложений, использующих одну базу данных?» для деталей.

Возможно, вам стоит подумать о том, чтобы сохранить логику доступа к этой модели данных в существующей первой войне (в которой есть службы REST и SOAP) и сделать ваш второй сервер приложений новым сервисом из вашего первого приложения, например?

Другим вариантом было бы упаковать все эти webapps в один (так что одна война), предоставляя как пользовательский интерфейс, так и бэкэнд (ваши сервлеты и API вместе).

Редактировать: Я не могу судить об этом дизайне приложения, поскольку я не мог взглянуть на него. Как было указано в @David. Как правило, это не плохой шаблон для нескольких веб-приложений с разными целями, упакованных как EAR или нет, даже если эти API созданы для разных типов клиентов (UI, backend и т. Д.).

+0

Я полностью согласен с вами. Однако это всего лишь одно приложение. Тот, кто поставил проект вместе, решил построить его с двумя проектами, результатом которых было два военных файла, которые помещаются в один файл уха. Я полностью согласен, что это фубар с дизайном. И я, и те, кто в проекте на данный момент, не могут это изменить. Поэтому мы должны обойти это. Если бы я мог понять, как сообщить Maven о включении классов из проекта служб в сборку военного файла UI, моя проблема будет решена. – OldGuy

+0

Вам не нужно изменять способ развертывания вашего приложения с помощью первого решения (общие библиотеки EAR). Тем не менее, мне любопытно, что мешает вам и вашей команде немного изменить дизайн этого приложения? (Кстати, я не могу судить о его дизайне, поскольку я не мог его взглянуть;)) –

+3

Вы жалуетесь на дизайн, @OldGuy, но мне интересно, какая часть его вам точно не нравится. ** Похоже, кто бы ни разработал это, на самом деле следовал хорошему принципу дизайна **: ваш код пользовательского интерфейса взаимодействует с бизнес-логикой через интерфейс: веб-службы. Во всяком случае, похоже, что вы планируете _breaking_ эту хорошую инкапсуляцию, обойдя веб-службы, чтобы напрямую получить доступ к коду базы данных. Я думаю, что Rémi прав, чтобы предложить вам добавить новую службу REST/SOAP для сервлетов, но, как он также говорит, мы не можем судить о дизайне на таком расстоянии. – DavidS

Смежные вопросы