그래서 직렬화, 개찰 및 다중 스레드 프로젝트에 다소 제한적인 경험이 있으므로 나와 함께 감내해야합니다.개찰 및 다중 스레드 비즈니스 객체
기본적으로 내 웹 응용 프로그램 클래스는 a를 만드는 POJ (parentObject)를 인스턴스화하여 새 타이머를 시작하고 타이머가있는 여러 POJ (childObjects)를 인스턴스화합니다. 이러한 childObject는 parentObject 클래스의 목록에 저장됩니다. 내 개찰구 응용 프로그램에서 페이지는 parentObject에 액세스해야하는, 그래서 그것을 액세스도록 만든 :
public Object getParentObject
{
return this.parentObject;
}
그리고과 같이 각 페이지에서 검색되는 :
((MyApplication)Application.get()).getParentObject()
문제는 현재 있다는 것입니다 TimerTask를위한 parentObject와 childObject는 더 이상 매분마다 호출되지 않습니다. 내 로그는 parentObject의 첫 번째 시작을 선택하지만 로깅 메시지는 다시 출력되지 않습니다. 즉, 부모 Object의 timertask의 run() 메소드가 매분마다 실행되지 않는다는 신호입니다. 자식 객체에서도 마찬가지입니다. 타이머가 한 번만 실행되는 것처럼 보입니다. 다음은 내가 가지고있는 의사 코드입니다.
public class childObject implements Serializable
{
private transient NamedParameterJdbcTemplate njt;
private transient Timer timer;
public childObject(DataSource ds)
{
this.njt = new NamedParamterJdbcTemplate(ds);
}
public void start()
{
timer = new Timer();
timer.schedule(new TimerTask(){
public void run()
{
//do some stuff that is never happening
}
}, 0, 60000);
}
}
public class ParentObject implements Serializable
{
private DataSource ds;
private List<ChildObject> childObjects;
private transient Timer;
public ParentObject(DataSource ds)
{
this.ds = ds;
//add some stuff to childObjects
timer = new Timer();
timer.schedule(new TimerTask(){
public void run()
{
for(some condition)
{
//Do some stuff
if(/*condition is met*/)
{
//starts the child's timer to do stuff
childObjects.get(i).start();
}
}
}
}, 0, 60000);
}
}
public MyApplication extends WebApplication
{
private ParentObject object;
private DataSource ds;
public void init()
{
super.init();
ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
ds = (DataSource) context.getBean("dataSource");
parentObject = new ParentObject(ds);
}
}
이러한 객체를 Serializable으로 만들어야합니까? String, 정수, 해당 클래스의 멤버 인 변수의 날짜 정렬은 있지만 객체 자체는 wicket 구성 요소에 연결되지 않습니다.
음, 왜 [이전 질문] (http://stackoverflow.com/questions/10181865/wicket-application-serialization-and-java-timers)을 오늘 (사소한 변경 사항)에 다시 게시 했습니까? 원본을 편집하고 개선 할 수는 있지만 중복을 추가하지 마십시오. – Jonik
질문은 실제로 완전히 반대입니다. 하나는 스레드가 너무 많아서 어떤 이유로 스레드가 죽었습니다. 나는 Wicket이 다중 쓰레드를 가진 POJ를 가지고있는 것을 좋아하지 않는 이유에 대해 여전히 혼란 스럽긴하지만, artbristol의 조언을 아래의 간단한 해결책처럼 보이기 위해 갈 것이다. – thatidiotguy
오, 실례합니다; 그 거의 모든 것이 축 어적으로 복사 될 때를 말하기는 어렵습니다. (그리고 나는 실제로 눈으로 그것들을 "diffing"했습니다.) 일반적으로 이런 종류의 연속 질문은 ** 다른 질문에 연결하여 ** 문맥을 제공하고 나면 당신이 묻고있는 * 새로운 질문이 무엇인지를 매우 명확하게 설명하면 * 더 * 더 좋습니다. 주요 점을 강조 표시합니다 (예 : 굵은 글씨체). 두 곳에서 모든 코드를 복사하여 붙여 넣지 마십시오. 단지 관련성이 있거나 다른 부품 (있는 경우). – Jonik