EJB - Tạo ứng dụng
Để tạo một mô-đun EJB đơn giản, chúng tôi sẽ sử dụng NetBeans, thuật sĩ "Dự án mới". Trong ví dụ dưới đây, Chúng tôi sẽ tạo một dự án mô-đun EJB có tên là Thành phần.
Tạo dự án
Trong NetBeans IDE, chọn File > New Project >. Bạn sẽ thấy màn hình sau
Chọn loại dự án trong danh mục Java EE, Loại dự án là EJB Module. Nhấp chuộtNext >cái nút. Bạn sẽ thấy màn hình sau.
Nhập tên và vị trí dự án. Nhấp chuộtNext >cái nút. Bạn sẽ thấy màn hình sau.
Chọn Máy chủ làm JBoss Application Server. Nhấp chuộtFinishcái nút. Bạn sẽ thấy dự án sau do NetBeans tạo ra.
Tạo một EJB mẫu
Để tạo một EJB đơn giản, chúng tôi sẽ sử dụng trình hướng dẫn "Mới" của NetBeans. Trong ví dụ dưới đây, Chúng tôi sẽ tạo một lớp EJB không trạng thái có tên là librarySessionBean trong dự án EjbComponent.
Chọn dự án EjbComponent trong cửa sổ khám phá dự án và nhấp chuột phải vào nó. Lựa chọn,New > Session Bean. Bạn sẽ thấyNew Session Bean Thuật sĩ.
Nhập tên phiên và tên gói. Nhấp chuộtFinishcái nút. Bạn sẽ thấy các lớp EJB sau do NetBeans tạo ra.
LibrarySessionBean - đậu phiên không trạng thái
LibrarySessionBeanLocal - giao diện cục bộ cho phiên đậu
Tôi đang thay đổi giao diện cục bộ thành giao diện từ xa vì chúng tôi sẽ truy cập EJB của mình trong một ứng dụng dựa trên bảng điều khiển. Giao diện từ xa / cục bộ được sử dụng để hiển thị các phương pháp kinh doanh mà EJB phải thực hiện.
LibrarySessionBeanLocal được đổi tên thành LibrarySessionBeanRemote và LibrarySessionBean triển khai giao diện LibrarySessionBeanRemote.
LibrarySessionBeanRemote
package com.tutorialspoint.stateless;
import java.util.List;
import javax.ejb.Remote;
@Remote
public interface LibrarySessionBeanRemote {
void addBook(String bookName);
List getBooks();
}
LibrarySessionBean
package com.tutorialspoint.stateless;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
@Stateless
public class LibrarySessionBean implements LibrarySessionBeanRemote {
List<String> bookShelf;
public LibrarySessionBean() {
bookShelf = new ArrayList<String>();
}
public void addBook(String bookName) {
bookShelf.add(bookName);
}
public List<String> getBooks() {
return bookShelf;
}
}
Xây dựng dự án
- Chọn dự án EjbComponent trong cửa sổ Project Explorer.
- Nhấp chuột phải vào nó để mở menu ngữ cảnh.
- Chọn sạch và xây dựng.
Bạn sẽ thấy kết quả sau trong đầu ra bảng điều khiển NetBeans.
ant -f C:\\EJB\\EjbComponent clean dist
init:
undeploy-clean:
deps-clean:
Deleting directory C:\EJB\EjbComponent\build
Deleting directory C:\EJB\EjbComponent\dist
clean:
init:
deps-jar:
Created dir: C:\EJB\EjbComponent\build\classes
Copying 3 files to C:\EJB\EjbComponent\build\classes\META-INF
Created dir: C:\EJB\EjbComponent\build\empty
Created dir: C:\EJB\EjbComponent\build\generated-sources\ap-source-output
Compiling 2 source files to C:\EJB\EjbComponent\build\classes
warning: [options] bootstrap class path not set in conjunction with -source 1.6
Note: C:\EJB\EjbComponent\src\java\com\tutorialspoint\stateless
\LibraryPersistentBean.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 warning
compile:
library-inclusion-in-archive:
Created dir: C:\EJB\EjbComponent\dist
Building jar: C:\EJB\EjbComponent\dist\EjbComponent.jar
dist:
BUILD SUCCESSFUL (total time: 3 seconds)
Khởi động máy chủ ứng dụng
- Chọn máy chủ ứng dụng JBoss trong cửa sổ Máy chủ trong Dịch vụ.
- Nhấp chuột phải vào nó để mở menu ngữ cảnh.
- Chọn bắt đầu.
Bạn sẽ thấy kết quả sau trong NetBeans, đầu ra trong Máy chủ ứng dụng JBoss.
Calling C:\jboss-5.1.0.GA\bin\run.conf.bat
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: C:\jboss-5.1.0.GA
JAVA: C:\Program Files (x86)\Java\jdk1.6.0_21\bin\java
JAVA_OPTS: -Dprogram.name=run.bat -Xms128m -Xmx512m -server
CLASSPATH: C:\jboss-5.1.0.GA\bin\run.jar
=========================================================================
16:25:50,062 INFO [ServerImpl] Starting JBoss (Microcontainer)...
16:25:50,062 INFO [ServerImpl] Release ID: JBoss
[The Oracle] 5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634)
...
16:26:40,420 INFO [TomcatDeployment] deploy, ctxPath=/admin-console
16:26:40,485 INFO [config] Initializing Mojarra (1.2_12-b01-FCS) for context '/admin-console'
16:26:42,362 INFO [TomcatDeployment] deploy, ctxPath=/
16:26:42,406 INFO [TomcatDeployment] deploy, ctxPath=/jmx-console
16:26:42,471 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080
16:26:42,487 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
16:26:42,493 INFO [ServerImpl] JBoss (Microcontainer)
[5.1.0.GA (build: SVNTag=JBoss_5_1_0_GA date=200905221634)] Started in 52s:427ms
Triển khai dự án
- Chọn dự án EjbComponent trong cửa sổ Project Explorer.
- Nhấp chuột phải vào nó để mở menu ngữ cảnh.
- Chọn Triển khai.
Bạn sẽ thấy kết quả sau trong đầu ra bảng điều khiển NetBeans.
ant -f C:\\EJB\\EjbComponent -DforceRedeploy=true -Ddirectory.deployment.supported=false -Dnb.wait.for.caches=true run
init:
deps-jar:
compile:
library-inclusion-in-archive:
Building jar: C:\EJB\EjbComponent\dist\EjbComponent.jar
dist-directory-deploy:
pre-run-deploy:
Checking data source definitions for missing JDBC drivers...
Distributing C:\EJB\EjbComponent\dist\EjbComponent.jar to [org.jboss.deployment.spi.LocalhostTarget@1e4f84ee]
Deploying C:\EJB\EjbComponent\dist\EjbComponent.jar
Application Deployed
Operation start started
Operation start completed
post-run-deploy:
run-deploy:
run:
BUILD SUCCESSFUL (total time: 2 seconds)
Đầu ra nhật ký máy chủ ứng dụng JBoss
16:30:00,963 INFO [DeployHandler] Begin start, [EjbComponent.jar]
...
16:30:01,233 INFO [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@12038795{vfszip:/C:/jboss-5.1.0.GA/server/default/deploy/EjbComponent.jar/}
...
16:30:01,281 INFO [JBossASKernel] jndi:LibrarySessionBean/remote-com.tutorialspoint.stateless.LibrarySessionBeanRemote
16:30:01,281 INFO [JBossASKernel] Class:com.tutorialspoint.stateless.LibrarySessionBeanRemote
16:30:01,281 INFO [JBossASKernel] jndi:LibrarySessionBean/remote
16:30:01,281 INFO [JBossASKernel] Added bean(jboss.j2ee:jar=EjbComponent.jar,name=
LibrarySessionBean,service=EJB3) to KernelDeployment of: EjbComponent.jar
16:30:01,282 INFO [JBossASKernel] installing bean: jboss.j2ee:jar=EjbComponent.jar,name=BookMessageHandler,service=EJB3
16:30:01,282 INFO [JBossASKernel] with dependencies:
16:30:01,282 INFO [JBossASKernel] and demands:
16:30:01,282 INFO [JBossASKernel] jboss.ejb:service=EJBTimerService
...
16:30:01,283 INFO [EJB3EndpointDeployer] Deploy
AbstractBeanMetaData@5497cb{name=jboss.j2ee:jar=EjbComponent.jar,
name=LibrarySessionBean, service=EJB3_endpoint bean=org.jboss.ejb3.endpoint.deployers.impl.EndpointImpl properties=[container] constructor=null autowireCandidate=true}
...
16:30:01,394 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=EjbComponent.jar,name=LibrarySessionBean,service=EJB3
16:30:01,395 INFO [EJBContainer] STARTED EJB: com.tutorialspoint.stateless.LibrarySessionBean ejbName: LibrarySessionBean
16:30:01,401 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
LibrarySessionBean/remote - EJB3.x Default Remote Business Interface
LibrarySessionBean/remote-com.tutorialspoint.stateless.LibrarySessionBeanRemote - EJB3.x Remote Business Interface
16:30:02,723 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=EjbComponent.jar,name=LibrarySessionBean,service=EJB3
16:30:02,723 INFO [EJBContainer] STARTED EJB: com.tutorialspoint.stateless.LibrarySessionBean ejbName: LibrarySessionBean
16:30:02,731 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
LibrarySessionBean/remote - EJB3.x Default Remote Business Interface
LibrarySessionBean/remote-com.tutorialspoint.stateless.LibrarySessionBeanRemote - EJB3.x Remote Business Interface
Tạo ứng dụng khách để truy cập EJB
Trong NetBeans IDE, chọn File > New Project >.
Chọn loại dự án trong danh mục Java, Loại dự án là Java Application. Nhấp vào nút Tiếp theo>
Nhập tên và vị trí dự án. Nhấp chuộtFinish >cái nút. Chúng tôi đã chọn tên là EjbTester.
Nhấp chuột phải vào tên dự án trong cửa sổ Project explorer. Lựa chọnproperties.
Thêm dự án thành phần EJB đã tạo trước đó trong các thư viện bằng cách sử dụng Add Project nút trong compile chuyển hướng.
Thêm thư viện jboss bằng Add jar/folder nút trong compilechuyển hướng. Thư viện jboss có thể được đặt tại thư mục máy khách <jboss install folder >>.
Tạo jndi.properties theo dự án nói rằng EjbTester.
jndi.properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
java.naming.provider.url=localhost
Tạo gói com.tutorialspoint.test và lớp EJBTester.java dưới nó.
EJBTester.java
package com.tutorialspoint.test;
import com.tutorialspoint.stateless.LibrarySessionBeanRemote;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class EJBTester {
BufferedReader brConsoleReader = null;
Properties props;
InitialContext ctx;
{
props = new Properties();
try {
props.load(new FileInputStream("jndi.properties"));
} catch (IOException ex) {
ex.printStackTrace();
}
try {
ctx = new InitialContext(props);
} catch (NamingException ex) {
ex.printStackTrace();
}
brConsoleReader =
new BufferedReader(new InputStreamReader(System.in));
}
public static void main(String[] args) {
EJBTester ejbTester = new EJBTester();
ejbTester.testStatelessEjb();
}
private void showGUI() {
System.out.println("**********************");
System.out.println("Welcome to Book Store");
System.out.println("**********************");
System.out.print("Options \n1. Add Book\n2. Exit \nEnter Choice: ");
}
private void testStatelessEjb() {
try {
int choice = 1;
LibrarySessionBeanRemote libraryBean =
(LibrarySessionBeanRemote)ctx.lookup("LibrarySessionBean/remote");
while (choice != 2) {
String bookName;
showGUI();
String strChoice = brConsoleReader.readLine();
choice = Integer.parseInt(strChoice);
if (choice == 1) {
System.out.print("Enter book name: ");
bookName = brConsoleReader.readLine();
libraryBean.addBook(bookName);
}else if (choice == 2) {
break;
}
}
List<String> booksList = libraryBean.getBooks();
System.out.println("Book(s) entered so far: " + booksList.size());
for (int i = 0; i < booksList.size(); ++i) {
System.out.println((i+1)+". " + booksList.get(i));
}
LibrarySessionBeanRemote libraryBean1 =
(LibrarySessionBeanRemote)ctx.lookup("LibrarySessionBean/remote");
List<String> booksList1 = libraryBean1.getBooks();
System.out.println(
"***Using second lookup to get library stateless object***");
System.out.println(
"Book(s) entered so far: " + booksList1.size());
for (int i = 0; i < booksList1.size(); ++i) {
System.out.println((i+1)+". " + booksList1.get(i));
}
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
} finally {
try {
if(brConsoleReader !=null) {
brConsoleReader.close();
}
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
}
Chạy ứng dụng khách để truy cập EJB
Định vị EJBTester.java trong trình khám phá dự án. Nhấp chuột phải vào lớp EJBTester và chọnrun file.
Xác minh kết quả sau trong bảng điều khiển Netbeans.
run:
**********************
Welcome to Book Store
**********************
Options
1. Add Book
2. Exit
Enter Choice: 1
Enter book name: Learn Java
**********************
Welcome to Book Store
**********************
Options
1. Add Book
2. Exit
Enter Choice: 2
Book(s) entered so far: 1
1. Learn Java
***Using second lookup to get library stateless object***
Book(s) entered so far: 0
BUILD SUCCESSFUL (total time: 13 seconds)
Trong các chương tiếp theo, chúng tôi sẽ trình bày nhiều khía cạnh của ứng dụng EJB hoàn chỉnh này.