mvn archetype:generate -DgroupId=com.example -DartifactId=my-library -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
<dependencies>
<!-- OSGi dependencies -->
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component</artifactId>
<version>1.4.0</version>
</dependency>
<!-- JPA dependencies -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>org.eclipse.persistence.jpa</artifactId>
<version>2.7.7</version>
</dependency>
</dependencies>
public interface MyService {
void doSomething();
}
@Component
public class MyServiceImpl implements MyService {
@Override
public void doSomething() {
}
}
<scr:component xmlns:scr="https://www.osgi.org/xmlns/scr/v1.3.0">
<implementation class="com.example.MyServiceImpl"/>
<service>
<provide interface="com.example.MyService"/>
</service>
</scr:component>
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
}
public interface UserDao {
User findById(Long id);
void save(User user);
void update(User user);
void delete(User user);
}
@Component
public class UserDaoImpl implements UserDao {
@PersistenceContext
private EntityManager entityManager;
@Override
public User findById(Long id) {
return entityManager.find(User.class, id);
}
@Override
public void save(User user) {
entityManager.persist(user);
}
@Override
public void update(User user) {
entityManager.merge(user);
}
@Override
public void delete(User user) {
entityManager.remove(user);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
version="2.2">
<persistence-unit name="my-persistence-unit" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
</persistence-unit>
</persistence>
public class Main {
public static void main(String[] args) {
FrameworkFactory frameworkFactory = ServiceLoader.load(FrameworkFactory.class).iterator().next();
Map<String, String> config = new HashMap<>();
Framework framework = frameworkFactory.newFramework(config);
framework.init();
framework.start();
ServiceReference<MyService> serviceReference = framework.getBundleContext().getServiceReference(MyService.class);
MyService myService = framework.getBundleContext().getService(serviceReference);
myService.doSomething();
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("my-persistence-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();
UserDao userDao = new UserDaoImpl();
userDao.save(new User("John Doe"));
User user = userDao.findById(1L);
System.out.println(user.getName());
entityManager.close();
entityManagerFactory.close();
framework.stop();
framework.waitForStop(0);
}
}