Como chamar o código Java do C #?

Desenvolvemos um aplicativo Java e gostaríamos de usar esse aplicativo de um cliente C #. O aplicativo tem dependências no Spring, Log4j, ...

Qual seria o mecanismo mais eficiente - fazer DLL (s) do código Java, ... - para conseguir isso?