我正在制作一个运行在karaf 4.0.4上的osgi应用程序。
我的应用程序使用一个PostgreSQL数据库。连接器由pax jdbc处理。我使用KarafJPA2.3.0
feature和Hibernate 4.3.6。最终的
功能。
一些模块提供可以添加/删除的服务。
TL/DR:有没有办法将我的实体拆分成多个包?
以下是我的情况:
我目前有一个名为model的模块
persistence.xml
文件@Entity
@Entity
和@继承(策略=继承类型。JOINED)
这是我的持久性文件:
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="maindb" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=maindb)</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<!-- <property name="hibernate.hbm2ddl.auto" value="create-drop"/> -->
</properties>
</persistence-unit>
</persistence>
以及用于访问这些实体的子类抽象服务:
public abstract class AbstractDaoService<T> implements IDaoService<T> {
@PersistenceContext(unitName = "maindb")
protected EntityManager entitymanager;
protected Class<T> clazz;
public AbstractDaoService(Class<T> clazz) {
this.clazz = clazz;
}
@Override
public T find(Object id) {
return entitymanager.find(clazz, id);
}
// rest of class is omitted
}
现在,我还有3个包裹。让我们把它们称为A、B和C。A通过blueprint注入的服务使用model
中的实体。这个很好用。
但问题是A也使用B和C提供的服务。在这两个捆绑包中的每一个捆绑包中,都有带注释的类@Entity
,以及扩展带有@heritation
注释的类。
B
和C
中找到
持久性。每个捆绑包中的xml
文件,但它在A
中不作为scheme工作,被视为不同,它不会从B
和C
B
一分为二:一个(B-Main)包含我想要实现的服务,另一个(B-frag)作为model
托管的捆绑包片段。bundleC
也是一样。安装model
,A
,只需B-Main
和B-frag
(或C-Main
和C-frag
)就可以了。但是如果我试图安装B-Main
,B-frag
,C-Main
和C-frag
,我会得到以下错误:。
javax.persistence.PersistenceException: [PersistenceUnit: maindb] Unable to build Hibernate SessionFactory
...
Caused by: org.hibernate.DuplicateMappingException: Duplicate class/entity mapping <my class annotated with @Inheritance`>
我认为这是因为当第二个片段被解析时,它会重新加载主机片段,并尝试重新映射已经存在的实体管理器上的实体(不确定)。
OSGi规范4.2 127.3.2定义了持久性捆绑包。它包含一个或多个持久性单元。持久性单元中定义的所有实体都必须源自捆绑包的jar。它们可能不是来自碎片。
我认为理论上可以将实体类放在另一个包中,但前提是持久化包导入这些包。所以你不能用这种方式来扩展类,因为主持久化包不知道它们。
我创建了一个依赖于SLF4J的捆绑包,因此使用Logback来实现OSGI。这一切都捆绑起来并安装正常,但是当我开始捆绑时,我得到以下异常: org.osgi.framework.BundleException: 無法解析 com.felix.test [20](R 20.0): missing requirements [com.felix.test [20](R 20.0)] osgi.wir
问题内容: 我正在使用OpenSSL,并且需要健全的默认CA列表。我使用的是cURL捆绑提供的 Mozilla的受信任CA列表。但是,我需要拆分这组CA证书,因为OpenSSL文档说: 如果CApath不为NULL,则它指向包含PEM格式的CA证书的目录。每个文件包含一个CA证书。通过CA使用者名称哈希值查找文件,因此必须可用。 例如,直接使用文件可以正常工作: 但是指定包含文件的目录不起作用:
我对这个(OSGI)真的是新手,试图做简单的例子。我不能让懒惰的修辞奏效。我知道有一些解决这些问题的蓝图,但在开始之前,我认为学习一些基础知识是很好的。 好吧,我已经改变了我的代码,但仍然没有运气。 外部应用程序,install bundles,启动framework,然后只启动DataServiceClient Bundle。不能访问任何bundle类。 以下是DataServiceClient
我使用EclipseIndigo使用OSGiJava框架开发了一些包。有一个主捆绑包,它依赖于其他捆绑包,并且具有要运行的主程序。如果我尝试在Eclipse中运行所有捆绑包,一切都正常工作,但是如果我将每个捆绑包保存为一个JAR,并在命令行中启动OSGi框架,当我尝试启动主捆绑包时,会出现异常<code>NoClassDefFoundError。找不到的类是依赖项。包的其余部分处于活动状态,主包刚
我在Apache Felix上开发了一个OSGI捆绑包。捆绑包公开不同的API来实时管理YouTube事件。捆绑包服务将通过REST服务公开,并将由用户通过Web浏览器(chrome、safari、mozilla)使用。 我为该帐户生成凭据Google(client_secret和client_id)并将其保存在文件中,然后我的代码使用此凭据并正常工作。 我使用这个类(在youtube文档中找到)
问题内容: 我有从mongodb导出的json文件,如下所示: 大约有30000行,我想将每一行拆分成自己的文件。 (我正在尝试将我的数据转移到榻榻米群集上) 我尝试这样做: 但是我发现它似乎减少了行的负载,而当我期望30000个奇数时,运行此命令的输出仅给了我50个奇数文件! 有没有一种逻辑方法可以使此操作不使用任何适合的方法删除任何数据? 问题答案: 假设您不在乎确切的文件名,如果要将输入拆分