サーバー端にJavaのEJBコンポーネントを配置する方法
EJBとは何ですか?
EJBはJava企業Beanであり、JavaEEサービスエンド企業のコンポーネントモデルであり、その設計目標と核心アプリケーションは分布式アプリケーションを展開することである。話は多くなくて、直接にどのように本機でEJB 3を配置するかを見ます。
配置環境:
オペレーティングシステム:Windows 8.1
EJB容器:Jboss 7.1
DB:MySQL 5.6.10
IDE:MyEclipse 10
JDK:1.6
1、データベース、テーブルの作成
このプロセスでは、データベースと通信する必要があるので、まずデータベーステーブルを作成する必要があります。
データベースを作成:
以上の手順で必要なデータベーステーブルが作成されました。rootユーザーを通じてすべてのデータにアクセスできます。
2、エンティティBean、ユーザ操作インターフェース、およびセッションBeanを作成する
EJBプロジェクトを創立して、名前はMyEJBProjectです。このプロジェクトはMETA-INFOディレクトリの下にファイルpersistence.xmlファイルが含まれています。このファイルはデータソースを設定して、後で構成します。
続いて本体を構築するBean
セッションを作る
ここで注意したいのですが、jboss 6とjboss 7では構成が違います。
jboss 6と以前のバージョンは全部deployディレクトリの下に***-ds.xmlを添加しています。ここでは**は任意のデータベース名を表しています。mysqlなら、mysql-ds.xmlファイルです。jboss 7では、違います。
ディレクトリをJbossのインストールディレクトリに切り替えます。即ち%JBOSS_HOME%の下で、modules/comディレクトリに入り、フォルダmysqldabesを作って、入ります。mysqlフォルダを作って、入ります。mainフォルダを作ります。
mainディレクトリの下でmodule.xmlファイルを作成します。この設定ファイルの内容は以下の通りです。
前のステップを完了したら、%JBOSS_に切り替えます。HOME%\standowne\configrationディレクトリの下で、
standarlone.xmlを開いてdatasourcesを検索します。以下のように構成されています。
jbossの関連している配置はすでに完成して、それからちょうど新しい工事に変えて、その中に1つのpersistence.xmlの配置ファイルがあって、このファイルは以下のように構成して、その中のjta-data-sourceは上の配置のjndi-nameです。
4、EJBサービスを展開する。
前の工程で書いたコードをjarパッケージにして、ejbservice.jarと名づけます。同時に、エンティティBeanとインターフェースだけをjarパッケージに包装し、ebjiterface.jarと名づけました。このjarは将来、クライアントの呼び出しに使います。
ejbservice.jarを%JBOSS_に入れます。HOME%\standowne\deploymentsディレクトリの下にあります。jbossが起動すると、自動的にディレクトリをスキャンします。そして、jarを配置する。
ok、私達はjbossをMyEclipseの下に配置し、MyEclipseの中でJbossを起動し、コンソールの出力を観察します。
もしDeployed「ejbservice.jar」というログが出たら、ejbは展開が成功したと説明します。
5、クライアントはどうやって呼び出しますか?
クライアントの呼び出しには二つの必須条件が必要です。
jboss-ejb-client.propertiesの構成、jboss-client.jarとejbinter face.jarを導入します。その中のjboss-client.jarはjboss bin/clientディレクトリの下にあります。ejbinter face.jarは私たちが作成したばかりのクライアントが使用するインターフェースjarパッケージです。
jboss-ejb-client.propertiesの構成は以下の通りです。
この二つの条件があれば、安心してテストクラスのEJBTest.javaを作り、クライアント方法を作ります。
これでEJBの配置が成功しました。
EJBはJava企業Beanであり、JavaEEサービスエンド企業のコンポーネントモデルであり、その設計目標と核心アプリケーションは分布式アプリケーションを展開することである。話は多くなくて、直接にどのように本機でEJB 3を配置するかを見ます。
配置環境:
オペレーティングシステム:Windows 8.1
EJB容器:Jboss 7.1
DB:MySQL 5.6.10
IDE:MyEclipse 10
JDK:1.6
1、データベース、テーブルの作成
このプロセスでは、データベースと通信する必要があるので、まずデータベーステーブルを作成する必要があります。
データベースを作成:
create database student; // student
テーブルを作成:
create table student( // student
`id` integer(11) not null,
`name` varchar2(20) default null,
primary key (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=latin1
データを挿入:
insert into student values(1,'easynoder');
commit;
ローカルのrootユーザーにアクセス権限を指定します。
grant all privileges on *.* to root@localhost indentified by "1234"
以上の手順で必要なデータベーステーブルが作成されました。rootユーザーを通じてすべてのデータにアクセスできます。
2、エンティティBean、ユーザ操作インターフェース、およびセッションBeanを作成する
EJBプロジェクトを創立して、名前はMyEJBProjectです。このプロジェクトはMETA-INFOディレクトリの下にファイルpersistence.xmlファイルが含まれています。このファイルはデータソースを設定して、後で構成します。
続いて本体を構築するBean
@Entity // Bean
@Table (name = "student" ) // student
public class StudentEntity implements Serializable {
private static final long serialVersionUID = 4002145187978562529L;
@Id // id
@GeneratedValue(strategy = GenerationType. AUTO ) //id
@Column(name = "id" )// student id
private int id ;
@Column(name = "name" ) // student name
private String name;
public int getId() {
return id ;
}
public String getName() {
return name ;
}
public void setId(int id) {
this .id = id;
}
public void setName(String name) {
this .name = name;
}
}
操作インターフェースを作成:
public interface BaseOperation {
public List<?> findAll();
}
このインターフェースは一つの方法しかありません。すべての学生を獲得します。セッションを作る
@Stateless // Bean
@Remote (BaseOperation. class) // Bean remote
public class StudentDaoBean implements BaseOperation {
// EntityManager EJB ,unitName
persistence.xml < persistence-unit name = "MyEJBProject" transaction-type = "JTA" ></ persistence-unit > name
@PersistenceContext(unitName = "MyEJBProject" )
private EntityManager em;
@SuppressWarnings( "unchecked" )
public List<?> findAll() {
System. out .println(" ..." );
List<StudentEntity> list = em.createQuery( " from StudentEntity ").getResultList();
if (list != null) {
Iterator<StudentEntity> it = list.iterator();
while (it.hasNext()) {
StudentEntity student = it.next();
System. out .println(" id:" + student.getId());
System. out .println(" :" + student.getName());
}
}
System. out .println(" ...." );
return list;
}
}
3、データソースの設定ここで注意したいのですが、jboss 6とjboss 7では構成が違います。
jboss 6と以前のバージョンは全部deployディレクトリの下に***-ds.xmlを添加しています。ここでは**は任意のデータベース名を表しています。mysqlなら、mysql-ds.xmlファイルです。jboss 7では、違います。
ディレクトリをJbossのインストールディレクトリに切り替えます。即ち%JBOSS_HOME%の下で、modules/comディレクトリに入り、フォルダmysqldabesを作って、入ります。mysqlフォルダを作って、入ります。mainフォルダを作ります。
mainディレクトリの下でmodule.xmlファイルを作成します。この設定ファイルの内容は以下の通りです。
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.mysqldatabase.mysql">
<resources>
<resource-root path="mysql-connector-java-5.**-bin.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
特にここで注意したいのは、moduleノード属性nameの値は、先ほど作成したフォルダのパスです。レスポンスはmysql駆動の経路を示しています。つまり、mysqlの駆動をmainディレクトリの下に置く必要があります。メーンディレクトリには2つのファイル、module.xmlとデータベースドライバファイルが含まれています。前のステップを完了したら、%JBOSS_に切り替えます。HOME%\standowne\configrationディレクトリの下で、
standarlone.xmlを開いてdatasourcesを検索します。以下のように構成されています。
<datasources>
<datasource jndi-name="java:jboss/KouMySQLDS" pool-name="MySQLDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://localhost:3306/student</connection-url>
<driver>mysql</driver>
<security>
<user-name>root</user-name>
<password>1234</password>
</security>
</datasource>
<drivers>
<driver name="mysql" module="com.mysqldatabase.mysql">
<driver-class>com.mysql.jdbc.Driver</driver-class>
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
jndi-nameはデータソースjndiの名前を表し、connection-urlは接続のurl文字列を表します。ここではデフォルトで3306ポートを使用して、studentライブラリを使用して、ユーザ名とパスワードは第一歩の構成です。moduleは、設定されたばかりのmoduleの経路を設定します。jbossの関連している配置はすでに完成して、それからちょうど新しい工事に変えて、その中に1つのpersistence.xmlの配置ファイルがあって、このファイルは以下のように構成して、その中のjta-data-sourceは上の配置のjndi-nameです。
< jta-data-source> java:jboss/KouMySQLDS </jta-data-source >
< properties>
< property name= "hibernate.hbm2ddl.auto" value ="validate" />
< property name= "hibernate.jdbc.fetch_size" value ="15" />
< property name= "hibernate.jdbc.batch_size" value ="10" />
< property name= "hibernate.show_sql" value ="true" />
< property name= "hibernate.format_sql" value ="true" ></ property>
</ properties>
これでサービスエンドコードとデータソースの配置が完了しました。次に必要なのは、コードの配置とクライアントからEJBサービスを呼び出す方法です。4、EJBサービスを展開する。
前の工程で書いたコードをjarパッケージにして、ejbservice.jarと名づけます。同時に、エンティティBeanとインターフェースだけをjarパッケージに包装し、ebjiterface.jarと名づけました。このjarは将来、クライアントの呼び出しに使います。
ejbservice.jarを%JBOSS_に入れます。HOME%\standowne\deploymentsディレクトリの下にあります。jbossが起動すると、自動的にディレクトリをスキャンします。そして、jarを配置する。
ok、私達はjbossをMyEclipseの下に配置し、MyEclipseの中でJbossを起動し、コンソールの出力を観察します。
もしDeployed「ejbservice.jar」というログが出たら、ejbは展開が成功したと説明します。
5、クライアントはどうやって呼び出しますか?
クライアントの呼び出しには二つの必須条件が必要です。
jboss-ejb-client.propertiesの構成、jboss-client.jarとejbinter face.jarを導入します。その中のjboss-client.jarはjboss bin/clientディレクトリの下にあります。ejbinter face.jarは私たちが作成したばかりのクライアントが使用するインターフェースjarパッケージです。
jboss-ejb-client.propertiesの構成は以下の通りです。
endpoint.name= client-endpoint
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED= false
remote.connections= default
remote.connection.default.host= localhost
remote.connection.default.port= 4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS= false
remote.connection.default.username= yourUsername
remote.connection.default.password= yourPassword
この二つの条件があれば、安心してテストクラスのEJBTest.javaを作り、クライアント方法を作ります。
public static void main(String[] args) {
Properties props = new Properties();
props.setProperty(Context. URL_PKG_PREFIXES,"org.jboss.ejb.client.naming" );
try {
Context context = new InitialContext(props);
// :ejbservice ejb ,StudentDaoBean Bean,org.easynoder.ejb2.dao.BaseOperation
BaseOperation op = (BaseOperation) context
.lookup("ejb:/ejbservice//StudentDaoBean!org.easynoder.ejb2.dao.BaseOperation" );
op.findAll();
} catch (NamingException e) {
e.printStackTrace();
}
}
このコードを実行すれば、データベースのデータを調べることができます。これでEJBの配置が成功しました。