Развертывание нескольких приложений Saiku на одном сервере приложений: конфликт REST

На сервере приложений GlassFish развернут один экземпляр Saiku.

остальная часть saikuвнешний интерфейс: saiku-ui

Итак, я делаю следующий запрос:

http://external_ip_here/saiku-ui/

Затем я прохожу авторизацию, создаю кубы OLAP, которые мне нужны, и все работает отлично.

Проблема начинается, когда я пытаюсь установить другой экземпляр Saiku на том же сервере приложений, но в другом домене (скажем, domain).

Я переименовал интерфейсную часть, а остальные - следующим образом:

остальная часть: saiku-enterpriseвнешний интерфейс: analytic-ui

Соответственно, все вызовы Ajax в JavaScript и сопоставление URL заменены /saiku/ в /saiku-enterprise/

applicationContext-saiku-enterprise.xml (первоначально назывался applicationContext-saiku-webapp.xml):

<security:http auto-config='true' access-denied-page="/login.jsp">
<security:intercept-url pattern="/serverdocs/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/rest/saiku/session*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/rest/saiku/session/" access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/rest/**" access="IS_AUTHENTICATED_FULLY" />
<security:intercept-url pattern="/json/**" access="IS_AUTHENTICATED_FULLY" />
<security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />  
<security:logout logout-url="/logout"/>  
<security:http-basic/>

</security:http>
<import resource="applicationContext-spring-security.xml"/>

Часть web.xml:

...
<servlet>
   <servlet-name>jersey2</servlet-name>
   <servlet-class>org.codehaus.enunciate.modules.jersey.EnunciateJerseyServletContainer</servlet-class>
   <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>org.saiku.web</param-value>
   </init-param>
   <init-param>
      <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
      <param-value>com.sun.jersey.api.container.filter.PostReplaceFilter</param-value>
   </init-param>
   <init-param>
      <param-name>org.codehaus.enunciate.modules.jersey.config.ServletPath</param-name>
      <param-value>/rest</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
   <servlet-name>jersey2</servlet-name>
   <url-pattern>/rest/saiku/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
   <servlet-name>jersey2</servlet-name>
   <url-pattern>/rest/saiku/session</url-pattern>
</servlet-mapping>
...

Я перезагрузил новый экземпляр Saiku (просто внесите изменения в файл \domain\applications\saiku-enterprise\.reload - после этого Сайку перезапускается автоматически)

Далее я делаю запрос:

http://external_ip_here/analytic-ui/

И получите ошибку (я вижу ее в консоли FifeBug или Google Chrome):

HTTP Status 404: http://external_ip_here/saiku-enterprise/rest/saiku/session?_=1414754157176

Соответственно, новый экземпляр Сайку не работает.

В работающей конфигурации (без переименования) этот ресурс доступен:

/saiku/rest/saiku/session?_=1414761814333

Remote Address:external_ip_here:80
Request URL:http://external_ip_here/saiku/rest/saiku/session?_=1414761814333
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Type:application/x-www-form-urlencoded
Cookie:...
Host:external_ip_here
Referer:http://external_ip_here/saiku-ui/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
X-Requested-With:XMLHttpRequest
Query String Parametersview sourceview URL encoded
_:1....
Response Headersview source
Connection:Keep-Alive
Content-Type:application/json
Date:Fri, 31 Oct 2014 13:23:17 GMT
Keep-Alive:timeout=5, max=86
Server:GlassFish Server Open Source Edition 3.1
Transfer-Encoding:chunked
X-Powered-By:Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1 Java/Sun Microsystems Inc./1.6)

Если на стороне клиента я указываю BASE_URL == http://127.0.0.1:8080, как показано ниже:

/**
 * Change settings here
 */
var Settings = {
    VERSION: "Saiku 2.5",
    BIPLUGIN: false,
    BASE_URL: "http://127.0.0.1:8080",
    TOMCAT_WEBAPP: "/saiku-enterprise",
    REST_MOUNT_POINT: "/rest/saiku/",
    DIMENSION_PREFETCH: true,
    ERROR_LOGGING: false,
    // number of erroneous ajax calls in a row before UI cant recover
    ERROR_TOLERANCE: 3,
    QUERY_PROPERTIES: {
        'saiku.olap.query.automatic_execution': 'true',
        'saiku.olap.query.nonempty': 'true',
        'saiku.olap.query.nonempty.rows': 'true',
        'saiku.olap.query.nonempty.columns': 'true',
        'saiku.ui.render.mode' : 'table'
    },
    /* Valid values for CELLSET_FORMATTER:
     * 1) flattened
     * 2) flat
     */
    CELLSET_FORMATTER: "flattened",
    // limits the number of rows in the result
    // 0 - no limit
    RESULT_LIMIT: 0,
    MEMBERS_FROM_RESULT: true,
    PLUGINS: [
        "Chart"
    ],
    TELEMETRY_SERVER: 'http://telemetry.analytical-labs.com:7000',
    LOCALSTORAGE_EXPIRATION: 10 * 60 * 60 * 1000 /* 10 hours, in ms */
};

Тогда я получаю эту ошибку:

Aborted: http://external_ip_here/analytic-ui/

Приложение запускается бесконечно, перезагружается..

Для того, чтобы связать интерфейс и остальную часть, я добавил два компонента, как рекомендовано:

<bean id="platformBean" class="org.saiku.service.PlatformUtilsService">
    <property name="path" value="../../../docroot/analytic-ui/js/saiku/plugins/"/>
</bean>

<bean id="infoResource" class="org.saiku.web.rest.resources.InfoResource">
    <property name="platformUtilsService" ref="platformBean"/>
</bean>

Но это не помогло.

Та же ошибка:

HTTP Status 404: http://external_ip_here/saiku-enterprise/rest/saiku/session?_=14...

В чем может быть проблема? Буду очень признателен за информацию. Спасибо всем.

1 ответ

Решение

Я понял. В статических ресурсах следует вносить изменения в файл Settings.js, как показано ниже:

/**
 * Change settings here
 */
var Settings = {
    VERSION: "Saiku 2.5",
    BIPLUGIN: false,
    BASE_URL: "",
    TOMCAT_WEBAPP: "/saiku-enterprise",
    REST_MOUNT_POINT: "/rest/saiku/",
    DIMENSION_PREFETCH: true,
    ERROR_LOGGING: true,
    // number of erroneous ajax calls in a row before UI cant recover
    ERROR_TOLERANCE: 3,
    QUERY_PROPERTIES: {
        'saiku.olap.query.automatic_execution': 'true',
        'saiku.olap.query.nonempty': 'true',
        'saiku.olap.query.nonempty.rows': 'true',
        'saiku.olap.query.nonempty.columns': 'true',
        'saiku.ui.render.mode' : 'table'
    },
    /* Valid values for CELLSET_FORMATTER:
     * 1) flattened
     * 2) flat
     */
    CELLSET_FORMATTER: "flattened",
    // limits the number of rows in the result
    // 0 - no limit
    RESULT_LIMIT: 0,
    MEMBERS_FROM_RESULT: true,
    PLUGINS: [
        "Chart"
    ],
    TELEMETRY_SERVER: 'http://telemetry.analytical-labs.com:7000',
    LOCALSTORAGE_EXPIRATION: 10 * 60 * 60 * 1000 /* 10 hours, in ms */
};

Т.е. укажите соответствующий контекст - front-end должен указывать на правильный остаток back-end.

TOMCAT_WEBAPP: "/saiku-enterprise",

Изменений нигде больше не нужно (кроме applicationContext-spring-security-jdbc.xml если вы используете его).

Сейчас все нормально.

Другие вопросы по тегам