Развертывание нескольких приложений 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
если вы используете его).
Сейчас все нормально.