Подтвердить что ты не робот

Как проверить, выполняется ли код на сервере или стороне клиента в GWT?

У меня есть один класс, который используется как на сервере, так и на стороне клиента. Как я могу проверить в своем конструкторе, что он был вызван либо из класса клиента, либо из класса сервера?

Я сделал это грязным способом - просто попробуйте, если метод GWT.create() выдает исключение, а если он это делает, запустите код на стороне сервера. Но как я могу избежать этого?

    public PrintManager() {
    try {
        factory = GWT.create(MapConfigFactory.class);   //clientsiede factory creation
    } catch (Exception ex) {
        factory = AutoBeanFactorySource.create(MapConfigFactory.class); //serverside factory creator
    }
}
4b9b3361

Ответ 1

com.google.gwt.core.client.GWT.isScript() возвращает true, когда код работает как JavaScript на клиенте.

com.google.gwt.core.client.GWT.isClient() возвращает false, когда код запущен на сервере JVM (общий код).

Ответ 2

AutoBeanFactorySource не является общим кодом, поэтому вы не можете использовать этот код на клиенте. в этом случае вам нужно либо:

  • используйте зависимость-инъекцию, так что экземпляр MapConfigFactory может быть предоставлен по-разному на стороне клиента и на стороне сервера
  • используйте super-source, чтобы иметь два файла для одного и того же класса: один для клиентской, а другой для серверной. super-source объясняется в реализации Overriding one package с другим разделом http://code.google.com/webtoolkit/doc/latest/DevGuideOrganizingProjects.html#DevGuideModuleXml, он используется GWT для эмуляции среды выполнения Java и, например, для пакетов com.google.gwt.regexp и com.google.gwt.safehtml, чтобы предоставить унифицированный API, который может выполняться как на стороне клиента, так и на стороне сервера.