Как получить статическую переменную сервера (соединение графа) из GWT RequestFactory

Я знаю это беспокойство немного больше GWT ...

Я разрабатываю свое первое приложение CWT. И я использую RequestFactory. Я беру пример из "GWT In Action Second Edition". Внутри класса ContactService находятся методы доступа к базе данных, которые я хочу подключить к Neo4J Graph. В конструкторе я добавил это

private static GraphDatabaseService graphDB;
public ContactService () {
String DB_PATH = "/home/myName/Developer/Workspace/MyGWTApp/DATA";
graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);  

}

Я могу использовать CRUD, передав статическую переменную graphDB методу, fetch (graphDB, id), persist (graphDB, c) и т. Д. Все работает хорошо. Первый раз конструктор дает мне ссылку на график. Моя проблема в том, что когда я разрабатываю другой класс обслуживания на примере FriendService, мне снова нужно подключение к graphDB. Я не могу воссоздать то же самое с конструктором


private static GraphDatabaseService graphDB;
public FriendService () {
    String DB_PATH = "/home/myName/Developer/Workspace/MyGWTApp/DATA";
    graphDB = new GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);  
 }

Это нормально с Neo4J. Я должен получить только значение моей статической переменной graphDB. Но как это сделать?

Я пытался создать такой сервлет

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;


public class Neo4jServletContextListener implements ServletContextListener{

    public static GraphDatabaseService getGraphDB(ServletContext context) {
        return (GraphDatabaseService) context.getAttribute("neo4j");
    }
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        getGraphDB(arg0.getServletContext()).shutdown();
        //System.out.println("ServletContextListener destroyed");
    }

    @Override
    public void contextInitialized(ServletContextEvent arg0) {

        String DB_PATH = "/home/myName/Developer/Workspace/MyGWTApp/DATA";
        GraphDatabaseService graphDB =
            new   GraphDatabaseFactory().newEmbeddedDatabase(DB_PATH);  
        ServletContext context = arg0.getServletContext();
        context.setAttribute ("neo4j", graphDB);

        //System.out.println("ServletContextListener started"); 
    }
}

Но сделать это невозможно

graphDB = (GraphDatabaseService) getServletContext().getAttribute("neo4j");

Я нашел где-то в Stack Overflow эту строку, которая работает хорошо

graphDB = (GraphDatabaseService) RequestFactoryServlet.getThreadLocalServletContext().getAttribute("neo4j");

person Philippe Baumard    schedule 12.12.2013    source источник


Ответы (1)


Верный. Если вам нужно получить ServletContext внутри работающей службы во время запроса, используйте статический метод _ 2_.

person Andrea Boscolo    schedule 13.12.2013