Создание тестового клиента

Клиентом для EJB-объектов может быть любая программа на Java или апплет; в нашем простом примере я опишу очень простую клиентскую программу, которая может быть запущена из командной строки. Она просто распечатает на экране все атрибуты всех объектов CD. Исходный код позволяет осуществлять поиск и загрузку в базу данных, всё это работает из командной строки.

Клиент не работает напрямую с экземплярами CD, он использует объект CDCollection в качестве посредника. CDCollection это сессионный объект без сохранения состояния (stateless session bean). В этом примере клиент вызывает метод "findAll" чтобы получить ссылки на все объекты CD находящиеся в системе. Для запуска этого клиента, Вы должны создать несколько таких объектов CD. Вы можете использовать клиентскую программу "Upload" для того чтобы создать экземпляры CD из текстового файла.

Чтобы избежать необходимости указания URL до сервера в исходном коде, клиент прочитает всю необходимую информацию из файла свойств "jndi.properties". Этот файл может быть найден в каталоге "documentation-example/resources". Файл должен содержать URL и имя драйвера:

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

Конечно, если ваш клиент и сервер находятся на разных компьютерах, вам необходимо будет изменить "localhost" на настоящее имя сервера. Префикс JNDI-протокола, используемого в JBoss - "jnp:". URL может быть задано с помощью таких значений:

localhost
localhost:1099
jnp://localhost:1099

Вот полный листинг клиента "List".

package org.jboss.docs.cmp.cd;

import org.jboss.docs.cmp.cd.interfaces.CD;
import org.jboss.docs.cmp.cd.interfaces.CDHome;
import org.jboss.docs.cmp.cd.interfaces.CDCollectionHome;
import org.jboss.docs.cmp.cd.interfaces.CDCollection;
import javax.rmi.PortableRemoteObject;
import javax.naming.InitialContext;
import java.util.Hashtable;
import java.util.Properties;
import java.io.FileInputStream;

/**
 * This is a simple client for the "CD" EJB; it lists (to standard output) all
 * the "CD" instances in the system. The "main" method allows this class to be
 * run from the command line.
 */
public class List
{

   public static void main(String[] args)
   {
      // Enclosing the whole process in a single "try" block is not an ideal way
      // to do exception handling, but I don't want to clutter the program up
      // with catch blocks
      try
      {
         // Get a naming context
         InitialContext jndiContext = new InitialContext();

         // Get a reference to a CD Bean
         Object ref  = jndiContext.lookup("cd/CDCollection");

         // Get a reference from this to the Bean's Home interface
         CDCollectionHome home = (CDCollectionHome)
            PortableRemoteObject.narrow (ref, CDCollectionHome.class);

         CDCollection cdCollection = home.create();

         CD[] cds = cdCollection.findAll();
         for (int i = 0; i < cds.length; i++)
         {
            System.out.println (cds[i].getId() + "\t" + cds[i].getTitle() + "\t" +
               cds[i].getArtist() + "\t" + cds[i].getType());
         }
      }
      catch(Exception e)
      {
         System.out.println(e.toString());
      }
   }

}
 

Чтобы запустить этого клиента, выполните команду "ant cmp-cd-list". После этого вам необходимо выполнить "ant cmp-cd-upload" чтобы загрузить данные (из файла "cds.txt") в базу данных. Чтобы удалить все записи, выполните "ant cmp-cd-remove". Эти программы можно найти в каталоге "documentation-example/org/jboss/docs/cmp/cd".

Согласитесь, это не намного сложнее чем создание сессионного EJB-объекта. Дополнительные необходимые шаги:

Файл ejb-jar.xml должен отражать, что объект сохраняем, и включать в себя сохраняемые в базе поля. В нём также необходимо определить имя и класс первичного ключа.

Если имена колонок и типы по умолчанию вас не устраивают, создайте файл jaws.xml чтобы определить их.

Теперь у Вас должна появиться куча вопросов: Какую базу данных использует JBoss для сохранения данных и как Я могу определить другую? Как Я могу изменить определение таблицы, которую создаст JBoss? Какое управление Я могу оказать на методы поиска (finder methods)?

На все эти вопросы будут ответы в следующей главе, которая ознакомит Вас со специфичным для JBoss дескриптором "jaws.xml" и его настройками по умолчанию "standardjaws.xml". Заметим, что эти настройки по умолчанию использовались (незаметно от Вас) в этом примере.

Наши друзья