Я широко использовал JAGIServer , хотя он больше не разрабатывается, и он довольно хорош и прост в использовании. Это интерфейс для FastAGI, который я рекомендую использовать вместо простого AGI.
Новая версия этого фреймворка - OrderlyCalls , которая, кажется, имеет гораздо больше функций, но, поскольку они мне не нужны, я не пробовал.
Полагаю, все зависит от того, что вы хотите сделать с AGI; обычно у меня довольно сложный план набора, чтобы собрать и проверить все пользовательские данные, а затем просто использовать AGI для подключения к Java-приложению, которое будет считывать некоторые переменные, делать с ним что-то (выполнять операции, запросы и т. д.), а затем устанавливать еще переменные на канале AGI и отключает. На этом этапе схема набора номера продолжается в зависимости от результата переменных, установленных приложением Java.
Это работает очень быстро, потому что у вас есть ServerSocket в приложении Java, которое получает входящие соединения от AGI, создает JAGIClient с новым сокетом и новым экземпляром JAGIProcessor (который вы должны написать, это объект, который будет выполнить всю вашу обработку), а затем запустите JAGIClient внутри пула потоков.
Ваш JAGIProcessor реализует метод processCall, где он выполняет всю необходимую работу, взаимодействуя с JAGIClient, передаваемым в качестве параметра, для чтения и установки переменных или выполнения любых действий, которые позволяет интерфейс AGI.
То есть у вас постоянно работает приложение Java, и оно может быть простым приложением J2SE или приложением EE в контейнере, не имеет значения; после запуска он будет обрабатывать запросы AGI очень быстро, так как не нужно запускать новые процессы (в отличие от простого AGI, который запускает программу для каждого вызова AGI).