Wicket 응용 프로그램이 있는데 원격으로 변경할 수있는 별도의 구성을 구현하려고합니다. 어쨌든 그것은 최종 목표입니다.CayenneRuntime을 web.xml없이 webapplication에 사용
내가하려는 것은 web.xml 파일을 사용하지 않고 수동으로 시작하여 작업하도록 Cayenne을 설정하는 것입니다. 나는 여러 가지 시도를했지만, 모든 문맥에 문맥을 적용하는 방법을 완전히 이해하고 있는지 확신 할 수 없다.
내 Application 클래스에서 ServerRuntime을 만들려고했습니다. 또한 각 페이지에서 사용하는 사용자 정의 BasePage 클래스를 사용해 보았습니다. 나는베이스 페이지에서 다음을 수행하여 작업의 종류에 그것을 얻을 수 있지만, 그것은 일관성이 :
public class BasePage ....
public static ServerRuntime runtime = new ServerRuntime("cayenne-config.xml");//This is in my BasePage class, but I've also tried this in the Application class
@Override
protected void init() {
BaseContext.bindThreadObjectContext(Application.runtime.getContext());//This is in my BasePage class
}
내가 말했듯이, 작품의 종류, 그러나 일치하지 않습니다.
java.lang.IllegalStateException: Current thread has no bound ObjectContext.
나는이에 대한 많은 정보를 찾을 수 없습니다 : 나는
BaseContext.getThreadObjectContext();
오류에 오류가 계속하는 것은 이것이다. 나는 이런 식으로 일을 시도하고 이들을 사용하여 런타임에 액세스하지만 아무것도 일관되게 작동하지 않습니다.
WebUtil.setCayenneRuntime(this.getServletContext(), runtime);
BaseContext.bindThreadObjectContext(WebUtil.getCayenneRuntime(((Application)getApplication()).getServletContext()).getContext());
모든 도움을 주시면 감사하겠습니다.
CayenneFilter와 thread-bound ObjectContext는 Cayenne이 부트 스트랩되는 방법의 한 예일뿐입니다. 어떤 종류의 의존성 주입 프레임 워크를 사용하고 있다면,이 접근법을 완전히 제거하고, 또 다른 DI 관리 서비스로서 ServerRuntime 싱글 톤을 생성 할 수 있습니다. 필요에 따라 ObjectContext를 작성하십시오 (예 : 읽기 용으로 하나의 ObjectContext를 공유하고 쓰기에 짧은 페이지 또는 메소드 범위의 ObjectContext) –
@andrus_a, 감사합니다. 현재 DI 프레임 워크를 사용하지는 않지만, 우리는 소개에 관심이 있습니다. 여전히 DataContext.getThreadObjectContext()를 사용하고 있을까요? 우리는 이것을 사용하는 많은 응용 프로그램을 가지고 있으므로 상당히 큰 변경이 될 것입니다. – adpro
DI는 당연히 짧은 게시물을 넘어서 큰 주제입니다. 봄 [Boot]이 있습니다. 부티크도 있습니다.io - Google Guice DI를 기반으로하는 오픈 소스 프로젝트로, 카이엔 통합을 즉시 사용할 수 있습니다. DataContext.getThreadObjectContext() API는 필요한 경우 계속 사용할 수 있습니다. 간단하고 사용하기 쉽습니다. 유일한 옵션은 아니므로 특정 요구 사항에 맞게 응용 프로그램의 ObjectContext 범위를 미세 조정할 수 있습니다. –