Автоматический запуск JavaDB (Derby) на GlassFish

Я планирую развернуть выпуск GlassFish v3 с открытым исходным кодом в производственной среде. Он поставляется с JavaDB (Apache Derby), что как раз то, что мне нужно. Единственная проблема в том, что JavaDB не запускается по умолчанию при запуске GlassFish. Мне нужно было бы перейти в командную строку и ввести:

asadmin start-database

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

заранее спасибо


person del.ave    schedule 17.08.2010    source источник


Ответы (4)


После того, как вы перейдете в производство, вы можете запустить базу данных один раз и просто оставить ее работающей, независимо от состояния сервера приложений.

Вы можете создать сценарий оболочки, чтобы «связать» начальный домен и начальную базу данных в одну команду uber-start.

person vkraemer    schedule 18.08.2010
comment
Это то, что я планировал сделать, потому что ничего другого не может быть. Спасибо за ответ. - person del.ave; 19.08.2010
comment
Не могли бы вы привести пример сценария? - person NonlinearFruit; 15.02.2017

Это немного устарело, но в разделе GlassFish в настройках Eclipse есть флажок под названием «Запускать процесс базы данных JavaDB при запуске GlassFish Server». Я использую Eclipse Indigo SR1.

person Truman    schedule 21.02.2012
comment
Да, я хорошо знаю этот маленький флажок, но убедитесь, что в том же диалоговом окне, которое указывает на правильное местоположение JavaDB, я ошибся, и Eclipse не смог запустить Derby, потребовалось некоторое время, чтобы определить! - person EraserheadIRL; 29.08.2012
comment
Спасибо, Карл. В Netbeans есть такая же опция, и она включена по умолчанию. - person DavidS; 02.09.2014

Это то, что я делаю, я развертываю это на сервере, упакованном как EJB JAR. Это позволит запустить сервер Derby как собственное корпоративное приложение.

import java.io.PrintWriter;

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;

import org.apache.derby.impl.drda.NetworkServerControlImpl;

@Singleton
@Startup
public class LocalDatabase {

private NetworkServerControlImpl networkServerControlImpl = null;

@PostConstruct
private void init() throws Exception {
    networkServerControlImpl = new NetworkServerControlImpl();
    networkServerControlImpl.start(new PrintWriter(System.out));
}

}
person Archimedes Trajano    schedule 30.04.2012

Я бы посоветовал воспользоваться тем фактом, что Derby может работать как встроенный сервер (т. Е. Запущенный в JVM-сервере приложений), так и сетевой сервер (т. Е. Обслуживая запросы клиентов, адресованные порт по умолчанию 1527 от локального хоста). Таким образом, вы получаете выгоду от повышения производительности встроенного режима, но при этом разрешаете доступ, например, из «ij» для администрирования данных во время работы сервера и с других экземпляров сервера через TCP / IP с подходящими настройками безопасности. В этой конфигурации Derby запускается и останавливается вместе с сервером приложений. Нет необходимости в дополнительных командах или явном коде запуска сервера для запуска дерби.

Конфигурация описана ниже для Glassfish 4 и derby / javaDB 10.10, но будет работать аналогично на других серверах и версиях. Вам действительно нужно настроить все пути ниже, чтобы они соответствовали вашей собственной установке.

.1. Сделайте классы дерби доступными для «общего» загрузчика классов сервера, добавив derby.jar, derbyclient.jar, derbynet.jar, derbytools.jar. Скопируйте банку, например, в JVM lib / ext вашего экземпляра сервера, например в C:\java\J2EESDK7U1\glassfish\domains\domain1\lib\ext

.2. Используя графический интерфейс администратора glassfish, добавьте следующие два свойства в Configurations> server-config> JVM settings> вкладку JVM Options: -Dderby.drda.startNetworkServer=true и -Dderby.system.home=C:/java/J2EESDK7U1/glassfish/databases. Первый сообщает Derby начать прослушивание в сетевом режиме при загрузке встроенного движка, второй предоставляет основной путь к вашим базам данных derby и необязательному файлу derby.properties (например, с вашими настройками безопасности в PROD)

.3. организовать загрузку сервером класса org.apache.derby.jdbc.EmbeddedDriver при запуске. Для этого можно, например, аннотировать EJB с помощью @Startup, а затем определить @PostConstruct аннотированный метод в EJB, например:

@PostConstruct
private void startup() {
  try { Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
      logger.info("Started DERBY in embedded+network mode");
  } catch (ClassNotFoundException e) {
      ... your error handling
  }
}

6 других советов по запуску см. на странице http://blog.eisele.net/2010/12/seven-ways-to-get-things-started-java.html

person berhauz    schedule 05.08.2015