пятница, 27 июня 2014 г.

JDK Linux

JDK Linux

Вот уж точно статья только для себя,потому что постоянно с этим что то не так,но мб и еще кому пригодится.
Собственно. Если кто не в курсе, то в какой-то момент компаниякоторуюнельзяназывать изменила лицензионное соглашение для JDK так, что её стало невозможно распространять через линуксячьи репозитории.
OpenJDK, который остался в репозиториях — полный шлак и не умеет даже запускать KVM-ные апплеты. Очень многие.
Тем временем jdk делает огромные шаги, вышла уже 8я версия (шустрее, выше, сильнее, а главное, что нет проблем с доступом к ipmi/ip-kvm вообще никаких).
Вот только процесс установки теперь для убунтоводов несколько нетривиален.

По-хорошему нужно пойти сюда, и ткнуть «download» под нужной версией. 
Когда мы получим файл — можно наконец-то распрощаться с оракловым говносайтом и спокойно идти в консольку.
У меня получился файл jdk-7u4-linux-x64.tar.gz
user@host:~$ tar -xvf jdk-7u4-linux-x64.tar.gz
Положим это отродие в правильное с его точки зрения место:
root@host:~# mv jdk1.7.0_04 /usr/lib/jvm/
Создадим переменную, чтобы мануал остался универсальным для любых версий (потом всё следует делать в том же терминале):
root@host:~# jdir=jdk1.7.0_04
# здесь после равно нужно указать название каталога, которому мы делали mv
Теперь создадим правильные симлинки внутри системы:
root@host:~# update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/$jdir/bin/javac 1
root@host:~# update-alternatives --install /usr/bin/java java /usr/lib/jvm/$jdir/bin/java 1
root@host:~# update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/$jdir/bin/javaws 1
root@host:~# update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/$jdir/bin/jar 1
Теперь самое время убедить нашу убунту в том, что следует использовать именно 7ю jdk, которую мы только что «установили». Если других версий jdk вы не ставили — то вам просто для успокоения совести следует ввести следующие 3 команды. Если ставили — то нам зададут всякие глупые вопросы. На них придется ответить:
root@host:~# update-alternatives --config javac
There are 2 choices for the alternative javac (providing /usr/bin/javac).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1051 auto mode
1 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1051 manual mode
2 /usr/lib/jvm/jdk1.7.0_04/bin/javac 1 manual mode

Press enter to keep the current choice[*], or type selection number: 2
root@host:~# update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1051 auto mode
1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1051 manual mode
2 /usr/lib/jvm/jdk1.7.0_04/bin/java 1 manual mode

Press enter to keep the current choice[*], or type selection number: 2
root@host:~# update-alternatives --config javaws
There is only one alternative in link group javaws: /usr/lib/jvm/jdk1.7.0_04/bin/javaws
Nothing to configure.
root@host:~# update-alternatives --config jar
...
Теперь проверим, что мы всё настроили верно:
user@host:~$ ls -la /etc/alternatives/{java,javac,javaws,jar}
lrwxrwxrwx 1 root root 33 May 23 01:40 /etc/alternatives/java -> /usr/lib/jvm/jdk1.7.0_04/bin/java
lrwxrwxrwx 1 root root 34 May 23 01:39 /etc/alternatives/javac -> /usr/lib/jvm/jdk1.7.0_04/bin/javac
lrwxrwxrwx 1 root root 35 May 23 00:29 /etc/alternatives/javaws -> /usr/lib/jvm/jdk1.7.0_04/bin/javaws
...
user@host:~$ java -version
java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)
Ну и осталась мелочь — рассказать нашим браузерам, что у нас есть java-плагин к ним (это актуально почти для всех браузеров, для FF и Chrome/Iron/Chromium — точно):
root@host:~# username=set_your_username_here; su ${username} -c "mkdir ~${username}/.mozilla/plugins"; rm /home/${username}/.mozilla/plugins/libnpjp2.so; su ${username} -c "ln -s /usr/lib/jvm/$jdir/jre/lib/amd64/libnpjp2.so ~${username}/.mozilla/plugins/"
Проверить, что оно заработало можно здесь.

