Показаны сообщения с ярлыком Java. Показать все сообщения
Показаны сообщения с ярлыком Java. Показать все сообщения

понедельник, 4 января 2010 г.

J2ME на FreeBSD 8.0 [amd64]

Вчера разбирался с J2ME на FreeBSD 8.0 [amd64] чисто из спортивного интереса.

В портах есть Sun WTK 2.2. Он ставится, но не работает под 64-битной Sun JDK 1.6: при запуске эмулятора телефона в KToolbar выводится ошибка работы графической библиотеки.

Проблему решил следующим образом.
Временно снёс нативный JDK1.6. Запустил линуксулатор (эмулятор Linux 2.6.16 + linux_base-f10); поставил 32-битный java/linux-sun-jdk16; установил java/sun-wtk с небольшой шлифовкой его конфигов (переименовал каталог wtklib/FreeBSD в wtklib/Linux); заново установил нативный JDK (64-битный). Оба JDK сосуществуют без проблем — при необходимости нужная JVM выбирается через панель управления настройками javaws. WTK 2.2 работает с собственными настройками: пути к линуксовой JVM автоматически прописаны в скрипты запуска его утилит при инсталляции.

Sun JavaME SDK 2.5.2 похожим образом запустить не удалось — KToolbar при запуске эмулятора пишет об ошибке в распределении памяти shm.

четверг, 13 августа 2009 г.

Diablo JDK 1.6: ошибка в VM

Информация о системе


> uname -rsm
FreeBSD 8.0-BETA2 amd64
Дерево портов обновлено.

Инсталляция и неудачный запуск


% portinstall -p java/diablo-jdk16
...
===> Registering installation for diablo-jdk-1.6.0.07.02_5
...
===> Building package for diablo-jdk-1.6.0.07.02_5
...
===> Cleaning for diablo-jdk-1.6.0.07.02_5
---> Cleaning out obsolete shared libraries
[Updating the pkgdb in /var/db/pkg ... - 444 packages found (-0 +1) . done]
% rehash
% java -version
Error occurred during initialization of VM
Unable to load ZIP library: /usr/local/diablo-jdk1.6.0/jre/lib/amd64/libzip.so
%

Решение проблемы

% echo "libz.so.4 libz.so.5 #for diablo-jdk1.6" >> /etc/libmap.conf
% rehash
% java -version
Diablo Java(TM) SE Runtime Environment (build 1.6.0_07-b02)
Diablo Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode)
%

среда, 15 июля 2009 г.

Firefox 3.5 и Java-plugin

Чтобы включить поддержку исполнения апплетов в firefox 3.5 на платформе [amd64], нужно проделать ряд несложных действий:

1. Создать символическую ссылку на библиотеку libjavaplugin_oji.so JRE в каталоге плагинов firefox:

% cd /usr/local/lib/firefox3/plugins/
% ln -s /usr/local/jdk1.6.0/jre/plugin/amd64/ns7/libjavaplugin_oji.so .

2. Активировать плагин в настройках Дополнений браузера.

После этого браузер может загружать и запускать java-апплеты.

среда, 14 января 2009 г.

JSF для Tomcat

JSF входит в поставку любого JEE-сервера приложений, но не в ходит в Tomcat, так как Tomcat только лишь контейнер Web-приложений, но никак не JEE-сервер.

