Возникла необходимость тестирования миграции JMS-очередей (queue-типа), для этого сделана утилита для:
- отправки текстовых сообщений в очередь;
- получения сообщений из очереди.
Скомпилированный jar-файл здесь, а исходный код здесь.
Как настроить соединение с сервером:В jar-файле есть текстовый файл connection.properties - параметры соединения хранятся в нём.
Пример содержимого данного файла:
url=t3://192.168.2.130:7501,192.168.2.96:7502
user=weblogic
password=welcome1
queue=jms/Queue
connectionFactory=jms/JMSConnectionFactory
Как запустить:- Отправка сообщений в очередь, например:
java -classpath C:\Apps\SimpleClientForJMS.jar;C:\Apps\Oracle\Weblogic\10.3.5\wlserver_10.3\server\lib\weblogic.jar com.blogspot.stan1slav.jms.testing.SimpleJMSClient send 12
где C:\Apps\Oracle\Weblogic\10.3.5\wlserver_10.3\server\lib\weblogic.jar - путь к weblogic.jar;
12 - какое кол-во сообщений отправить в очередь.
- Забрать сообщения из очереди, например:
java -classpath C:\Apps\SimpleClientForJMS.jar;C:\Apps\Oracle\Weblogic\10.3.5\wlserver_10.3\server\lib\weblogic.jar com.blogspot.stan1slav.jms.testing.SimpleJMSClient receive 10
где 10 - сколько секунд ожидать получение новых сообщенийю
Ошибка:После создания домена с SOA Suite (может быть и в других случаях) не стартует SOA-INFRA, а в логе серверы фигурирует ошибка:
...
WARNING: unable to read logging configuration from file '/u01/WLS/user_projects/domains/jms_domain/config/fmwconfig/servers/soa_server1/logging.xml'; exception: oracle.core.ojdl.logging.LoggingConfigurationException: ODL-52049: cannot create instance of class 'oracle.dfw.incident.IncidentDetectionLogFilter': java.lang.ExceptionInInitializerError
oracle.core.ojdl.logging.LoggingConfigurationException: ODL-52049: cannot create instance of class 'oracle.dfw.incident.IncidentDetectionLogFilter': java.lang.ExceptionInInitializerError
at oracle.core.ojdl.logging.impl.LoggingConfigurationImpl.getInstance(LoggingConfigurationImpl.java:651)
at oracle.core.ojdl.logging.impl.LoggingConfigurationImpl.access$000(LoggingConfigurationImpl.java:104)
...
<Mar 26, 2012 3:46:31 PM MSD> <Critical> <WebLogicServer> <BEA-000286> <Failed to invoke startup class "DMS-Startup", java.lang.NoClassDefFoundError: oracle/dfw/impl/common/TempFileManager
java.lang.NoClassDefFoundError: oracle/dfw/impl/common/TempFileManager
at oracle.dfw.spi.portable.PortableDiagnosticsFrameworkProvider.init(PortableDiagnosticsFrameworkProvider.java:120)
...
WARNING: Error during preRegister for MBean oracle.dfw:name=Streamer,type=oracle.dfw.jmx.Streaming
java.lang.RuntimeException: java.lang.NoClassDefFoundError: oracle/dfw/impl/common/TempFileManager
at oracle.as.jmx.framework.generic.spi.interceptors.LoggingMBeanInterceptor.internalPreRegister(LoggingMBeanInterceptor.java:663)
...
Mar 26, 2012 3:46:33 PM oracle.as.jmx.framework.LoggerHelper log
WARNING: Error initializing MBean "oracle.dfw:name=Streamer,type=oracle.dfw.jmx.Streaming", declared in file "/u01/WLS/user_projects/domains/jms_domain/config/fmwconfig/servers/soa_server1/mbeans/dfw_mbeans.xml".
javax.management.RuntimeMBeanException: RuntimeException thrown in preRegister method
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.preRegisterInvoke(DefaultMBeanServerInterceptor.java:1012)
...
Mar 26, 2012 3:46:33 PM oracle.as.jmx.framework.LoggerHelper log
WARNING: Error during preRegister for MBean oracle.dfw:name=DiagnosticsConfig,type=oracle.dfw.jmx.DiagnosticsConfigMBean
java.lang.RuntimeException: java.lang.NoClassDefFoundError: oracle/dfw/impl/common/TempFileManager
at oracle.as.jmx.framework.generic.spi.interceptors.LoggingMBeanInterceptor.internalPreRegister(LoggingMBeanInterceptor.java:663)
...
...
WARNING: Error during postRegister for MBean oracle.adf.share.config:ApplicationName=soa-infra,name=ADFConfig,type=ADFConfig,Application=soa-infra
java.lang.RuntimeException: java.lang.NoClassDefFoundError: oracle/dfw/impl/common/TempFileManager
at oracle.as.jmx.framework.generic.spi.interceptors.LoggingMBeanInterceptor.internalPostRegister(LoggingMBeanInterceptor.java:703)
...
SEVERE: Failed to register config mbean for soa-infra.
SEVERE:
javax.management.RuntimeMBeanException: RuntimeException thrown in postRegister method
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.postRegisterInvoke(DefaultMBeanServerInterceptor.java:1037)
...
Caused by: java.lang.NoClassDefFoundError: oracle/dfw/impl/common/TempFileManager
at oracle.dfw.spi.portable.PortableDiagnosticsFrameworkProvider.init(PortableDiagnosticsFrameworkProvider.java:120)
...
Причина:Во временных директориях закончилось свободное место или нет привелений.
Вариант решения:- Остановить все Managed-серверы и Admin-сервер.
- Очистить временные директории и дать права записи:
$ cd /var/tmp/
$ rm -rf ora*
$ chmod 777 /var/tmp/
$ cd /tmp
$ rm -rf *
$ chmod 777 /tmp
- Запустить все Managed-серверы и Admin-сервер.
Клонирование Oracle Fusion Middleware 11g (SOA Suite, ODI, IDM, Webcenter и т.д.) условно можно разделить на две логические части:
- Клонирование Middleware Home;
- Клонирование доменов.
Существует несколько ограничений по клонированию:
- окружения должны быть идентичными, т.к. сервер назначения и сервер источник должны иметь одну и ту же операционную систему и разрядность (32 или 64);
- система назначения и система источник должны иметь одного и того же административного пользователя (например, weblogic), но пароли могут быть различны. После завершения клонирования можно изменить пользователя.
Клонирование СУБД и других внешних систем, которые используются в приложениях/композитах выходят за рамки данной статьи.
Клонирование Middleware Home
Типовая структура Middleware Home (MW_HOME):
- Останавливаем все сервера (AdminServer и ManagedServer-а) всех доменов (на источнике), которые используют клонируемый Middleware Home;
- На источнике перейти в директорию:
$ cd $MW_HOME/oracle_common/bin/
- Затем выполнить команду:
$ ./copyBinary.sh -javaHome /opt/jrockit-jdk1.6.0_26-R28.1.4-4.0.1/
-archiveLoc /tmp/mw_copy.jar -sourceMWHomeLoc /opt/Middleware/
где javaHome – директория c JDK;
archiveLoc – имя файла для экспорта;
sourceMWHomeLoc – директория в которой развернут MW_HOME.
- Скопировать файл экспорта с сервера источника на сервер назначения. А так же следующие файлы:
$ ls $MW_HOME/oracle_common/bin/pasteBinary.sh
$ ls $MW_HOME/oracle_common/jlib/cloningclient.jar
- Запускаем импорт Middleware Home на сервере назначения:
$ ./pasteBinary.sh -javaHome /u01/jdk1.6.0_30/
-archiveLoc mw_copy.jar -targetMWHomeLoc /u01/ofm
где javaHome – директория c JDK;
archiveLoc – имя файла для импорта;
targetMWHomeLoc – директория в которой будет развернут MW_HOME.
Клонирование доменов
- Проверяем, что все сервера домена (на источнике) для клонирования стартованы.
- Если в домене есть machine типа Unix Machine, то необходимо изменить её на тип Machine. Для этого необходимо:
$ cp $DOMAIN_HOME/config/config.xml $DOMAIN_HOME/config/config.xml.bkp
$ vi $DOMAIN_HOME/config/config.xml
Далее найти следующую строку (или строки если несколько машин):
<machine xsi:type="unix-machineType">
И заменить её (или их) на:
<machine>
После этого перезапустить AdminServer.
- На сервере источнике перейти в директорию:
$ cd $MW_HOME/oracle_common/bin/
- Затем выполнить на источнике команду:
$ ./copyConfig.sh -javaHome /opt/jrockit-jdk1.6.0_26-R28.1.4-4.0.1/
-archiveLoc /tmp/soa_domain.jar
-sourceDomainLoc /opt/user_projects/domains/soa_domain/
-sourceMWHomeLoc /opt/Middleware/
-domainHostName oracle-sb.tsretail.ru
-domainPortNum 9000
-domainAdminUserName weblogic
-domainAdminPassword /tmp/wlspwd.txt
где javaHome – директория c JDK;
archiveLoc – имя файла для экспорта;
sourceDomainLoc – директория домена;
sourceMWHomeLoc – директория в которой развернут MW_HOME;
domainHostName – хост домена;
domainPortNum – порт AdminServer-а;
domainAdminUserName – логин администратора;
domainAdminPassword – путь к текстовому файлу с паролем администратора.
- Скопировать файл экспорта с сервера источника на сервер назначения.
- На сервере назначения перейти в директорию:
$ cd $MW_HOME/oracle_common/bin/
- Запускаем генерацию плана переноса домена на сервере назначения:
$ ./extractMovePlan.sh -javaHome /u01/jdk1.6.0_30
-archiveLoc /home/weblogic/clone_domain/soa_domain.jar
-planDirLoc /home/weblogic/clone_domain/plan
где javaHome – директория c JDK;
archiveLoc – имя файла для экспорта;
planDirLoc – директория в которую будет сгенерирован план.
- Редактируем сгенерированный план переноса:
$ vi /home/weblogic/clone_domain/plan/moveplan.xml
Следует обратить внимание на создание текстовых файлов содержащих пароли к Data Source-ам и указание пути к файлу с паролем для каждого конкретного Data Source-а.
- Если требуется, то можно и изменить параметры адаптеров, композитов и деплоймент планов в соответствующих директориях:
$ /home/weblogic/clone_domain/plan/
$ ls -l
total 312
drwxr-xr-x 2 weblogic app 4096 Mar 14 10:47 adapters
drwxr-xr-x 2 weblogic app 12288 Mar 14 10:47 composites
drwxr-xr-x 2 weblogic app 4096 Mar 14 10:48 deployment_plans
-rw-r--r-- 1 weblogic app 274543 Mar 14 10:44 moveplan.xml
- Запускаем импорт домена на сервере назначения:
$ ./pasteConfig.sh -javaHome /u01/jdk1.6.0_30
-archiveLoc /home/weblogic/clone_domain/soa_domain.jar
-movePlanLoc /home/weblogic/clone_domain/plan/moveplan.xml
-targetDomainLoc /u01/user_projects/domains/clonned_soa_domain
-targetMWHomeLoc /u01/ofm/
-domainAdminPassword /home/weblogic/clone_domain/plan/domainpwd.txt
где javaHome – директория c JDK;
archiveLoc – имя файла для экспорта;
sourceDomainLoc – директория домена;
movePlanLoc – имя файла плана переноса;
targetDomainLoc – директория в которую импортируется домен;
targetMWHomeLoc – директория в которой развернут MW_HOME;
domainAdminPassword – путь к текстовому файлу с паролем администратора.
Ошибка:При старте Weblogic-сервера возникает следующая ошибка и происходит ошибка старта (сервер переходит в статус FAILED):
<BEA-000386> <Server subsystem failed. Reason: java.lang.AssertionError: Could not obtain the localhost address. The most likely cause is an error in the network configuration of this machine.
java.lang.AssertionError: Could not obtain the localhost address. The most likely cause is an error in the network configuration of this machine.
at weblogic.server.channels.AddressUtils$AddressMaker.getLocalHost(AddressUtils.java:38)
at weblogic.server.channels.AddressUtils$AddressMaker.<clinit>(AddressUtils.java:33)
at weblogic.server.channels.AddressUtils.getIPAny(AddressUtils.java:154)
at weblogic.protocol.configuration.ChannelHelper.checkConsistency(ChannelHelper.java:61)
at weblogic.server.channels.ChannelService.start(ChannelService.java:207)
at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Caused By: java.net.UnknownHostException: vm1.mydomain.com : vm1.mydomain.com
at java.net.InetAddress.getLocalHost(InetAddress.java:1360)
at weblogic.server.channels.AddressUtils$AddressMaker.getLocalHost(AddressUtils.java:36)
at weblogic.server.channels.AddressUtils$AddressMaker.<clinit>(AddressUtils.java:33)
at weblogic.server.channels.AddressUtils.getIPAny(AddressUtils.java:154)
at weblogic.protocol.configuration.ChannelHelper.checkConsistency(ChannelHelper.java:61)
at weblogic.server.channels.ChannelService.start(ChannelService.java:207)
at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Причина:По имени хоста (выделено
синим выше) на котором напускается Weblogic-сервер невозможно получить его IP-адрес.
Решение: Варианты решения:
- Прописать в DNS
- Прописать в файл /etc/hosts