मेरी सलाह है कि मैं आपको देख सकने वाले सामान्य जाल में नहीं आना चाहूंगा, जो आपको लगता है कि आपको नक़्क़ाशीदार ईजेबी कंटेनर का उपयोग करने और उपयोग करने के बीच चयन करने की आवश्यकता है।
आप दोनों का उपयोग कर सकते हैं, आपको दोनों का उपयोग करना चाहिए, और जहां आपको दोनों का उपयोग करना मुश्किल लगता है, आपको अपने ईजेबी कंटेनर से बेहतर समर्थन और अधिक सुविधाएं मांगनी चाहिए।
निश्चित रूप से, आप ओपनईजेबी में लोगों को वास्तव में सहायक और दोनों दुनिया के सर्वश्रेष्ठ प्राप्त करने के लिए सुविधाओं को जोड़ने के लिए खुश होने से अधिक पाएंगे। लगभग सभी वास्तव में अच्छी सुविधाएं बहुत विशिष्ट चीजों को करने और इसे कठिन खोजने की कोशिश करने वाले उपयोगकर्ताओं के अनुरोधों के आसपास बनाई गई हैं।
स्टैंडर्ड EJBContainer एपीआई
package org.superbiz.stateless.basic;
import junit.framework.TestCase;
import javax.ejb.embeddable.EJBContainer;
public class CalculatorTest extends TestCase {
private CalculatorBean calculator;
/**
* Bootstrap the Embedded EJB Container
*
* @throws Exception
*/
protected void setUp() throws Exception {
EJBContainer ejbContainer = EJBContainer.createEJBContainer();
Object object = ejbContainer.getContext().lookup("java:global/simple-stateless/CalculatorBean");
assertTrue(object instanceof CalculatorBean);
calculator = (CalculatorBean) object;
}
पूर्ण स्रोत here
यह classpath और भार सभी सेम स्कैन करता है।
कोई स्कैनिंग, आसान मजाक दृष्टिकोण
थोड़ा अलग दृष्टिकोण जहां कोड में सब कुछ परिभाषित करते हैं। स्पष्ट रूप से मजाक करना आसान है क्योंकि आप इच्छानुसार आवश्यक बीन्स के नकली कार्यान्वयन की आपूर्ति कर सकते हैं।
@RunWith(ApplicationComposer.class)
public class MoviesTest extends TestCase {
@EJB
private Movies movies;
@Resource
private UserTransaction userTransaction;
@PersistenceContext
private EntityManager entityManager;
@Module
public PersistenceUnit persistence() {
PersistenceUnit unit = new PersistenceUnit("movie-unit");
unit.setJtaDataSource("movieDatabase");
unit.setNonJtaDataSource("movieDatabaseUnmanaged");
unit.getClazz().add(Movie.class.getName());
unit.setProperty("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
return unit;
}
@Module
public EjbJar beans() {
EjbJar ejbJar = new EjbJar("movie-beans");
ejbJar.addEnterpriseBean(new StatefulBean(MoviesImpl.class));
return ejbJar;
}
@Configuration
public Properties config() throws Exception {
Properties p = new Properties();
p.put("movieDatabase", "new://Resource?type=DataSource");
p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
return p;
}
@Test
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();
}
}
}
Full source here
अंतिम परिणाम
यह आदि परीक्षण के विभिन्न प्रकार, के बीच मतभेद पर ध्यान केंद्रित करने की इच्छा होती है लेकिन निश्चित रूप से कुछ एक व्यावहारिक बीच के लिए कहा जा करने के लिए नहीं है। मैं व्यक्तिगत रूप से जितना संभव हो सके "इकाई" और "एकीकरण" शैलियों को मिश्रण करने में सक्षम होने के साथ कुछ भी गलत नहीं देखता।
निश्चित रूप से, यह एक सराहनीय लक्ष्य है। विचारों और फीचर अनुरोधों को हमें करीब लाने के लिए बहुत स्वागत है।
हैलो डेविड, धन्यवाद आपके उत्तर के लिए एक बहुत। मैं दोनों दृष्टिकोणों को मिश्रित करने के बारे में सोच रहा था जो दोनों दृष्टिकोणों के लाभों को फसल में मदद करेंगे। – Bala