Однако можно заставить Tomcat работать как полноценный сервер JSF-приложений. И сейчас я расскажу как это сделать по шагам. (Будем считать, что у вас уже установлен и работает Apache Tomcat 6.0).


  1. Загрузите архив mojarra-1.2_09-b02-FCS-binary.zip с сайта https://javaserverfaces.dev.java.net/
    Распакуйте из этого архива библиотеки jsf-api.jar и jsf-impl.jar и положите их в каталог CATALINA_HOME/lib.

  2. Перенесите библиотеки jstl.jar и standard.jar из каталога CATALINA_HOME/webapps/examples/WEB-INF/lib в каталог CATALINA_HOME/lib.

  3. Создайте тестовое JSF-приложение.
    Структура каталогов:

    CATALINA_HOME/webapps/loginjsf
    |-WEB-INF
    | |-classes
    | | |-com
    | | |-corejsf
    | | |-UserBean.class
    | |-web.xml
    | |-faces-config.xml
    |-index.html
    |-index.jsp
    |-welcome.jsp

    Исходник UserBean.java:

    package com.corejsf;

    public class UserBean {
    private String name;
    private String password;

    // PROPERTY: name
    public String getName() { return name; }
    public void setName(String newValue) { name = newValue; }

    // PROPERTY: password
    public String getPassword() { return password; }
    public void setPassword(String newValue) { password = newValue; }
    }

    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/web.xml:

    <?xml version="1.0"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">
    <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    </web-app>


    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/faces-config.xml:

    <?xml version="1.0"?>
    <faces-config xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
    version="1.2">
    <navigation-rule>
    <from-view-id>/index.jsp</from-view-id>
    <navigation-case>
    <from-outcome>login</from-outcome>
    <to-view-id>/welcome.jsp</to-view-id>
    </navigation-case>
    </navigation-rule>

    <managed-bean>
    <managed-bean-name>user</managed-bean-name>
    <managed-bean-class>com.corejsf.UserBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>
    </faces-config>

    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/index.html:

    <html>
    <head>
    <meta http-equiv="Refresh" content= "0; URL=index.faces"/>
    <title>Start Web Application</title>
    </head>
    <body>
    <p>Please wait for the web application to start.</p>
    </body>
    </html>

    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/index.jsp:

    <html>
    <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <f:view>
    <head>
    <title>A Simple JavaServer Faces Application</title>
    </head>
    <body>
    <h:form>
    <h3>Please enter your name and password.</h3>
    <table>
    <tr>
    <td>Name:</td>
    <td>
    <h:inputText value="#{user.name}"/>
    </td>
    </tr>
    <tr>
    <td>Password:</td>
    <td>
    <h:inputSecret value="#{user.password}"/>
    </td>
    </tr>
    </table>
    <p>
    <h:commandButton value="Login" action="login"/>
    </p>
    </h:form>
    </body>
    </f:view>
    </html>

    Содержимое файла
    CATALINA_HOME/webapps/loginjsf/WEB-INF/welcome.jsp:

    <html>
    <%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

    <f:view>
    <head>
    <title>A Simple JavaServer Faces Application</title>
    </head>
    <body>
    <h:form>
    <h3>
    Welcome to JavaServer Faces,
    <h:outputText value="#{user.name}"/>!
    </h3>
    </h:form>
    </body>
    </f:view>
    </html>

  4. Откройте строку адреса http://127.0.0.1:8080/loginjsf/ в окне броузера и убедитесь, что JSF-приложение работает.


Литература



Дополнительно


Включить по умолчанию отдачу контента в кодировке UTF-8 можно в server.xml Tomcat'а:

< connector
executor="tomcatThreadPool"
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8"
useBodyEncodingForURI="utf-8"/>

вторник, 14 октября 2008 г.

Eclipse Ganymede 3.4.1 и Sun WTK 2.2

Ну наконец-то оно собралось и заработало.


Встречаем: порт ports/java/eclipse-devel

суббота, 27 сентября 2008 г.

Управление расширениями Eclipse

Среда Eclipse IDE имеет собственные средства управления плагинами. Можно сказать, что она вся из себя состоит из них.

Вернее, она состоит из трёх частей:
• Инструментальные средства разработки на языке Java — Java Development Tool (JDT);
• Среда разработки модулей расширения — Plug-in Development Environment (PDE);
• Платформа — Eclipse Platform.

Это три основные функциональные возможности, каждая из которых группирует в себе те или иные модули расширения. Метафора функциональных возможностей описывает один или более взаимосвязанных модулей расширения или вложенных функциональных возможностей, что критически важно для распространения и обновления программных продуктов на основе Eclipse, разрабатываемых различными компаниями. В случае с Eclipse IDE эти три функциональные возможности объединены в одну Eclipse Project SDK (и неотключаемы из среды).

Чтобы настроить среду на производственный лад, и не включать в неё все возможные расширения какие только есть на свете (а в разработке Eclipse участвуют тысячи разработчиков и компаний по всему миру), нужно знать, чем конкретно ты занимаешься и, соответственно, подбирать соответствующий инструментарий под задачу. Репозитории проекта Eclipse очень обширны и на сегодняшний день включают сотни модулей расширений и десятки функциональных возможностей. В мастере Software Updates/Find and Install из среды можно получить доступ к любому онлайновому репозиторию расширений Eclipse по всему миру. То есть можно, не выходя из среды, скачать необходимые расширения и таким образом настроить среду под себя как нужно. Другой путь: скачать готовый дистрибутив одним пакетом с главного сайта www.eclipse.org для решения какой-то одной задачи.


