كيفية تكوين حاوية OpeneJB المضمنة للاختبارات بشكل صحيح؟
سؤال
هذا هو SLSB الخاص بي:
@Stateless
public class MyService {
PersistenceContext(unitName = "abc")
EntityManager em;
public boolean exists(int id) {
return this.em.find(Employee.class, id) != null;
}
}
هذا هو بلدي persistence.xml
(أنا أستخدم Glassfish V3):
<persistence>
<persistence-unit name="abc">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/MyDS</jta-data-source>
<properties>
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLInnoDBDialect" />
</properties>
</persistence-unit>
</persistence>
الآن أحاول إنشاء اختبار ، باستخدام حاوية OpeneJB المدمجة. هذا هو فصل الاختبار الخاص بي:
class MyServiceText {
@Test
public void testChecksExistence() throws Exception {
Properties properties = new Properties();
properties.setProperty(
javax.naming.Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory"
);
InitialContext ic = new InitialContext(properties);
// actual testing skipped
}
}
أود استخدام HSQL للاختبار. كيف يمكنني توجيه OpeneJB إلى أن وحدة الثبات الخاصة بي "abc"
يجب أن تشير إلى HSQL أثناء الاختبار؟ يجب أن أقوم بإنشاء نسخة جديدة من persistence.xml
؟ يجب أن أستخدم openejb.xml
؟ أنا ضائع في أمثلة وتوثيق.. :(
إنه مشروع Maven-3.
المحلول
أود أن أقترح وضع ملف اسمه jndi.properties
في src/test/resources
لتكوين OpeneJB الخاص بك. سيكون هذا متاحًا بعد ذلك في Test ClassPath ، يمكنك بعد ذلك استخدام محامي No-Argument لـ initialContext للبحث عن بيانات البيانات و EJBs. يشبه تكوين مثال ، فأنا أستخدم mySQL لمهمة البيانات الخاصة بي:
java.naming.factory.initial=org.apache.openejb.client.LocalInitialContextFactory
myDS=new://Resource?type=DataSource
myDS.JdbcDriver=com.mysql.jdbc.Driver
myDS.JdbcUrl=jdbc:mysql://127.0.0.1:3306/test
myDS.JtaManaged=true
myDS.DefaultAutoCommit=false
myDS.UserName=root
myDS.Password=root
يجب على OpeneJB بعد ذلك استبدال المرجع تلقائيًا في Pressistence.xml باستخدام مصدر البيانات هذا ، إذا كان هذا هو مصدر البيانات الوحيد ، فيجب أن يعمل هذا حتى لو كانت الأسماء مختلفة.
تعديل: إعدادات وحدة الثبات
بحسب ال الوثائق التي أشرت إليها يجب أن يكون من الممكن أيضًا تكوين خصائص وحدة الثبات من خلال jndi.properties:
abc.hibernate.hbm2ddl.auto=update
abc.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
لم أختبر هذا بنفسي لأنني أستخدم MySQL لكلا الاختبارين وعمليات الإعدام العادية ، فقط بأسماء قواعد البيانات المختلفة. واسمحوا لي أن أعرف ما إذا كان هذا يعمل ، لقد كنت أفكر في استبدال MySQL في حالات testcases أيضًا.