समस्या यह है कि Persistence.createEntityManagerFactory("abc")
"इसे स्वयं करें" एपीआई है और एम्बेडेड ईजेबी कंटेनर का लाभ नहीं लेता है। आप अपने टेस्ट केस में एक कंटेनर EntityManager
प्रबंधित कर सकते हैं।
जैसे संबंधित संबंधित जेडीआई/डेटासोर्स प्रश्न के साथ मैं आपको examples.zip में उदाहरणों की जांच करने की सलाह देता हूं। वे सब शुरू करने से संघर्ष करने के लिए तैयार किए गए हैं।
यहां testcase-injection
उदाहरण से एक स्निपेट है जो दिखाता है कि आप एक एंटीटी मैनेजर और अन्य चीजों को एक परीक्षण में उपयोग के लिए कंटेनर से कैसे प्राप्त कर सकते हैं।
पहले, अपने परीक्षण कोड के लिए स्कैनिंग चालू करने के लिए अपने परीक्षण के लिए एक खाली EJB-jar.xml या अनुप्रयोग-client.xml जोड़ें:
- src/परीक्षण/संसाधन/META-INF/आवेदन के client.xml
फिर, @org.apache.openejb.api.LocalClient
के साथ अपने टेस्ट केस को एनोटेट करें और वास्तविक इंजेक्शन के लिए मानक जावाई एनोटेशन का उपयोग करें।
@LocalClient
public class MoviesTest extends TestCase {
@EJB
private Movies movies;
@Resource
private UserTransaction userTransaction;
@PersistenceContext
private EntityManager entityManager;
public void setUp() throws Exception {
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");
p.put("movieDatabase", "new://Resource?type=DataSource");
p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
InitialContext initialContext = new InitialContext(p);
// Here's the fun part
initialContext.bind("inject", this);
}
movieDatabase
के रूप में केवल डेटा स्रोत है कि हम से सेट किया हुआ, OpenEJB स्वचालित रूप से आपके persistence.xml को संशोधित करने की आवश्यकता के बिना अपने हठ इकाई के लिए कि डेटा स्रोत प्रदान करेंगे है। आप <jta-data-source>
या <non-jta-data-source>
खाली भी छोड़ सकते हैं और ओपनईजेबी को अभी भी पता चलेगा कि क्या करना है।
लेकिन पूर्णता के लिए के लिए है, तो यहां इस विशेष आवेदन परीक्षण में persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="movie-unit">
<jta-data-source>movieDatabase</jta-data-source>
<non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>
<class>org.superbiz.testinjection.Movie</class>
<properties>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
</properties>
</persistence-unit>
</persistence>
तो मज़ा हिस्सा परिभाषित किया गया है, यह सब का उपयोग कर एक साथ है
public void test() throws Exception {
userTransaction.begin();
try {
entityManager.persist(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992));
entityManager.persist(new Movie("Joel Coen", "Fargo", 1996));
entityManager.persist(new Movie("Joel Coen", "The Big Lebowski", 1998));
List<Movie> list = movies.getMovies();
assertEquals("List.size()", 3, list.size());
for (Movie movie : list) {
movies.deleteMovie(movie);
}
assertEquals("Movies.getMovies()", 0, movies.getMovies().size());
} finally {
userTransaction.commit();
}
}