Недостатки «готового» дистрибутива

Всё есть и всё тормозит. Много ненужных расширений, которые никогда не понадобятся в работе, а ресурсы на себя отнимают. Обновлять такую махину весьма накладно да и не нужно.


Недостатки «онлайновой» среды

Каждый раз при поиске новых и обновлении установленных плагинов среда скачивает из интернета порядка 20МБ «оверхеда» в худшем случае. На небольших скоростях интернета невозможно по-нормальному собрать среду Eclipse из плагинов, ориентируясь исключительно на способности Eclipse (хотя с каждой новой версией среды оверхед всё меньше и меньше). Из-за ошибок обновления (бывает: что-то не срослось) приходится расширение качать заново или полностью переустанавливать среду — в последнем случае всё, что скачал непосильным трудом, всё утрачивается. Да и со временем подкаталоги plugins и features Eclipse превращаются в форменную "помойку", которая тормозит среду и делает её весьма неустойчивой в работе из-за наложенных старых и новых расширений. Кроме того, в этом случае затрудняется межплатформенная переносимость модулей расширения — не так просто выбрать и перенести автоматически скачанные модули расширений на другой компьютер в другую систему.


Выход есть

Разработчики модулей расширений распространяют их в архивах, чаще всего в ZIP, допускающие интеграцию в среду. Eclipse, в свою очередь, позволяет ручную установку функциональных возможностей во внешние (по отношению к среде) каталоги, не захламляя подкаталоги самой среды — plugins и features.


Что это значит?

Модули расширения распространяются в виде архивов ZIP и не включают в себя файлы с определением функциональных возможностей. Но, как правило, такой архив и есть та самая функциональная возможность, которую необходимо интегрировать в среду. Нам же предлагается скачать архив (архивы — не забыв о возможных зависимых расширениях) по ссылке в браузере, либо по полученному по почте URL сохранить его(их) в надёжном месте.


Что делать?

Всё просто. Обычно структура каталогов архива с модулями расширения повторяет структуру каталогов среды, то есть там есть подкаталоги plugins и features. Ни в коем случае эти каталоги нельзя копировать в каталог среды Eclipse — среда их никогда не найдёт!

Делаем следующее: создаём отдельный каталог и разархивируем в него содержимое архива. Далее, в основном каталоге среды Eclipse отыскиваем файл ".eclipseproduct" и копируем его под именем ".eclipseextension" в подкаталог распакованного архива, чтобы этот файл был в одном каталоге с каталогами plugins и features новых модулей расширения. Осталось подключить получившуюся функциональную возможность к среде Eclipse.

Открываем менеджер конфигурации из меню среды: Help -> Software Updates -> Manage Configuration, и из всплывающего меню над пунктом "Eclipse SDK" выбираем: Add -> Extension Location, далее указываем каталог с файлом .eclipseextension. Среда подхватывает новые модули расширения и после рестарта в менеджере конфигурации нужно убедиться, активированы ли они. А в диалоге About среды, нажав на соответствующие кнопки, посмотреть на установленные плагины и features.


Если не работает

Бывает, что новейшие версии модулей расширения всё-таки несовместимы с используемой версией среды Eclipse, и из-за этого они не включаются — в этом случае нужно просто закрыть Eclipse, удалить каталог с этими модулями расширения (это не повредит самой среде). Далее точнее выбрать версию расширения и скачать нужный архив. Затем проделать описанную выше операцию снова.

Иногда устанавливаемые расширения зависят от других расширений. И при отсутствии последних не включаются:



Решение этой проблемы тоже простое: надо сначала установить и проверить, включены ли все необходимые "базовые" расширения, а потом включить всё остальное.


Что в итоге

В итоге мы имеем: котлеты — отдельно, мухи — отдельно в общем-то "чистую" среду, независимо от установленных расширений, всегда готовую к самостоятельному обновлению; и плагины, тоже в общем-то, в какой-то степени независимые от среды, которые легко обновить и перестроить.

вторник, 8 апреля 2008 г.

Apache Tomcat 6.0 во FreeBSD 7.0

Apache Tomcat как Web-сервер? Почему нет?

