I have built a simple maven project for learning but I am stuck. I generated a bundle that contains api and implementation and a DAO service. The dao service (CarService) provides methods to create and select car entities (simple entities with just a name field as id). I dropped the generated bundle into karaf (4.2.1-SNAPSHOT) and it seems to run:
8<----------
karaf@root()> bundle:services 198
jpa Bundle (198) provides:
--------------------------
[javax.persistence.EntityManagerFactory]
[org.apache.aries.jpa.supplier.EmSupplier]
[javax.persistence.EntityManager]
[org.apache.aries.jpa.template.JpaTemplate]
[org.osgi.service.cm.ManagedService]
[org.osgi.service.jpa.EntityManagerFactoryBuilder]
[aries.example.api.CarService]
karaf@root()>
karaf@root()> service:list CarService
[aries.example.api.CarService]
------------------------------
component.id = 12
component.name = aries.example.service.CarServiceImpl
JpaTemplate.target = (osgi.unit.name=aries)
service.bundleid = 198
service.id = 316
service.scope = bundle
Provided by :
jpa Bundle (198)
karaf@root()>
8<----------
To see, if the service is ok, i added a command bundle to create cars with help
of this service, that is tracked with a service tracker in the execute method
of the command:
package aries.example.command;
import org.apache.karaf.shell.api.action.Action;
import org.apache.karaf.shell.api.action.Argument;
import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;
import org.osgi.util.tracker.ServiceTracker;
import aries.example.api.Car;
import aries.example.api.CarService;
@Command(scope = "aries", name = "create", description = "Create cars")
@Service
public class Create implements Action
{
@Argument(name = "Name", description = "Argument to the command",
required = true, multiValued = false)
private String name;
@Override
public Object execute() throws Exception
{
ServiceTracker<CarService, CarService> tracker = new
ServiceTracker<CarService,
CarService>(FrameworkUtil.getBundle(this.getClass()).getBundleContext(),
CarService.class, null);
tracker.open();
try
{
ServiceReference<CarService> reference =
tracker.getServiceReference();
CarService carService = tracker.getService(reference);
if (carService == null)
{
System.out.println("Service not available.");
}
else
{
carService.createCar(name);
Car car = carService.getCar(name);
System.out.println(car.getName());
}
}
finally
{
tracker.close();
}
return null;
}
}
The problem is, that the tracker does not return the service, or in the actual
example above, the service reference. I have just no idea what could going
wrong and I spent a lot of time with it. Any hints? Thanks!
signature.asc
Description: Message signed with OpenPGP
