Инструкция для администратора
Готовое распределенное приложение EJB упаковывается в архив EAR, содержащий
все необходимые компоненты для развертывания приложения на сервере. Системным администраторам нет необходимости использовать средство разработки NetBeans для развертывания. В состав сервера GlassFish входят средства управления, которые могут быть использованы для этой цели. К этим средствам, в первую очередь, относятся утилита администрирования asadmin и административная Web-консоль.
Запуск административной web-консоли GlassFish
Перед запуском административной консоли необходимо убедиться, что запущены
серверы GlassFish и JavaDB. В отсутствие NetBeans запуск серверов можно осуществить с помощью утилиты asadmin. Например, при стандартной установке в Windows эта утилита может иметь следующий полный путь: C:\Program Files\glassfish-v2.1\bin\asadmin.bat.
Команда запуска домена (по умолчанию создается домен domain1):
asadmin start-domain domain1
Команда запуска сервера JavaDB:
asadmin start-database --dbhost 127.0.0.113
После запуска GlassFish web-консоль администрирования доступна по HTTP, при этом стандартным TCP-портом является 4848 (однако, при установке сервера может быть выбран и другой порт). Таким образом, при стандартной установке сервера на локальном компьютере открыть web-консоль можно с помощью браузера по url http://localhost:4848/ .
Регистрация источника данных в jndi
В случае, если приложение использует БД, при переносе на другой компьютер
необходимо зарегистрировать соответствующий источник данных (Data Source) в JNDI. При использовании NetBeans эта операция осуществляется автоматически при создании Persistence Unit. Без NetBeans администрирование JNDI может быть выполнено с помощью web-консоли. Соответствующие записи находятся во вкладке Resources → JDBC.
В первую очередь необходимо создать пул соединений с БД (Connection Pool). В
соответствующем разделе выбираем New, далее вводим уникальное имя пула, Resource Type: javax.sql.DataSource, DataBase Vendor: JavaDB. В следующем окне необходимо в разделе Additional Properties ввести название БД (accessinbuilding), имя сервера БД и порт (по умолчанию — localhost:1527), пользователя User (по умолчанию — APP, в нашем случае accessinbuilding) и пароль Password (accessinbuilding). Для того, чтобы при развертывании приложения автоматически создалась необходимая БД, следует добавить в свойства пула атрибут connectionAttributes со значением;create=true.
После создания пула соединений необходимо создать источник данных во вкладке
JDBC Resources → New. Назначаем имя источника данных (JNDI Name), совпадающее с тем, которое использовалось при разработке приложения. Указываем созданный ранее пул соединений (Pool Name).
Развертывание приложения с помощью web-консоли
Выбрать вкладку Applications → Enterprise Applications, затем Deploy. Далее
необходимо указать EAR-файл приложения, отметить галочку Java Web Start.
Запуск корпоративного web-приложения EJB
Поскольку приложение с web-интерфейсом работает в стандартном тонком клиенте
(браузере), то для его функционирования нет необходимости устанавливать
дополнительное программное обеспечение. После развертывания приложения на сервере, ему назначается URL (например, http://localhost:8080/AddressBook- war).
Исходный код
Серверная часть
AccessInBuilding-ejb – модуль EJB:
Access.java
package accessinbuilding;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
@Entity
@Table(name = "ACCESS")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Access.findAll", query = "SELECT a FROM Access a ORDER BY a.act DESC"),
@NamedQuery(name = "Access.findById", query = "SELECT a FROM Access a WHERE a.id = :id"),
@NamedQuery(name = "Access.findByCode", query = "SELECT a FROM Access a WHERE a.code = :code"),
@NamedQuery(name = "Access.findByName", query = "SELECT a FROM Access a WHERE a.name = :name"),
@NamedQuery(name = "Access.findByAct", query = "SELECT a FROM Access a WHERE a.act = :act"),
/* Поиск людей в здании*/
@NamedQuery(name = "Access.findCountAct", query = "SELECT a FROM Access a WHERE a.act > 0"),
/* Поиск по имени И коду. Если одного из параметров нет, то поиск идёт только по одному из параметров*/
@NamedQuery(
name = "Access.findByAccess",
query = "SELECT a FROM Access a WHERE (a.code = :code AND a.name = :name AND :code > 0 AND :name != '') OR (a.code = :code AND :code > 0 AND :name = '') OR (a.name = :name AND :code <= 0 AND :name != '')"
)
})
public class Access implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "ID")
@GeneratedValue
private Integer id;
@Basic(optional = false)
@NotNull
@Column(name = "CODE")
private int code;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 120)
@Column(name = "NAME")
private String name;
@Basic(optional = false)
@NotNull
@Column(name = "ACT")
private int act;
public Access() {
}
public Access(Integer id) {
this.id = id;
}
public Access(Integer id, int code, String name, int act) {
this.id = id;
this.code = code;
this.name = name;
this.act = act;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAct() {
return act;
}
public void setAct(int act) {
this.act = act;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof Access)) {
return false;
}
Access other = (Access) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return "accessinbuilding.Access[ id=" + id + " ]";
}
}