Вот и все.

Java Simple WebService

Java Simple WebService

Решил для себя описать(чтобы не забыть и все такое) создание простейшего вебсервиса на Java.
С использованием технологии JAX-WS.Будет 2 примера,каждый мне в чем то нравится.

Для начала,что такое JAX-WS?
JAX-WS - это технология, разработанная для упрощения создания Web-сервисов и клиентов Web-сервисов на языке Java. Она предоставляет полный стек Web-сервисов, облегчающий разработку и развертывание Web-сервисов. JAX-WS поддерживает WS-I Basic Profile 1.1. Это гарантирует, что Web-сервисы, разработанные с использованием стека JAX-WS, могут потребляться любыми клиентами, разработанными на любом языке программирования и удовлетворяющими стандарту WS-I Basic Profile. 
Более того, JAX-WS ускоряет разработку Web-сервисов, предоставляя библиотеку аннотаций для преобразования POJO-классов (plain old Java object – традиционные Java-объекты) в Web-сервисы. Она также определяет детализированное отображение сервисов, определенных на языке WSDL (Web Services Description Language), в Java-классы, реализующие эти сервисы. Все сложные типы, определенные в WSDL, отображаются в Java-классы согласно отображению, определенному спецификацией JAXB. JAX-WS ранее поставлялась с платформой Java Platform, Enterprise Edition (Java EE) 5. Спецификация JAX-WS 2.0 разрабатывается под эгидой JSR 224 Java Community Process (JCP).
Для начала у нас будет просто WebService(как в большинстве примерах)


 
@WebService
public class HelloService {
    private String message = "Hello, ";

    @WebMethod//единственный вебметод нашего сервиса
    public String sayHello(String name) {
        return message + name + ".";
    }

    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/WS/Greeting",new HelloService()); //паблишим сервис по указанному урлу
    }
}
Запусаем main и наш сервис запаблишится на том урле,который мы указали.
Можно перейти на http://localhost:8080/WS/Greeting?wsdl ,чтобы проверить его доступность.
Дальше нам нужен клиент для работы с сервисом и отладки.

1й способ.

Выполнить из папки проекта команду
wsimport -keep -p com.client  http://localhost:8080/WS/Greeting?wsdl
Параметр -keep указывает, что сгенерированные файлы сохраняются, а параметр -p указывает название пакета, в который должны генерироваться артефакты.  http://localhost:8080/WS/Greeting?wsdl указывает месторасположение WSDL-файла. 

wsimport поставляется вместе с jdk,так что переживать по её поводу не нужно.

После этого у нас будет несколько сгенеренных классов для работы с сервисом и клиент будет выглядеть примерно так:

 
public class Client {
    @WebServiceRef(wsdlLocation = "http://localhost:8080/WS/Greeting?wsdl")
    HelloServiceService service=new HelloServiceService();

    public static void main(String[] args) {
        try {
            String response = service.getHelloServicePort().sayHello("Robert");
            System.out.println(response);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
В ответ вы должны получить "Hello Robert."

Способ 2

2й способ без генерации вспомогаемых классов утилитой wsimport.
Нам понадобится интерфейс нашего веб сервиса.

 
@WebService
public interface IService {
   @WebMethod
   public String sayHello(String name);
}
Наш сервис должен реализовывать этот интерфейс,как вы догадались

 
@WebService(endpointInterface = "com.main.IService")
public class HelloService implements IService{
    
    private String message = "Hello, ";
    @WebMethod
    public String sayHello(String name) {
        return message + name + ".";
    }

    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/ws/Greeting",new HelloService());
    }
}

И пишем сам клиент.

 
public class Client {
    public static void main(String[] args) throws MalformedURLException {
        URL url = new URL("http://localhost:8080/ws/Greeting?wsdl");
        QName qname = new QName("http://main.com/", "HelloServiceService");
        Service service = Service.create(url, qname);
        IService hello = service.getPort(IService.class);
        System.out.println(hello.sayHello("Cool guy"));
    }
}

Ответ должен быть "Hello,Cool guy".

Вот и все,всем спасибо.