Это определенно возможно, с различными уровнями сложности и возможностей в зависимости от того, что именно вы хотите, и ограничений, вы размещаете на нем.
Возможно, это один из простейших способов обойти это, если у вас нет проблемы с тем, что метод в App2 является общедоступным, - это просто создать веб-сервис, предоставляющий этот метод и вызов, если из App1.
Если вы хотите, чтобы метод App2 был по существу «защищен», так что он может быть вызван App1, но не публичными клиентами, тогда есть несколько альтернативных вариантов. Во-первых, вы можете использовать брандмауэры или эквивалент для предотвращения внешних запросов к URL-адресу службы. В качестве альтернативы вы можете выставить метод через некоторую форму межпроцессного взаимодействия; RMI будет очевидным для Java (настройте RMI-метод в App2 и экспортируйте его через диспетчер, затем получите ссылку в App1 и вызовите метод удаленно). В зависимости от того, что именно вы хотите сделать, вам может быть лучше с каркасом, который делает все это под обложками; например распределенные объекты через что-то вроде Terracotta.
Вы должны указать более подробно в своем вопросе, хотя в настоящее время единственное, что вы действительно указали, это то, что вы хотите назвать «функцию» в App2 из App1. Есть десятки (если не сотни) способов сделать это, и лучшие (ые) будут зависеть от деталей того, что вы пытаетесь сделать.
EDIT (в свете комментариев): Это не детали того, что вы хотите сделать, которые не хватает - я понимаю прекрасно, что вы хотите вызвать некоторый метод в App2 изнутри App1. Это больше архитектурные детали - на каких языках оба клиента закодированы, какие библиотеки вы используете для выполнения веб-сервисов, являются ли клиенты на одном и том же компьютере или отдельными (и если та же машина, одна и та же JVM или нет), есть ли какие-либо проблемы с брандмауэром, которые могут препятствовать определенным видам подключения, существуют ли какие-либо офисно-политические ограничения, которые могут препятствовать вашим опциям, существуют ли какие-либо ограничения безопасности, которые могли бы сделать то же самое (например, публиковать или не публиковать функциональность метода App2). Все это сформирует то, что возможно и что оптимально, потому что в конце дня все сети в основном Я хочу использовать ресурсы на , что удаленный компьютер от здесь.Без каких-либо архитектурных особенностей существует буквально множество способов, которыми вы могли бы это достичь.
Относительно экспозиции: вы должны создать веб-службу, чтобы выставлять функцию App2 так же, как вы создавали бы любую другую веб-службу (при этом детали зависят от используемого инструмента/фрейма). В качестве примера, если вы используете инструмент, который поддерживает аннотации JSR-181, вы должны написать метод в App2, который выполняет эту функцию, и аннотировать его с помощью @WebMethod
. Затем вы убедитесь, что если этот метод не является частью существующего класса webservice, вы должны аннотировать его класс с помощью @WebService
. Я предполагал, что, поскольку у вас уже есть несколько веб-сервисов, вы бы знали, как их писать и определять.
Что касается доступа к веб-сервису из App1, это можно сделать просто с помощью Java SOAP-клиента. Инструмент, такой как WSDL2Java, может создать класс-заглушку, моделирующий удаленный сервис, который вы можете вызвать; В качестве альтернативы вы можете получить более богатый интерфейс с чем-то вроде CXF.
Какая библиотека WS вы используете в настоящее время и какие ошибки вы столкнулись при попытке использовать ее для выполнения этого взаимодействия?
Одинаковый или отличный сервер? Тот же или другой контекст? Измените свой вопрос соответствующим образом. – BalusC