corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Передача двоичных данных с помощью приложения веб-службы, часть 2: создание модуля EJB

Задача этого руководства состоит в создании модуля EJB, представляющего два метода: один для предоставления одиночного изображения, а второй – для предоставления всех изображений. Как правило, изображения поступают из базы данных. Так как поиск в базе данных выходит за рамки этого руководства, изображения будут просто размещены в папке ресурсов внутри нашего модуля EJB.

Руководства этой учебной карты

Содержимое на этой странице относится к среде IDE NetBeans 6.1
  1. Обзор
  2. => Создание модуля EJB
  3. Создание веб-службы
  4. Тестирование веб-службы
  5. Изменение файлов схемы и WSDL для передачи двоичных файлов
  6. Создание клиента Swing
  7. Протоколирование и оптимизация веб-службы

Создание модуля EJB

Ниже приведена процедура создания компонента Enterprise Java Bean (EJB), содержащего изображения, передаваемые веб-службой в виде двоичных данных.

Создание модуля EJB:

  1. Выберите "File > New Project" (Ctrl-Shift-N). Откроется мастер создания проекта. Выберите "EJB Module" в категории "Enterprise" и нажмите кнопку "Next". Откроется страница "Name and Location".
  2. Введите FlowerAlbum в поле "Project Name". Выберите расположение, требуемое для этого проекта: это расположение следует использовать и для других проектов, создаваемых для данного сквозного приложения. Примите значения по умолчанию для остальных параметров и нажмите кнопку "Next". Откроется страница "Server and Settings".
  3. Выберите сервер приложений и версию Java EE. Эти значения должны совпадать для всех проектов в сквозном приложении. В результате создается проект модуля EJB, аналогичный приведенному в окне "Projects" на рисунке ниже:
    Окно "Projects" с новым проектом EJB
  4. Щелкните правой кнопкой мыши узел проекта FlowerAlbum и выберите "New > Session Bean". В качестве альтернативы, щелкните правой кнопкой мыши узел проекта и выберите "New > Other". В мастере создания файла выберите "Session Bean" в области "Enterprise". Откроется мастер создания сеансного компонента "New Session Bean".
  5. Назовите сеансный компонент Flower и присвойте имя пакета flower.album. Обязательно выберите "Stateless" и "Remote". Экран должен выглядеть следующим образом:
    Мастер "New Session Bean" с именем, местоположением, типом сеанса и интерфейсом

    Нажмите кнопку "Finish".

    В результате к узлу "Source Packages" добавляется сеансный компонент вместе с удаленным интерфейсом, как показано на этом рисунке. В узле "Enterprise Beans" добавляется новый узел для нового компонента FlowerBean:


    Окно "Projects" с новым компонентом "Flower"
  6. Щелкните правой кнопкой мыши узел "FlowerBean" и выберите "Add > Business Method". Откроется диалоговое окно "Business Method".
  7. Введите следующие значения в диалоговом окне "Business Method":

    • Name: getFlower
    • Return Type: byte[]

    Нажмите кнопку "Add". В поле "Name" введите name. Остальные значения изменять не требуется. Экран должен выглядеть следующим образом:
    Диалоговое окно "Business Method", выводится имя, возвращаемый тип и параметр "Name"

  8. Перейдите к вкладке "Exceptions". Нажмите кнопку "Add". Откроется диалоговое окно "Find Type". Введите "IO" и выберите IOException (java.io).
    Диалоговое окно "Find Type", выбор "IOException"

    Нажмите кнопку "OK". Выполняется возврат в диалоговое окно "Business Method", в котором отображается "IOException".
    Диалоговое окно "Business Method", показан выбор "IOException"

    Нажмите кнопку "OK". Теперь в классе компонента имеется основа для метода, а в классе удаленного интерфейса – объявление метода.

  9. Снова вызовите диалоговое окно "Business Method". На сей раз введите следующие значения:
    • Name: allFlowers
    • Return Type: List<byte[]>

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

  10. В классе удаленного интерфейса обратите внимание на то, что необходимые методы созданы при выполнении предыдущих действий:
    @Remote
    public interface FlowerRemote {
    
        byte[] getFlower(String name) throws IOException;
    
        List<byte[]> allFlowers() throws IOException;
    
    }

    Рассмотрите класс компонента и заглушки, созданные для объявленных методов:

    @Stateless
    public class FlowerBean implements FlowerRemote {
    
        public byte[] getFlower(String name) throws IOException {
            return null;
        }
    
        public List<byte[]> allFlowers() throws IOException {
            return null;
        }
    
    }

    В качестве альтернативы можно добавить код класса компонента и класса удаленного интерфейса вручную с помощью диалогового окна "Business Method". Однако в случае использования диалогового окна "Business Method" код одновременно добавляется как в класс компонента, так и в класс удаленного интерфейса.

  11. Исправьте импортированный код в классах компонента удаленного интерфейса. Для каждого класса установите курсор в любое место кода, щелкните правой кнопкой мыши и выберите в контекстном меню "Fix Imports". Откроется диалоговое окно, в котором показан весь необходимый импортированный код. Для создания всех необходимых операторов импорта в NetBeans нажмите кнопку "OK". В качестве альтернативы можно нажать комбинацию клавиш Ctrl-Shift-I в каждом классе для открытия диалогового окна импорта.

  12. Теперь в удаленном интерфейсе объявлены методы, а в классе компонента реализованы заглушки.

    В окне "Projects" теперь должны отображаться два новых узла под узлом "Enterprise Beans", соответствующих новым методам, как показано на следующем рисунке:
    Окно "Projects" с двумя узлами компонентов уровня предприятия

  13. Заполните класс компонента следующим кодом для представления одиночного изображения или всех изображений:
    @Stateless
    public class FlowerBean implements FlowerRemote {
    
        private static final String[] FLOWERS = {"aster", "honeysuckle", "rose", "sunflower"};
    
        public byte[] getFlower(String name) throws IOException {
            URL resource = this.getClass().getResource("/flower/album/resources/"+name+".jpg");
            return getBytes(resource);
        }
    
        public List<byte[]> allFlowers() throws IOException {
            List<byte[]> flowers = new ArrayList<byte[]>();
            for (String flower:FLOWERS) {
                URL resource = this.getClass().getResource("/flower/album/resources/"+flower+".jpg");
                flowers.add(getBytes(resource));
            }
            return flowers;
        }
    
        private byte[] getBytes(URL resource) throws IOException {
            InputStream in = resource.openStream();
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buf = new byte[1024];
            for(int read; (read = in.read(buf)) != -1;) {
                bos.write(buf, 0, read);
            }
            return bos.toByteArray();
        }
    
    }
  14. Создайте новый подпакет с именем resources. Скопируйте в этот пакет следующие изображения:

    Изображения должны выводиться в представлении "Projects", как показано ниже:


    Окно "Projects" с загруженными изображениями

    Обратите внимание, что оба метода в коде – getFlower и allFlowers – используют изображения в этом пакете.

  15. Теперь модуль EJB готов! В следующем разделе создается веб-служба, делегирующая в модуль EJB для получения изображений в соответствующих точках кода.

    Что дальше?

    Создание веб-службы


    Оставить комментарии и предложения, обратиться за поддержкой и получить информацию о последних достижениях в области функциональных возможностей разработки для Java EE с помощью среды IDE NetBeans можно в списке рассылки .

Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems