如何公开访问openshift包含的hsqldb服务器端口?

时间:2016-03-23 11:23:20

标签: spring openshift haproxy

我们正在使用HSQL数据库引擎2.3.2和Spring 4.2.0.RELEASE,而我的弹簧配置如下:

以下是applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd        
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">

    <bean class="com.chorke.spring.bootstarp.HyperSqlDbServer" id="hsqldb" init-method="start">
        <constructor-arg>
            <props>
                <prop key="server.port">55511</prop>
                <prop key="server.dbname.0">chorke</prop>
                <prop key="server.remote_open">true</prop>
                <prop key="server.database.0">file:~/.hsqldb/chorke/data;sql.syntax_mys=true;user=admin;password=pa55word</prop>
                <prop key="hsqldb.default_table_type">text</prop>
                <prop key="hsqldb.reconfig_logging">false</prop>
            </props>
        </constructor-arg>
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver" />
        <property name="url" value="jdbc:hsqldb:hsql://localhost:55511/chorke" />
        <property name="username" value="admin" />
        <property name="password" value="pa55word" />
    </bean>

</beans>

以下是com.chorke.spring.bootstarp.HyperSqlDbServer

package com.chorke.spring.bootstarp;

import java.io.IOException;
import java.util.Properties;

import org.hsqldb.Server;
import org.hsqldb.persist.HsqlProperties;
import org.hsqldb.server.ServerAcl.AclFormatException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.SmartLifecycle;

public class HyperSqlDbServer implements SmartLifecycle {
    private final Logger logger = LoggerFactory.getLogger(HyperSqlDbServer.class);
    private HsqlProperties properties;
    private Server server;
    private boolean running = false;

    public HyperSqlDbServer(Properties props) {
        properties = new HsqlProperties(props);
    }

    @Override
    public boolean isRunning() {
        if (server != null)
            server.checkRunning(running);
        return running;
    }

    @Override
    public void start() {
        if (server == null) {
            logger.info("Starting HSQL server...");
            server = new Server();
            try {
                server.setProperties(properties);
                server.start();
                running = true;
            } catch (AclFormatException afe) {
                logger.error("Error starting HSQL server.", afe);
            } catch (IOException e) {
                logger.error("Error starting HSQL server.", e);
            }
        }
    }

    @Override
    public void stop() {
        logger.info("Stopping HSQL server...");
        if (server != null) {
            server.stop();
            running = false;
        }
    }

    @Override
    public int getPhase() {
        return 0;
    }

    @Override
    public boolean isAutoStartup() {
        return true;
    }

    @Override
    public void stop(Runnable runnable) {
        stop();
        runnable.run();
    }
}

编辑:

如下面的代码段,我们可以在本地PC上的端口 55511 上启动 hsqldb 服务器。但是无法在spring上下文中开始使用 Openshift JBoss EWS 2.0 。发生错误的地方如下:

[Server@15a1792]: Initiating startup sequence...
[Server@15a1792]: [Thread[HSQLDB Server @15a1792,5,main]]: run()/openServerSocket():
java.net.BindException: Permission denied
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
        at java.net.ServerSocket.bind(ServerSocket.java:376)
        at java.net.ServerSocket.<init>(ServerSocket.java:237)
        at java.net.ServerSocket.<init>(ServerSocket.java:128)
        at org.hsqldb.server.HsqlSocketFactory.createServerSocket(Unknown Source)
        at org.hsqldb.server.Server.openServerSocket(Unknown Source)
        at org.hsqldb.server.Server.run(Unknown Source)
        at org.hsqldb.server.Server.access$000(Unknown Source)
        at org.hsqldb.server.Server$ServerThread.run(Unknown Source)
[Server@15a1792]: Initiating shutdown sequence...
[Server@15a1792]: Shutdown sequence completed in 4 ms.
[Server@15a1792]: 2016-03-23 23:41:21.881 SHUTDOWN : System.exit() was not called

关于这个问题,我的调查问卷如下:

  1. 如何获得打开自定义服务器端口的权限,例如 hsqldb h2db MLLP ActiveMQ ,的 HornetQ的
  2. 如果我们能够打开自定义服务器端口,是否需要额外的配置才能访问自定义服务器端口?
  3. 如果需要配置,请您提供有关此问题的任何指南?
  4. 最后,我请求您帮助打开自定义服务器端口,例如 hsqldb h2db MLLP ActiveMQ HornetQ 并从 Openshift Gear / Cartridge公开访问。

0 个答案:

没有答案