Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带Spring和多用户的Vaadin_Java_Spring_Vaadin - Fatal编程技术网

Java 带Spring和多用户的Vaadin

Java 带Spring和多用户的Vaadin,java,spring,vaadin,Java,Spring,Vaadin,我的新Vaadin项目有一个非常奇怪的问题。 如果我启动应用程序并与用户登录,然后切换浏览器并再次打开站点,则会话似乎将被共享。我在两个窗口中都有相同的内容 我读了一些关于这个问题的论坛帖子,他们都说不要在同一个浏览器中打开应用程序。好的,我启动了一个虚拟机,但是,同样的问题。或者,从上下文中删除所有静态变量。我已经这样做了,现在使用ThreadLocal模式 我完全不知道出了什么问题。我相信的是,春天的环境杀死了瓦丁,有人有过这样的经历吗 为了将Spring和Vaadin结合在一起,我使用了N

我的新Vaadin项目有一个非常奇怪的问题。 如果我启动应用程序并与用户登录,然后切换浏览器并再次打开站点,则会话似乎将被共享。我在两个窗口中都有相同的内容

我读了一些关于这个问题的论坛帖子,他们都说不要在同一个浏览器中打开应用程序。好的,我启动了一个虚拟机,但是,同样的问题。或者,从上下文中删除所有静态变量。我已经这样做了,现在使用ThreadLocal模式

我完全不知道出了什么问题。我相信的是,春天的环境杀死了瓦丁,有人有过这样的经历吗

