У нас невероятно сложная ситуация с 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