Контейнер JavaServer Pages и Java Servlets по совместительству может выполнять функции Web-сервера. То есть нативные Web-сервера, получается, не так уж нужны, учитывая потенциальную небезопасность кода C/C++, на котором они написаны.

Предпосылки

Итак, Apache Tomcat, написанный на 100% pure-Java ЯП, вполне способен справиться с возложенными на него функциями Web-сервера.

Пока же мне нужно ввести в опытную эксплуатацию Web-сервер на домашней машине — Локалхосте — как любят выражаться прадвинутые одмины. Ну что ж, за дело!

Решение

1. Установка Apache Tomcat 6.0 во FreeBSD не должна вызвать трудностей. Порт ports/www/tomcat6 устанавливается обычным образом.

2. Для обеспечения удалённого управления Apache Tomcat нужно отредактировать файл /usr/local/apache-tomcat6.0/conf/tomcat-users.xml
Задание аккаунта менеджера сервера:

< ?xml version='1.0' encoding='utf-8'?>
< tomcat-users>
< role rolename="manager"/>
< user username="tomadmin" password="secretword" roles="manager"/>
< /tomcat-users>


3. Чтобы Apache Tomcat прослушивал порт 8080 и обеспечивал обработку запросов через пул, необходимо в файле /usr/local/apache-tomcat6.0/conf/server.xml раскомментировать блок

< Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />


Возможно, также понадобиться добавить в файл /usr/local/apache-tomcat6.0/bin/catalina.sh переменные окружения JAVA_HOME и CATALINA_HOME с абсолютными путями к каталогам JDK и Tomcat, соответственно, если Tomcat почему-либо не может быть запущен системой. Можно также задать переменную CATALINA_TMPDIR с каталогом /tmp в качестве местоназначения, чтобы переопределить путь по умолчанию $CATALINA_BASE/temp. Мне понадобилось внести в файл catalina.sh только эти две строки с переменными:

JAVA_HOME=/usr/local/jdk1.6.0/
CATALINA_TMPDIR=/tmp


4. Автозапуск Apache Tomcat можно обеспечить, если в файл /etc/rc.conf прописать следующую строчку:

tomcat60_enable="YES"


Также можно прописать дополнительные опции:

tomcat60_java_opts="-server"
tomcat60_java_home="/usr/local/jdk1.6.0"

Опция -server обеспечивает запуск Tomcat с серверной версией JVM, которая отличается более агрессивным сборщиком мусора GC, несколько другой стратегией управления памятью и JIT. Вторая строчка задаёт домашний каталог рабочего JDK.

После этого можно перезагрузить машину и проверить, запустился ли сервер:

> sockstat
...
www java 697 28 tcp4 *:8180 *:*
www java 697 30 tcp4 *:8080 *:*
www java 697 39 tcp4 *:8009 *:*
www java 697 40 tcp4 127.0.0.1:8005 *:*
...

Как видите, Web-сервер запущен и прослушивает порты 8180, 8080, 8009 и 8005.

Чтобы просмотреть стартовую страничку Apache Tomcat, в любом браузере на локальной машине достаточно ввести URL:

http://127.0.0.1:8080/


5. Apache Tomcat запускается и прослушивает входящие соединения на непривелегированных интернет-портах, что несколько неуклюже для настоящего Web-сервера. Запуск Tomcat на порту 80 возможен только от имени root'а.

Решение проблемы прослушивания служебного порта HTTP :80 Tomcat возможно с использованием механизма перенаправления IP-пакетов, доступного в IPFW и PF. Я выбрал PF в качестве перенаправителя пакетов со служебных портов на порты, которые прослушивает Tomcat в обычном состоянии.

PF доступен в системе в виде модуля ядра. Для автоматического запуска PF при старте системы необходимо в файле /etc/rc.conf прописать следующие строчки:

pf_enable="YES"
pf_rules="/etc/pf.conf"


Запуск пакетного фильтра в работающей системе осуществляется командой:

% pfctl -e

(Останов, соответственно — pfctl -d).

В файл /etc/pf.conf достаточно добавить правила перенаправления для известных портов (всего две строчки):

rdr on nve0 proto tcp from any to any port 80 -> 127.0.0.1 \
port 8080
rdr on nve0 proto tcp from any to any port 81 -> 127.0.0.1 \
port 8081

