나는 여러 사용자가 사용하고있는 자바 웹 응용 프로그램이 있습니다. 사용자는 실제로 응용 프로그램에 연결하고 그 응용 프로그램을 사용하는 사람들을 의미합니다.자바 다이나믹 빈/사용자간에 공유
모든 사용자는 ID가있는 스키마를 편집 할 수 있습니다. 현재 여러 사용자가 동일한 스키마를 동시에 편집 할 수 있습니다. 데이터베이스/테이블을 사용하지 않고 문제를 해결하고 싶습니다. 지금까지 시도 무엇
:
편집 버튼은 사용자가 특정 스키마를 편집합니다 것이있다. 사용자가 클릭하면 메소드가 트리거됩니다.
protected SessionLockModSchema sessionLockModSchema = new SessionLockModSchema();
protected Model model; //schema model object
public void buttonClick(ClickEvent event) {
//button logic goes here
}
나는이 방법이 트리거 될 때 나는, 스키마 ID와 콩을 만들 수 있습니다 생각.
protected SessionLockModSchema sessionLockModSchema = new SessionLockModSchema();
protected Model model;
public void buttonClick(ClickEvent event) {
//button logic goes here
this.sessionLockModSchema.lockSchema(model);
}
이 콩을 만들었을 때 필요한 것은 다음 사용자가 있는지 확인하는 것입니다. 이것은 나에게 좋은 소리 이론적으로
protected Model model;
public void buttonClick(ClickEvent event) {
if(!this.sessionLockModSchema.isSchemaLocked(model){
//button logic goes here
this.sessionLockModSchema.lockSchema(model);
}
}
, 편집 버튼을 해당 스키마로 만든 콩이 있다면 트리거하지 않습니다. 그러나 빈은 생성되지 않는다. (또는 적어도 한 명의 사용자 만 접근 할 수있다.) 여기 sessionLockModSchema 클래스의 :
public class SessionLockModSchema{
ApplicationContext context;
GenericApplicationContext ctx;
public SessionLockModSchema(){
if(ctx == null){
this.ctx = new GenericApplicationContext();
}
}
public void lockSchema(Model model){
String beanName = "model-"+model.getId();
BeanDefinitionBuilder bDBuilder = BeanDefinitionBuilder .rootBeanDefinition(String.class);
bDBuilder.setScope("prototype");
this.ctx.registerBeanDefinition(beanName, bDBuilder.getBeanDefinition());
//appcontext.close();
}
public boolean isSchemaLocked(Model model){
String beanName = "model-"+model.getId();
Object objectRef = null;
try{
//ctx.refresh();
objectRef = this.ctx.getBean(beanName);
}catch(NoSuchBeanDefinitionException e){
// TODO:
}catch(IllegalStateException e){
// TODO:
}
boolean isLocked;
if(objectRef == null){
isLocked = false;
}else{
isLocked = true;
}
return isLocked;
}
}
내 질문을 명확히하기 위해, 나는 IllegalStateException이 내가 그러나 (주석 ctx.refresh)를 새로 경우의 BeanFactory는, 새로해야한다는 말을 얻을, 나는 그런 콩이 없음을 얻는다. 이것에 대한 조언? 내가 도대체 뭘 잘못하고있는 겁니까?
는 사실이 매우 유사합니다을 내가 처음에 가지고 있던 것에는 콩 만들기 (외부 config.xml 파일)에 익숙하지 않아서 봄이 내 삶을 더 편하게 만들 것이라고 결정했다. – CrazySabbath
흠, 당신이 나를 오해 한 것 같아요, 아니면 당신을 오해 한 것 같아요. 당신의 메소드 생성 빈은 한 사용자 만 접근 할 수 있습니다 (세션 범위라고 생각합니다), 다른 로그인 한 사용자는 그것을 볼 수 없습니다. 필요한 것은 응용 프로그램 범위에서 액세스 할 수있는 데이터가있는 bean (lockedModels)입니다. 한 사용자가 빈을 만들고 다른 사용자 (로그인 한 경우)가 해당 빈에 액세스 할 수 있습니다. 그건 그렇고 이상한 오류가 있습니다. [바람둥이 여기에 로그하십시오.] (http://codepad.org/6eFQbxNM) – CrazySabbath
아마도 코드를 더 공유해야 할 것입니다. 스프링없이 답을 편집 할 것입니다. –