MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   MATLAB仅在前几秒钟内找到eclipselink的persistence.xml (https://www.labfans.com/bbs/showthread.php?t=24221)

poster 2019-12-10 20:48

MATLAB仅在前几秒钟内找到eclipselink的persistence.xml
 
这是[URL="https://stackoverflow.com/questions/4390740/using-eclipselink-in-java-code-run-from-matlab"]在从MATLAB运行的Java代码[/URL]中[URL="https://stackoverflow.com/questions/4390740/using-eclipselink-in-java-code-run-from-matlab"]使用eclipselink中[/URL]描述的问题的继续,并且类似于[URL="https://stackoverflow.com/questions/4376565/java-jpa-class-for-matlab"]Java JPA Class for MATLAB中[/URL]描述的问题,但是那里描述的公认解决方案尚未完全解决问题。

我正在尝试使用eclipselink连接到matlab中的oracle数据库。从前面帖子的答案中,我将代码放在静态类路径上(在classpath.txt中)。当我这样做时,就可以使用它,但前提是必须在载入Matlab后的最初几秒钟内(通过调用Persistence.createEntityManager(...))创建EntityManager。如果我在启动Matlab之后等待5秒钟以上,则完全相同的代码将给出“未提供持久性”异常。我已经确认,它确实可以工作,但实际上它使用的是与之不同的类加载器。我唯一能想到的是,类路径是在与Matlab控制台不同的线程上初始化的,并且如果我快速运行它,则Matlab的OSGI类加载器尚未初始化,因此它使用默认的Java类加载器。

这显然不是可接受的解决方案,并且似乎还没有真正解决Matlab类加载器无法找到persistence.xml的原因。有人还有其他想法吗?可能是因为我如何初始化eclipselink?除了在我之前从事此代码工作的人,还是我除了找到将persistence.xml放在类路径的META-INF文件夹中之外,都没有办法找到它。



[B]回答:[/B]

我找到了一个可行的解决方案,尽管我对此并不满意。首次初始化PersistenceProviderResolverHolder时,它将构造一个称为DefaultPersistenceProviderResolver的私有内部类,该类在被询问时将在您的META-INF目录中找到persistence.xml。稍后,当您调用Persistence.createEntityManagerFactory()时,它将要求PersistenceProviderResolverHolder作为解析器,然后要求解析器找到persistence.xml。

当您在Matlab中运行此程序时,问题在于在初始化过程中的某些时候,为PersistenceProviderResolverHolder提供了一个Activator类,该类可以替换默认的解析程序。据我所知,这个Activator类试图使用OSGI查找任何持久性配置。理想情况下,我应该能够进行配置,使其也可以找到persistence.xml,但是到目前为止,我还没有成功。

我想出的解决方案是制作DefaultPersistenceProviderResolver类的自己的副本,并将其实例设置为PersistenceProviderResolverHolder中的解析器。这将替换已放入其中的Activator类,并将其返回以在META-INF文件夹中查找persistence.xml。我真的不喜欢这样做,但这是我在一周的时间里就能开始工作的唯一解决方案。



[url=https://stackoverflow.com/questions/4434209]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 01:09

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.