Servidor Java que dê acesso ao compilador

Tenho uma aplicação PHP, que recebe determinado código na linguagem Java, por exemplo:

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Olá Mundo!");
	}
}

Essa aplicação, pega esse código, salva em um arquivo .java e posteriormente compila com uma instrução parecida com essa: shell_exec('javac arquivo.java');

Meu problema, é que não consigo encontrar nenhum servidor que ofereça acesso ao compilador Java, para poder executar essas ações. Alguém poderia me indicar algum?

pois bem,

isso pode ser considerado uma falha de segurança - imagina uma terceira pessoa podendo subir codigo que execute instruções ou use toda a memoria disponivel, ou que revele detalhes da infraestrutura?.

servidor de produção não vem com compiladores ou build essentials no geral.

o que vc pode ver é se vc consegue alugar uma maquina (fisica ou virtual) e ai vc cuida da instalação e pacotes, incluindo a questão da segurança.

veja se o ideone.com não resolve o que vc quer fazer, ele oferece uma API para compilar codigo e tem algumas limitações (e $) mas pode ser uma alternativa menos complexa.

1 curtida

Sim, eu tinha pensado na questão da segurança, e até tomei muitas medidas quanto a isso.
Quanto ao ideone, é muito caro mesmo, sem condições, preciso de uma solução mais em conta. Mas muito obrigado!

Não entendi pq vc precisa de um servidor com compilador, tudo em 1.

Você não pode copiar o código recebido pela aplicação PHP pra uma maquina especializada em compilar?

Não entendi muito bem como isso funcionaria. Mas eu não tenho outra máquina disponível pra essa tarefa.

De qualquer forma, estou tentando o AWS da Amazon, aparentemente eles tem o que eu preciso.

Muito obrigado pela resposta o/

Tem que ter. Não da pra compilar programas e servir HTTP requests ao mesmo tempo.

Entendo isso amigo. Mas o problema é que não encontro nenhum servidor especializado em compilação, que é o que eu preciso.

mas ai vc cria uma fila e consome ela de forma assincrona, cujo job vai ser compilar. um job scheduler como resque e um pouco de ruby vai fazer o que vc quer.

como é assincrono a sua interface tem que ficar fazendo pooling ate que o status do job esteja concludo ( com erro ou sucesso ).