为了将Spring和Vaadin结合在一起,我使用了Nicolas Frankel为Vaadin设计的Spring集成插件(https://vaadin.com/directory#addon/spring-整合)

我将发布我的申请代码,以便进一步调查

===================

Vaadin应用程序类别:

public class MainApplication extends Application implements HttpServletRequestListener    {
private static final long serialVersionUID = 2067470624065324231L;

private static ThreadLocal<MainApplication> threadLocal = new ThreadLocal<MainApplication>();

private Window mainWindow;

//Viewmanager
private ViewManager viewManager;

private Professor professor;

//DAO Classes and Bean Setter´s
ProfessorDAO professorDAO;
QuestionDAO questionDAO;
AnswerDAO answerDAO;
AnsweredDAO answeredDAO;
QRCodeDAO qrCodeDAO;

public void setProfessorDAO(ProfessorDAO professorDAO) {
    System.out.println("Setting ProfessorDAO!");
    System.out.println(professorDAO.toString());
    this.professorDAO = professorDAO;
}

public void setQuestionDAO(QuestionDAO questionDAO) {
    System.out.println("Setting QuestionDAO!");
    System.out.println(questionDAO.toString());
    this.questionDAO = questionDAO;
}

public void setAnswerDAO(AnswerDAO answerDAO) {
    System.out.println("Setting AnswerDAO!");
    System.out.println(answerDAO.toString());
    this.answerDAO = answerDAO;
}

public void setAnsweredDAO(AnsweredDAO answeredDAO) {
    System.out.println("Setting AnsweredDAO!");
    System.out.println(answeredDAO.toString());
    this.answeredDAO = answeredDAO;
}

public void setQrCodeDAO(QRCodeDAO qrCodeDAO) {
    System.out.println("Setting QRCodeDAO!");
    System.out.println(qrCodeDAO.toString());
    this.qrCodeDAO = qrCodeDAO;
}

public ProfessorDAO getProfessorDAO() {
    return professorDAO;
}

public QuestionDAO getQuestionDAO() {
    return questionDAO;
}

public AnswerDAO getAnswerDAO() {
    return answerDAO;
}

public AnsweredDAO getAnsweredDAO() {
    return answeredDAO;
}

public QRCodeDAO getQrCodeDAO() {
    return qrCodeDAO;
}

//Currently logged in Professor.
public Professor getProfessor() {
    return professor;
}

public void setProfessor(Professor professor) {
    this.professor = professor;
}



public static void setInstance(MainApplication application){
    threadLocal.set(application);
}

public ViewManager getViewManager() {
    return viewManager;
}

public void setViewManager(ViewManager viewManager) {
    this.viewManager = viewManager;
}

public static MainApplication getInstance(){
    return threadLocal.get();
}

public MainApplication() {
}

@Override
public void init() {
    setInstance(this);

    setTheme("crs");

    mainWindow = new Window("CRS -- Classroom Response System");
    setMainWindow(mainWindow);

    viewManager = new ViewManager(mainWindow);

    viewManager.switchScreen(LoginScreen.class.getName(), new LoginScreen());


    //mainWindow = new MainWindow("CRS -- Classroom Response System");
    //setMainWindow(mainWindow);


}


public void onRequestStart(HttpServletRequest request,
        HttpServletResponse response) {
    MainApplication.setInstance(this);

}

public void onRequestEnd(HttpServletRequest request,
        HttpServletResponse response) {
    threadLocal.remove();

}
公共类MainApplication扩展应用程序实现HttpServletRequestListener{ 私有静态最终长serialVersionUID=2067470624065324231L; 私有静态ThreadLocal ThreadLocal=新ThreadLocal(); 私人窗口主窗口; //视图管理器 私有视图管理器视图管理器; 私人教授; //DAO类和Bean Setter类 道教授道教授; 问号问号; 答:答:答; 答:答:答:答:答; QRCodeDAO QRCodeDAO; 公开无效设置教授道(教授道教授道){ System.out.println(“设置教授道!”); System.out.println(professorDAO.toString()); this.professorDAO=professorDAO; } 公共无效setQuestionDAO(QuestionDAO QuestionDAO){ System.out.println(“设置问题DAO!”); System.out.println(questionDAO.toString()); this.questionDAO=questionDAO; } 公共无效setAnswerDAO(AnswerDAO AnswerDAO){ System.out.println(“设置AnswerDAO!”); System.out.println(answerDAO.toString()); this.answerDAO=answerDAO; } 公共无效设置应答DAO(应答DAO应答DAO){ System.out.println(“设置应答DAO!”); System.out.println(answeredDAO.toString()); this.answeredDAO=answeredDAO; } 公共无效setQrCodeDAO(QRCodeDAO QRCodeDAO){ System.out.println(“设置QRCodeDAO!”); System.out.println(qrCodeDAO.toString()); this.qrCodeDAO=qrCodeDAO; } 公共教授Dao getProfessorDAO(){ 还道教授; } 公共问题dao getQuestionDAO(){ 返回问题; } 公共回答{ 返回应答道; } 公众回答dao getAnsweredDAO(){ 回答道; } 公共QRCodeDAO getQrCodeDAO(){ 返回qrCodeDAO; } //目前已登录Professor。 公共教授{ 返回教授; } 公共图书馆教授(教授){ 这个。教授=教授; } 公共静态void setInstance(主应用程序){ threadLocal.set(应用程序); } 公共视图管理器getViewManager(){ 返回视图管理器; } public void setViewManager(ViewManager ViewManager){ this.viewManager=viewManager; } 公共静态MainApplication getInstance(){ 返回threadLocal.get(); } 公共应用程序(){ } @凌驾 公共void init(){ setInstance(这个); setTheme(“crs”); 主窗口=新窗口(“CRS——教室响应系统”); 设置主窗口(主窗口); viewManager=新的viewManager(主窗口); viewManager.switchScreen(LoginScreen.class.getName(),new LoginScreen()); //主窗口=新的主窗口(“CRS——教室响应系统”); //设置主窗口(主窗口); } 公共void onRequestStart(HttpServletRequest请求, HttpServletResponse(响应){ MainApplication.setInstance(这个); } 请求端公共无效(HttpServletRequest请求, HttpServletResponse(响应){ threadLocal.remove(); } web.xml文件:

<display-name>CRSServer</display-name>


<context-param>
    <description>
    Vaadin production mode</description>
    <param-name>productionMode</param-name>
    <param-value>false</param-value>
</context-param>


<servlet>
    <servlet-name>CRS</servlet-name>
    <servlet-class>ch.frankel.vaadin.spring.SpringApplicationServlet</servlet-class>
    <init-param>
        <description>
        Vaadin application class to start</description>
        <param-name>applicationBeanName</param-name>
        <param-value>cs.hm.edu.kreipl.crs.frontend.MainApplication</param-value>
    </init-param>

    <init-param>
        <description>
        Application widgetset</description>
        <param-name>widgetset</param-name>
        <param-value>cs.hm.edu.kreipl.crs.widgetset.CrsserverWidgetset</param-value>
    </init-param>
</servlet>


<servlet-mapping>
    <servlet-name>CRS</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>


<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>


<context-param>
    <param-name>contextConfigLocation</param-name>  
    <param-value>WEB-INF/spring-config.xml</param-value>
</context-param>
crs服务器
瓦丁生产模式
生产模式
假的
CRS
ch.frankel.vaadin.spring.spring应用服务
要启动的Vaadin应用程序类
应用程序名称
cs.hm.edu.kreipl.crs.frontend.main应用程序
应用程序WidgeSet
widgetset
cs.hm.edu.kreipl.crs.widgetset.CrsserverWidgetset
CRS
/*
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
上下文配置位置
WEB-INF/spring-config.xml
春天的背景

<context:component-scan base-package="cs.hm.edu.kreipl.crs" />
<bean id="myDataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName"
        value="com.mysql.jdbc.Driver">
    </property>
    <property name="url" value="jdbc:mysql://localhost:3306/crs"></property>
    <property name="username" value="crs"></property>
    <property name="password" value="password"></property>
</bean>

<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>cs.hm.edu.kreipl.crs.database.entity.Professor</value>
            <value>cs.hm.edu.kreipl.crs.database.entity.Answer</value>
            <value>cs.hm.edu.kreipl.crs.database.entity.Answered</value>
            <value>cs.hm.edu.kreipl.crs.database.entity.Question</value>
            <value>cs.hm.edu.kreipl.crs.database.entity.QuestionQRCode</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hbm2ddl.auto">create</prop>
    </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="mySessionFactory" />
</bean>

<tx:annotation-driven/>

<!-- VAADIn Startup -->
<bean id="cs.hm.edu.kreipl.crs.frontend.MainApplication" class="cs.hm.edu.kreipl.crs.frontend.MainApplication">
    <property name="answerDAO" ref="answerDAO" />
    <property name="answeredDAO" ref="answeredDAO" />
    <property name="professorDAO" ref="professorDAO" />
    <property name="qrCodeDAO" ref="qrCodeDAO" />
    <property name="questionDAO" ref="questionDAO" />
</bean>



<bean id="professorDAO" class="cs.hm.edu.kreipl.crs.database.implementation.ProfessorDAOImpl">
    <constructor-arg>
        <value>cs.hm.edu.kreipl.crs.database.entity.Professor</value>
    </constructor-arg>
    <property name="hibernateTemplate" ref="mySessionFactory"/>
</bean>
<bean id="questionDAO" class="cs.hm.edu.kreipl.crs.database.implementation.QuestionDAOImpl">
    <constructor-arg>
        <value>cs.hm.edu.kreipl.crs.database.entity.Question</value>
    </constructor-arg>
    <property name="hibernateTemplate" ref="mySessionFactory"/>
</bean>
<bean id="qrCodeDAO" class="cs.hm.edu.kreipl.crs.database.implementation.QRCodeDAOImpl">
    <constructor-arg>
        <value>cs.hm.edu.kreipl.crs.database.entity.QuestionQRCode</value>
    </constructor-arg>
    <property name="hibernateTemplate" ref="mySessionFactory"/>
</bean>
<bean id="answerDAO" class="cs.hm.edu.kreipl.crs.database.implementation.AnswerDAOImpl">
    <constructor-arg>
        <value>cs.hm.edu.kreipl.crs.database.entity.Answer</value>
    </constructor-arg>
    <property name="hibernateTemplate" ref="mySessionFactory"/>
</bean>
<bean id="answeredDAO" class="cs.hm.edu.kreipl.crs.database.implementation.AnsweredDAOImpl">
    <constructor-arg>
        <value>cs.hm.edu.kreipl.crs.database.entity.Answered</value>
    </constructor-arg>
    <property name="hibernateTemplate" ref="mySessionFactory"/>
</bean>
<bean id="deviceDAO" class="cs.hm.edu.kreipl.crs.database.implementation.DeviceDAOImpl">
    <constructor-arg>
        <value>cs.hm.edu.kreipl.crs.database.entity.Device</value>
    </constructor-arg>
    <property name="hibernateTemplate" ref="mySessionFactory"/>
</bean>

cs.hm.edu.kreipl.crs.database.entity.Professor
cs.hm.edu.kreipl.crs.database.entity.Answer
cs.hm.edu.kreipl.crs.database.entity.com
cs.hm.edu.kreipl.crs.database.entity.Question
cs.hm.edu.kreipl.crs.database.entity.QuestionQRCode
org.hibernate.dialogue.mysql5dialogue
真的
创造
cs.hm.edu.kreipl.crs.database.entity.Professor
cs.hm.edu.kreipl.crs.database.entity.Question
cs.hm.edu.kreipl.crs.database.entity.QuestionQRCode
cs.hm.edu.kreipl.crs.database.entity.Answer
cs.hm.edu.kreipl.crs.database.entity.com
cs.hm.edu.kreipl.crs.database.entity.Device

如果您还需要其他课程,请马上告诉我。

我正在使用vaadin+spring,但没有spring集成插件。 我认为问题在于您没有为请求应用程序的新用户创建新的Vaadin applicationBean

在我的应用程序中,我传递web.xml中的applicationBean。我的waadin应用程序带有以下注释:

应用程序类

@Component(value = "appName")
@Scope(value = "session")
class AppName extends Application {
....
}
WEB.XML

    <init-param>
        <param-name>applicationBean</param-name>
        <param-value>appName</param-value>
    </init-param>
   <init-param>
        <description>
        Vaadin application class to start</description>
        <param-name>applicationBeanName</param-name>
        <param-value>cs.hm.edu.kreipl.crs.frontend.MainApplication</param-value>
    </init-param>

应用程序bean
appName
对于每一个新的