Thanks for your reply David,

I will definitely have a look at ops4j pax-runner and how you use it in
Aries tests. Thanks for the advice.

Your advice regarding DAO testing is also relevant. I do it in a similar way
today but had some problems with the "out-of-OSGi" solution interferring
with my "in-OSGi" solution. By using a default constructor + dependency
injection in OSGi and a constructor taking the entity manager "in-OSGi" I
can probably get rid of that problem. Will look into it.

On the same subject (if you bear with me), I forgot to ask about handling a
data source "in-OSGi" and "out-of-OSGi" respectively.

Prior to deploying my project in an OSGi container, I specified the JDBC
properties in persistence.xml. This doesn't work very well under OSGi.
Instead one specifies what data source service to use and then deploys a
bundle that publishes a data source as a service. The latter doesn't work
well when performing unit tests "out-of-OSGi".

My strategy so far has been to maintain separate persistence descriptors for
the different scenarios: A persistence.xml for the unit tests and a
persistence-openjpa.xml for use in the container. The latter won't be picked
up automatically outside a container but can be specified explicitly using
Meta-Persistence in OSGi. It's not an ideal solution and I'm not yet sure
that it will work. Is there a best practice in this area?

Thanks,

/Bengt

2010/9/7 David Jencks <[email protected]>

>
> On Sep 7, 2010, at 12:10 AM, Bengt Rodehav wrote:
>
> > Lots of mails from me today - just trying to get on top of things....
> >
> > I'm investigating the best way to deploy a JPA based application in OSGi.
> I've successfully used Karaf and iPojo in combination with Camel before but
> JPA seems a bit more complicated.
> >
> > Using Aries components (jpa, transaction and blueprint) seems to provide
> the functionality I need. However, one problem for me is how to being able
> to unit test my services without having to startup a Karaf instance. In the
> past I've been using Spring/Hibernate for this purpose. Spring is very
> flexible in the sense that I can configure a test environment for my unit
> test and still being able to test services that uses transactions.
> >
> > In more detail, my problem is as follows:
> >
> > I have DAO objects containing persistence logic using JPA. These are used
> by my service objects that contains business logic and also  specifies
> transaction requirements. I can deploy those objects in Karaf using Aries.
> However, I don't know how to unit test those services since they need the
> presence of Aries. I know that this might be defined as integration tests
> (and not unit tests) for that reason but I would still like a convenient way
> to execute these tests as part of my maven build and preferrably without
> having to deploy Karaf. Is that possible?
> >
> > If not, what is the recommended way (best practice) for these kind of
> tests?
>
> Use ops4j pax-runner.  There are a bunch of integration tests in aries that
> use this.
> >
> > BTW it is not easy to unit test the DAO objects either since I need to
> get hold of an entity manager in completely different ways depending on if
> I'm in an OSGi environment or not. I could take some advice on this subject
> as well...
>
> If you code your DAO objects using constructor dependency injection, one of
> the arguments being the EMF, can't you inject it in blueprint/osgi and
> simply supply it as a constructor argument in unit tests?
>
> If you do some kind of service lookup in your DAO then you will tie it to
> whatever lookup technology you are using (service registry for osgi, jndi
> for java ee,....)
>
> hope this is relevant to what you are asking about...
> david jencks
>
> >
> > Best regards,
> >
> > /Bengt
> >
>
>

Reply via email to