Во-первых, ваш сервер приложений должен иметь возможность загружать собственные библиотеки из загрузчиков классов приложений, чтобы System # loadLibrary работала; другими словами, он должен реализовывать ClassLoader # findLibrary. В противном случае вы должны использовать System # load и каким-то образом знать абсолютный путь к вашей dll.
Во-вторых, размещение собственных библиотек в приложении J2EE повлияет на возможность перезапуска приложения, поскольку JNI ограничивает возможность загрузки несколькими родными загрузчиками одной и той же собственной библиотеки. Если загрузчик класса приложения из первого экземпляра приложения не подвергается сборке мусора перед попыткой перезапустить приложение (либо из-за утечки, либо из-за того, что GC непредсказуем), то второй экземпляр приложения, скорее всего, не будет работать, если он не сможет загрузить родную библиотеку. По этой причине я рекомендую размещать собственные библиотеки и классы, которые их используют, в загрузчике классов на уровне сервера или по крайней мере в том, который гарантированно никогда не будет перезагружен.