Наш проект мы пишем с индусами.
Общую архитектуру я задал как архитектор проекта — Java, Spring и т.д.
Но в тех областях, в которых им надо было писать они сами решали что и как будет.
А привыкли они всё делать на C/C++.
В итоге родился такой монстр:
У нашей программы есть command line клиент.
Он работает с командами и скриптами на Tcl (потому что так привыкли клиенты).
Используется native Tcl Interpreter (а не JTcl) (потому что так решили наши индусы).
Команды реализованы на Java, но часть команд обращается к коду на C++ (legacy code)
Однако же система сообщений об ошибках и предупреждениях реализована на Java.
Индусы писали используя JNI, а я связь Java с С делал на JNA
Как выглядит работа команды набранной в коммандной строке?
Java command line (jline) читает строку,
вызывает C (чтобы вызвать TCL Interpreter) через JNI
TCL обрабатывает строку, исполняет если это его команда или
Вызывает C (если команда реализована нами), чтобы вызвать Java
C вызывает Java через JNI
Исполняется команда на Java, если надо она
Вызывает C через JNI, если есть предупреждение о неверных данных, он
Вызывает Java через JNA
Теперь код от индусов передали нам и в следующей версии заменим Tcl на JTcl (который в системе и так есть и работает)
Общую архитектуру я задал как архитектор проекта — Java, Spring и т.д.
Но в тех областях, в которых им надо было писать они сами решали что и как будет.
А привыкли они всё делать на C/C++.
В итоге родился такой монстр:
У нашей программы есть command line клиент.
Он работает с командами и скриптами на Tcl (потому что так привыкли клиенты).
Используется native Tcl Interpreter (а не JTcl) (потому что так решили наши индусы).
Команды реализованы на Java, но часть команд обращается к коду на C++ (legacy code)
Однако же система сообщений об ошибках и предупреждениях реализована на Java.
Индусы писали используя JNI, а я связь Java с С делал на JNA
Как выглядит работа команды набранной в коммандной строке?
Java command line (jline) читает строку,
вызывает C (чтобы вызвать TCL Interpreter) через JNI
TCL обрабатывает строку, исполняет если это его команда или
Вызывает C (если команда реализована нами), чтобы вызвать Java
C вызывает Java через JNI
Исполняется команда на Java, если надо она
Вызывает C через JNI, если есть предупреждение о неверных данных, он
Вызывает Java через JNA
Теперь код от индусов передали нам и в следующей версии заменим Tcl на JTcl (который в системе и так есть и работает)