كيفية تكوين حاوية OpeneJB المضمنة للاختبارات بشكل صحيح؟

StackOverflow https://stackoverflow.com/questions/4042232

سؤال

هذا هو 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 أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top