내가 달성하고자하는 것은 EJB 기능을 활용하고 일종의 자동 풀링을 사용하는 것이다.Stateless EJB local (instance) 변수
로컬 상태 비 저장 변수 (적절한 정의인지 모르는 경우)을 유지할 때 SLSB가 적합 할 수 있다고 생각했습니다. 적어도 클라이언트/호출자 POV에서. 내가 프로세스의 풀을 원하는
@Stateless
public class CommunicationService implements Serializable
{
private Process process;
@PostConstruct
//@PostActivate maybe?
public void startProcess()
{
try
{
process = new ProcessBuilder("running a temporary daemon").start();
}
catch(IOException e)
{
throw new RuntimeException(e.getMessage(), e);
}
}
@PreDestroy
//@PrePassivate maybe?
public void endProcess()
{
if(process.isAlive())
{
process.destroy();
boolean terminated = false;
try
{
terminated = process.waitFor(5, TimeUnit.SECONDS);
}
catch(InterruptedException e)
{
// ignore
}
if(!terminated)
{
process.destroyForcibly();
}
}
}
public int send(String message)
{
// do something with the process - may take a long time
// this is just an example
PrintStream printStream = new PrintStream(process.getOutputStream());
printStream.println(message);
try
{
return process.getInputStream().read();
}
catch(IOException e)
{
return -1;
}
}
}
주, 그래서 @Singleton
들 적합하지 않습니다.
@Stateless
EJB 인스턴스 변수를 올바르게 사용하고 있습니까?@MessageDriven
이 더 적절합니까?- 더 있나요? EE 방법이 있습니까?
감사
1) 상태가없는 EJB 상태를 제공하고 있기 때문에 1). 직업에 대한 잘못된 도구. 2) MDB는 대기열에 관련되어 있기 때문에 풀링이 아닙니다. 3) 나는 당신이 처음부터 풀이 필요한 이유를 정말로 이해하지 못하기 때문에 무엇에 대답해야할지 모르겠다.프로세스를 사용하여 문제를 해결하면서 어떤 문제를 해결할 것입니까? – Gimby
** 1) ** 어떤 클라이언트 액세스가 처리되는지 상관하지 않습니다. * 상태 *로 간주 될지 모르겠습니다. ** 2) ** 당신 말이 맞아요. 일종의 비동기 대기열을 생각하고 있었지만, 적절하지는 않습니다. ** 3) ** 레거시 SW와의 통합. 제 경우에는 * jodconverter *를 다시 작성하기 때문에 일부 OpenOffice 인스턴스가 필요합니다. –
그러면 더 좋아질 것입니다. 그런 다음 프로세스의 "풀"을 관리하는 싱글 톤 EJB가 실제로 필요합니다. 단순한 목록 일 수 있습니다. – Gimby