Không nhất thiết phải là cách dễ nhất, nhưng tôi quản lý để có được điều này làm việc sử dụng thùng chứa EJB3.0 nhúng JBoss, với sự hỗ trợ lớn từ Java Persistence with Hibernate
Đối với một sự khởi đầu, tôi không biết các plugin maven/phụ thuộc cho điều này , vì vậy tôi đã phải cài đặt riêng tôi tại địa phương:
(1) Tải jboss-EJB-3.0_Embeddable_ALPHA_9.zip
từ downloads
(2) zipfile này chứa hai lọ quan trọng:
jboss-ejb3-all.jar
thirdparty-all.jar
(3) Cài đặt các lọ vào kho lưu trữ địa phương của bạn (sử dụng tên viết tắt của riêng bạn thay vì nkl
):
mvn install:install-file \
-Dfile=jboss-ejb3-all.jar \
-DgroupId=nkl.jboss.embedded \
-DartifactId=jboss-ejb3-all \
-Dversion=3.0-alpha-9
mvn install:install-file \
-Dfile=thirdparty-all.jar \
-DgroupId=nkl.jboss.embedded \
-DartifactId=thirdparty-all \
-Dversion=3.0-alpha-9
(4) Nếu tất cả đã diễn ra tốt đẹp, bây giờ bạn sẽ có hai thư mục trong kho lưu trữ cục bộ của bạn.
(5) Bây giờ thêm sự phụ thuộc sau đây để bạn pom.xml
<dependency>
<groupId>nkl.jboss.embedded</groupId>
<artifactId>jboss-ejb3-all</artifactId>
<version>3.0-alpha-9</version>
</dependency>
<dependency>
<groupId>nkl.jboss.embedded</groupId>
<artifactId>thirdparty-all</artifactId>
<version>3.0-alpha-9</version>
</dependency>
(6) Tôi cũng cần thiết để thêm phụ thuộc cho HSQLDB, và SLF4J
(7) Bạn cần phải sao chép một số tập tin từ thư mục conf
của tệp zip vào thư mục src/main/resources
của dự án của bạn:
default.persistence.properties
ejb3-interceptors-aop.xml
embedded-jboss-beans.xml
jndi.properties
(8) Tôi tạo của riêng tôi beans.xml
và persistence.xml
file trong src/main/resources/META-INF
:
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd" xmlns="urn:jboss:bean-deployer">
<bean name="messageDSBootstrap" class="org.jboss.resource.adapter.jdbc.local.LocalTxDataSource">
<property name="jndiName">java:/messageDS</property>
<property name="driverClass">org.hsqldb.jdbcDriver
</property>
<property name="connectionURL">jdbc:hsqldb:test</property>
<property name="minSize">0</property>
<property name="maxSize">10</property>
<property name="blockingTimeout">1000</property>
<property name="idleTimeout">30000</property>
<property name="transactionManager">
<inject bean="TransactionManager" />
</property>
<property name="cachedConnectionManager">
<inject bean="CachedConnectionManager" />
</property>
<property name="initialContextProperties">
<inject bean="InitialContextProperties" />
</property>
</bean>
<bean name="messageDS" class="java.lang.Object">
<constructor factoryMethod="getDatasource">
<factory bean="messageDSBootstrap" />
</constructor>
</bean>
</deployment>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="jpa">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/messageDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
(9) Tôi tạo ra một thử nghiệm đơn vị như theo dõi, sử dụng thông tin bổ sung từ here.
package org.nkl;
import java.io.File;
import javax.naming.InitialContext;
import org.jboss.ejb3.embedded.EJB3StandaloneBootstrap;
import org.jboss.ejb3.embedded.EJB3StandaloneDeployer;
import org.junit.Test;
import org.nkl.model.MessageHandler;
public class BasicTest {
@Test
public void testEjb() throws Exception {
EJB3StandaloneBootstrap.boot(null);
EJB3StandaloneBootstrap.deployXmlResource("META-INF/beans.xml");
EJB3StandaloneDeployer deployer = EJB3StandaloneBootstrap
.createDeployer();
deployer.getArchives().add(new File("target/classes").toURI().toURL());
deployer.create();
deployer.start();
InitialContext context = new InitialContext();
MessageHandler messageHandler = (MessageHandler) context
.lookup("MessageHandlerBean/local");
messageHandler.saveMessages();
messageHandler.showMessages();
EJB3StandaloneBootstrap.shutdown();
}
}
(10) này sử dụng một SLSB đơn giản như:
package org.nkl.ejb;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.nkl.model.Message;
import org.nkl.model.MessageHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Stateless
public class MessageHandlerBean implements MessageHandler {
@PersistenceContext
private EntityManager em;
Logger logger = LoggerFactory.getLogger(MessageHandlerBean.class);
public void saveMessages() {
logger.info("In saveMessages");
em.persist(new Message("Hello World"));
}
@SuppressWarnings("unchecked")
public void showMessages() {
logger.info("In showMessages");
List messages = em.createQuery(
"select m from Message m order by m.text asc").getResultList();
for (Object o : messages) {
logger.info(((Message) o).getText());
}
}
}
(11) Và một lớp tin thực thể như:
package org.nkl.model;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "MESSAGES")
public class Message {
@Id
@GeneratedValue
@Column(name = "MESSAGE_ID")
private Long id;
@Column(name = "MESSAGE_TEXT")
private String text;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "NEXT_MESSAGE")
private Message nextMessage;
public Message(String text) {
this.text = text;
}
Message() {}
// setters/getters not shown.
}
Cho phép chỉ nói có một số lượng các trở ngại trong quá trình tiếp cận này.
Đáng chú ý là phải làm theo thứ tự phụ thuộc.
Chúc may mắn !!
để thực hiện kiểm tra đơn vị, cần thực hiện bên ngoài vùng chứa? –
tất cả những điều này không làm việc trên jbossAS7 cả. Dường như cuốn sách giờ đã quá lỗi thời. Bạn có biết cách làm cho nó hoạt động trên JBoss AS 7 không? Cụ thể là tôi không thể tìm thấy bất kỳ giải pháp thay thế nào cho 'EJB3StandaloneBootstrap.deployXmlResource' – linuxeasy