Подтвердить что ты не робот

Серьезные, прерывистые ошибки с помощью CF Web Service

У нас невероятно сложная ситуация с API-интерфейсом CF Web Services, который мы написали и поддерживаем. У нас был API на протяжении многих лет, который был стабильным и успешно работал с клиентами Ruby, PHP и ColdFusion. Затем в этом году появился клиент .NET, и мы обнаружили, что наш веб-сервис не совместим со статически типизированными языками из-за нашего широкого использования структур.

В конце концов мы поняли, что нам пришлось перезаписать API без структур, и мы это сделали. Теперь он использует масштабируемые значения, массивы и CFC (которые переходят в SOAP complexTypes). Клиент .NET счастлив, и мы написали клиентов с концептуальной концепцией примерно на 6 разных языках, чтобы гарантировать, что на этот раз мы будем интероперабельными.

К нашему большому разочарованию, похоже, что наши серверы ColdFusion 7 не могут надежно обслуживать новый API. Он работает примерно через день после перезапуска, затем клиенты начинают получать ошибки, например:

Ошибка: coldfusion.xml.rpc.CFCInvocationException [java.lang.ClassNotFoundException: tafkan.remote_api.pfapi.v.trunk.rsp_pf_survey_status_array]

и

java.lang.NoClassDefFoundError: tafkan/remote_api/pfapi/v/trunk/pf_unit

Перезапуск экземпляров CF - единственный способ устранить проблему. Много времени и денег было внесено в перестройку API, так что все действительно на самом деле об этом.

Мы заметили, что каталоги WEB-INF/cfc-skeletons наших экземпляров CF в конечном итоге, похоже, имеют две копии классов для каждого из CFC, используемых API. Например:

-rw-r--r--  Feb 17 09:15 remote_api.pfapi.v.trunk.pf_datum.class
-rw-r--r--  Feb  3 12:20 tafkan.remote_api.pfapi.v.trunk.pf_datum.class

Похоже, что ошибки исходят из проблемы с пробелом пространства имен или класса, поэтому мы попытались переключить все ссылки на CFC на полноту (точечная нотация, начинающаяся с сопоставления), а не просто ссылки на CFC в текущем каталоге, Это казалось многообещающим, но проблема вернулась в течение 24 часов.

Окружающая среда:

  • ColdFusion 7,0,2,142559 с hf702-70523, кластер из двух экземпляров
  • Sun Java 1.4.2_13
  • Apache 2.0.52
  • Centos 4.5 32-bit

Может быть, обновление одной из этих почтенных частей программного обеспечения поможет? Может быть, обновление только AXIS?

Поддержка Adobe, похоже, не является опцией, так как CF7 является EOL'ed и расширенной поддержкой (и это только на несколько дней).

Update:

Спасибо всем, кто присоединился к этой дискуссии! Здесь обновляется информация о том, где сейчас находятся вещи.

Служба только что вышла сегодня впервые. Один из экземпляров кластера все еще мог генерировать WSDL, в то время как другой экземпляр сказал:

AXIS error
Sorry, something seems to have gone wrong... here are the details:
Exception - java.lang.NoClassDefFoundError: tafkan/remote_api/pfapi/v/trunk/rsp_pf_numeric_array

Оба каталога cfc-skeletons содержат файл tafkan.remote_api.pfapi.v.trunk.rsp_pf_numeric_array.class и не содержат других файлов, которые мы иногда видели (remote_api.pfapi.v.trunk.rsp_pf_numeric_array.class). Файлы в cfc-skeletons, похоже, не были изменены с тех пор, как серверы были запущены вчера.

Время безотказной работы в обоих случаях составляло около 21,5 часов. Я работал без JIT (-Xint).

Я перезапустил оба экземпляра. Теперь они работают на Sun Java 1.4.2_19 (вместо _13), а JIT снова включен, так как он явно не вызывал этой ошибки, и без него все было значительно медленнее. Я также очистил флажки "сохранить файлы классов".

И теперь мы снова подождем...

Обновление 2 Проблема сохраняется. Я не уверен, что еще попробовать в этот момент. Arg!

FYI, это перекрестно размещено на http://www.houseoffusion.com/groups/cf-talk/thread.cfm/threadid:60922

4b9b3361

Ответ 1

Я прочитал эту ветку и поток CFTalk. Мои первые мысли об обходных методах, по-видимому, уже были предложены Марк Крюгером и Дейвом Уоттсом. Единственная другая обходная идея, которую я имел, заключалась в том, чтобы уловить ошибку и обновить заглушку webservice, используя методы Service Factory. (В CF8-9 для этого есть API-интерфейс администратора, не уверен в CF7).

Исследуя ошибку, я сузил возможные совпадения с ними:

http://www.houseoffusion.com/groups/cf-talk/message.cfm/messageid:144821 Это был матч, но нерешенный

http://blog.coldfusionpowered.com/?p=28 Это была очень похожая ошибка, устраненная "устранением проблем" на всех CFC и вызовах.

Ошибка бизнес-компонента ColdFusion Google Adwords Решено путем перезаписи кода и удаления cfcomments (я подозреваю, что другие факторы действительно отвечали за его решение здесь)

http://forums.crystaltech.com/index.php?topic=22364.0 Мы все ближе. Разрешение ошибочно принимало два корня документа

http://qaix.com/coldfusion/313-410-web-service-on-cfmx-6-1-jrun-suddenly-not-working-read.shtml Точное совпадение для сообщения об ошибке. Точное совпадение для сопоставления CFC с корнем doc. Разрешение должно было иметь только 1 отображение, указывающее на docroot, только "/" . Это может быть решением. В MX 6/6.1 и, возможно, 7, было указано сопоставление по умолчанию для "/" , указывающее на docroot. Если у вас есть другое сопоставление, указывающее на docroot, я вижу, как эта проблема может возникнуть. Проверьте физические пути для сопоставлений и попробуйте решение здесь, чтобы использовать только отображение "/" .

Ответ 2

Как внешние клиенты взаимодействуют с вашим веб-сервисом? Просто через WSDL я предполагаю?

Возможно ли, что какое-то клиентское приложение, unit test... что-то, что-то... имеет неправильный URL... имеет URL-адрес вашего WSDL файла с "tafkan" в нем?

Если бы я работал над этим, возможно, первым проспектом, с которым я смотрю вниз, будет выяснение того, что может привести к этой проблеме. Является ли "tafkan" действительным каталогом в вашей системе? Где файлы .cfc действительно живут в файловой системе, что, если какие-либо сопоставления находятся в этих путях в CF Admin и какие URL-адреса используются для доступа к вашему веб-сервису?

Ключевой момент, который, я считаю, входит в голову CF и спрашивает его: "Почему вы создадите и будете искать класс с" tafkan "в качестве пакета?