(здесь: nve0 — сетевой интерфейс, на котором ожидаются HTTP-соединения с Tomcat)

Проверка новых правил на пакетном фильтре выполняется командой:

% pfctl -nf /etc/pf.conf

И, если нет никаких ошибок в правилах, их можно активировать:

% pfctl -f /etc/pf.conf


Apache Tomcat будет откликаться из Интернет на URL вида:
http://<внешний inet-address>/


Возможные проблемы

Проблемы могут возникнуть с выполнением JSP из-за невозможности изменения содержимого рабочего каталога /usr/local/apache-tomcat6.0/work/, так как Tomcat имеет непривелегированные права пользователя www.
В этом случае достаточно удалить содержимое каталога командой:
% rm -rf /usr/local/apache-tomcat6.0/work/*

Впоследствии кэш будет создан заново самим Tomcat без особых проблем.

Также встречалась проблема с невозможностью ответа сервера Tomcat на клиентский http-запрос. Пересборка Sun J2SE JDK 1.6 из порта ports/java/jdk16 без опции поддержки IPv6 решило данную проблему.

Послесловие

Пакетный фильтр PF, входящий в поставку FreeBSD, пришёл из OpenBSD. Подробнее о его устройстве и конфигурировании можно почитать в соответствующем разделе официального сайта проекта OpenBSD.

Безусловно, эта статья не претендует на точность изложения всех аспектов развёртывания и конфигурирования Apache Tomcat и PF, а лишь отражает общие принципы работы этой связки.

Пока на этом всё.

Sun WTK 2.2 в окружении JDK 1.6 на FreeBSD 7.0

Комплект разработчика Sun WTK портировался и тестировался для работы в Linux-окружении JDK версии 1.4.2 и выше. Его удавалось завести под Diablo JDK 1.5, нативной версией Sun J2SE SDK 1.5, но при этом нужно было обеспечить поддержку Linux ABI со стороны ядра FreeBSD — загружать модуль linux.ko и держать каталог /usr/compat/linux с так называемой linux_base.

Все компоненты, необходимые для работы эмулятора определены, осталось правильно их настроить.

Оказалось, что устаревшая версия Diablo JDK 1.5 в принципе заменима новой версией Sun J2SE SDK 1.6 из порта ports/java/jdk16 и не надо держать две версии JDK. Так что проблема запуска эмулятора Sun WTK упирается только в используемую linux_base, а с ней не так просто.

В дистрибутив FreeBSD 7.0-RELEASE входит бинарный пакет linux_base, который устанавливается по желанию. Я устанавливал систему с boot-only CD по сети, так что от пакета linux_base пришлось отказаться до последнего момента, когда понадобилось поработать с эмулятором Sun WTK. Выяснил, что из доступного набора дистрибутивов linux_base, которые можно поставить на FreeBSD из соответствующих портов ветки ports/emulators, оригинальным бинарным пакетом является сборка из порта ports/emulators/linux_base-fc4. Чтобы обеспечить работу графических Linux-приложений в Xorg под FreeBSD, нужно также инсталлировать набор библиотек из порта ports/x11/linux-xorg-libs.

Итак, последовательность шагов по установке ПО определена весьма чётко:
% cd /usr/ports/java/jdk16 && make install clean && rehash
% cd /usr/ports/java/sun-wtk && make install clean
% kldload linux.ko
% cd /usr/ports/emulators/linux_base-fc4 && make install clean && rehash
% cd /usr/ports/x11/linux-xorg-libs && make install clean && rehash
% mount -t linprocfs linprocfs /compat/linux/proc

После этого можно открыть ktoolbar и запустить демонстрационные j2me-приложения из поставки Sun WTK. Для создания и редактирования проектов в самом ktoolbar необходимо иметь соответствующие права доступа к подкаталогам /usr/local/sun-wtk.

Чтобы запускать поддержку Linux ABI при старте системы, необходимо в файл /etc/rc.conf добавить строчку:
linux_enable="YES"

В конец файла /etc/fstab добавить строчку автомонтирования файловой системы linuxprocfs:
...
linprocfs /compat/linux/proc linprocfs rw 0 0


В общем, на этом проблемы с запуском можно считать решёными.

четверг, 11 октября 2007 г.

Sun WTK в окружении JDK 1.6 на FreeBSD



Препосылки
Приложения из пакета Sun WTK 2.2, установленные из Коллекции портов FreeBSD, не работают должным образом. Так, например, при запуске любого тестового J2ME-приложения (из числа демонстрационных, входящих в комплект поставки Sun WTK) в KToolbar возможно одно из следующих сообщений об ошибке:
1) Ошибка обращения к нативной библиотеке libXpm;
2) Ошибка LIME номер такой-то;
3) Ошибка компиляции из-за неверной кодировки строк символов в исходниках.

С самого начала было ясно, что комплект разработчика Sun WTK портировался и тестировался для работы в Linux-окружении JDK версии 1.4.2 и выше. Странно, что ранее его удавалось завести под Diablo JDK 1.5, нативной версией Sun J2SE SDK 1.5. С недавних пор работа эмулятора Sun WTK вызывала серьёзные нарекания. Возможно, это как-то связано с существенными изменениями в ядре операционной системы и переходу на новую версию оконной системы Xorg 7.2, а затем и на Xorg 7.3. Кардинальные обновления Sun WTK 2.2 не наблюдались — по-прежнему использовался дистрибутив для Linux, зависимый по сборке от нативной Diablo JDK 1.5.

Пути решения
Путь решения оказался самым элементарным: очистить систему от установленных JDK, попробовать установить Sun WTK, заставив его запускаться в окружении Linux-версии Sun JDK из Коллекции портов. Далее накатить нативную версию Sun JDK для обеспечения эффективной работы остальных java-приложений в системе. Благо, FreeBSD позволяет работать нативным Linux-приложениям, используя режим трансляции API-вызовов через механизм ABI.

Сначала был установлен пакет linux-sun-jdk-1.4.2.13. В нём Sun WTK работал стабильно, но нагрузка на процессор была близка к 100% при подозрительно-большом числе (10-15 штук!) процессов java, которые не реагировали на команду killall java даже от имени root'а — очень странная и неоптимальная конфигурация для работы. От этого пришлось отказаться.

Снова очистка и перезагрузка системы.

Решение
Далее я описываю решение, которое найдено умозрительным путём.

1. Установить Linux Sun JDK 1.6:
% cd /usr/ports/java/linux-sun-jdk16
% make rmconfig clean install clean

В начале процесса установки появится просьба скачать необходимые файлы с сайта java.sun.com и скопировать их в каталог ports/distfiles, при этом ссылки на страницы загрузки будут даны.

2. Примонтировать файловую систему Linux ProcFS:
% mount -t linprocfs linprocfs /compat/linux/proc
Без этой команды пакет разработчика Sun WTK не соберётся.
Вообще же, строчку:
linprocfs /compat/linux/proc linprocfs rw 0 0
следует добавить в файл /etc/fstab, так как без этого эмулятор Sun WTK откажется запускаться и выбросит одну из вышеприведённых ошибок.

3. Собрать Sun WTK:
% cd /usr/ports/java/sun-wtk
% make rmconfig clean install clean

После этого надо обеспечить пакет Sun WTK конфигурацией для функционирования в окружении Linux JDK:
% mkdir /usr/local/sun-wtk/wtklib/Linux
% cp /usr/local/sun-wtk/wtklib/FreeBSD/* /usr/local/sun-wtk/wtklib/Linux/


4. Можно перезагрузить систему командой:
% shutdown -r now

5. Собрать и инсталлировать Diablo JDK 1.5 для сборки нативного Sun JDK 1.6:
% cd /usr/ports/java/diablo-jdk15
% make rmconfig clean install clean

В начале процесса установки появится просьба скачать необходимые файлы с соответствующих сайтов и скопировать их в каталог ports/distfiles, при этом ссылки на страницы загрузки будут даны. Впоследствии Diablo JDK 1.5 можно удалить, так как он нужен лишь на этапе сборки нативного Sun JDK 1.6 и офисного пакета OpenOffice.

6. Собрать и инсталлировать Sun JDK 1.6:
% cd /usr/ports/java/jdk16
% make rmconfig clean install

Опять же, в начале процесса установки появится просьба скачать необходимые файлы с соответствующих сайтов и скопировать их в каталог ports/distfiles, при этом ссылки на страницы загрузки будут даны. Здесь намеренно не используется команда make clean, так как при последующем удалении пакета Diablo JDK 1.5 последний уносит с собой в небытие некоторые нативные библиотеки, без которых невозможна работа сетевых Java-приложений и апплетов в Web-браузере, а значит необходимо будет либо собрать с нуля Sun JDK 1.6 (установленный Sun JDK 1.6 способен пересобрать сам себя), либо воспользоваться уже откомпилированным материалом.

7. Можно удалить пакет Diablo JDK 1.5, чтобы освободить место на диске:
% cd /usr/ports/java/diablo-jdk15
% make deinstall clean

и реинсталлировать Sun JDK 1.6:
% rehash
% cd /usr/ports/java/jdk16
% make deinstall install clean


9. Проверить версию рабочей JVM:
% java -version
Она должна быть:
java version "1.6.0_01-p1"
Java(TM) SE Runtime Environment (build 1.6.0_01-p1-root_11_oct_2007_02_04-b00)
Java HotSpot(TM) Client VM (build 1.6.0_01-p1-root_11_oct_2007_02_04-b00, mixed mode)


Итак, теперь в системе установлено две версии Sun JDK 1.6: одна для работы специфических Linux-приложений, нуждающихся в нативной поддержке Linux ABI; другая — нативный комплект разработчика для работы любых Java-приложений в окружении нативной JRE.

Собственно, на этом всё.

среда, 29 августа 2007 г.

NetBeans IDE 5.5.1 во FreeBSD 6.2



Загрузил с сайта netbeans.org мультиплатформенный архив netbeans-5_5_1.tar.bz2, распаковал его в домашний каталог и запустил.

Обычная тема Ocean Swing Look&Feel мне не очень нравится, поэтому пришлось слегка подредактировать файл netbeans/etc/netbeans.conf на предмет другого визуального оформления среды разработки, заодно увеличив её требования по памяти -- у меня простаивает порядка полтора гигабайта ОЗУ. Так же сменил виртуальную машину, указав каталог инсталляции Sun JDK1.6.0 вместо несколько устаревшей Diablo-JDK1.5 (которая нужна только Eclipse 3.2.2):

netbeans_default_options="-J-Xms32m -J-Xmx512m -J-XX:PermSize=32m -J-XX:MaxPermSize=160m -J-Xverify:none -J-Dapple.laf.useScreenMenuBar=true -J-XX:+UseConcMarkSweepGC -J-XX:+CMSClassUnloadingEnabled -J-XX:+CMSPermGenSweepingEnabled --laf com.sun.java.swing.plaf.gtk.GTKLookAndFeel -J-Dfile.encoding=UTF-8"

netbeans_jdkhome="/usr/local/jdk1.6.0"


Среда преобрела такой же вид как у всех нативных Gtk-приложений. Скорость реакции интерфейса, замечу, реализованного целиком на Swing без нативных виджетов, несколько удивила -- так же проворно, как у интерфейса Eclipse, который построен на полунативной библиотеке SWT!

О работе с проектами



С ходу нельзя создать новый пустой проект Java-приложения как в Eclipse, но можно импортировать в среду проект, содержащий готовый Ant-скрипт (файл build.xml), так же можно построить проект на основе демонстрационных приложений, идущих вместе с NetBeans. Я выбрал первый вариант, так как все мои последние проекты не привязаны к какой-то конкретной среде разработки и идут исключительно с Ant-скриптом. Импорт существующего проекта удался без редактирования. Ant-скрипт проекта стал управляющим скриптом сборки и запуска приложения внутри среды.

NetBeans Update Center



Посмотрел, что может предложить сервис автоматического обновления модулей среды. Web-проекты с Ajax, API-документация, импортёры проектов из JBuilder и Eclipse, Sun Java System WebServer 7.0 и AVK, Apache Derby Database, модули для работы с системами контроля версий VCS и VSS, различные библиотеки и т.д. Набор впечатляет, но не то, что необходимо мне -- JRuby нет, а шестая версия NetBeans пока сыровата.

Ну да ладно.

среда, 8 августа 2007 г.

Sun JDK 1.6.0 на FreeBSD



Порт: /usr/ports/java/jdk16

Для инсталляции требует установленного linux-sun-jdk15 или diablo-jdk15 в качестве бутстрапа. На машынке было у меня установлено Diablo-JDK 1.5.0, так что пришлось только (вручную! Из-за лицензионных ограничений) скачать исходники, ссылки на странички которых любезно предоставил установщик make. Пришлось скачать порядка 80Мб. За сорок минут всё собралось и установилось.