用于MATLAB的Java JPA类

Rei*_*lly 7 java matlab jpa classpath

我在Windows XP Pro SP3上使用MATLAB R2007b,Java 1.6 SE,Eclipse Helios和MySql 5.

我正在尝试创建一个使用JPA注释来访问MySql 5数据库的类库.我们的想法是MATLAB脚本实例化这些Java对象,这些对象提供用于访问数据库的API.

我可以创建我的注释类,它们在Eclipse中工作(即JUnit测试).我可以将代码导出到jar,我可以从命令提示符运行.

我使用javaaddpath()更新MATLAB Java类路径.我可以在MATLAB中实例化我的类.但是,当我调用我的init(),它调用javax.persistence.Persistence.createEntityManagerFactory()时,我得到了可怕的

"没有EntityManager的持久性提供程序"

此错误通常意味着persistence.xml文件不在正确的位置.但它必须是因为我的jar从命令行工作.将META-INF文件夹添加到MATLAB java类路径中没有帮助.无论是否添加了META-INF,也不会提取ja​​r并将提取的文件夹结构添加到类路径中.

有没有人有任何想法,坚果与否?有没有人在任何版本的MATLAB中做过这个.

谢谢.

-reilly.

Rei*_*lly 8

好吧,我找到了"答案".在我看到关于MATLAB的"动态"和"静态"cp的差异的帖子之前的某个地方."static"cp是在启动时加载的文本文件."动态"cp在运行时加载,您通常使用m脚本调用来操作它.这就是我想要做的.

所以我将我的罐子添加到动态路径中并且它不起作用.

我将它们添加到静态路径的末尾并获得了不同的错误,这似乎与XML解析有关.进展!

然后我将我的罐子添加到静态路径的BEGINNING中并且它可以工作.

引用巴特辛普森:Craptackular.

谢谢你的所有想法.问我一个C#问题所以我可以回报......

-reilly.

  • 有道理 - 静态类路径对应于系统类加载器; 动态类路径使用自定义Matlab URLClassLoader完成.需要运行类的JAX-WS之类的API可能会遇到问题,因为静态类路径上的API类无法"看到"加载到动态类路径中的类定义; JPA可能遇到了同样的问题.如果要修改静态类路径,可以在启动Matlab的目录中使用自定义classpath.txt,而不是在Matlab安装本身中编辑classpath.txt; 更容易维护. (3认同)

zel*_*lus 8

在MATLAB中使用Java时,我经常遇到动态类路径的问题.作为一种解决方法,使用classpath.txt已解决了迄今为止的任何问题.

处理不同的环境(例如测试和生产)会在classpath.txtMATLAB启动目录中生成多个文件.使用不同的MATLAB版本增加了classpath.txt周围文件数量的另一个乘数.

ClassPathHacker.java是一个将动态类和jar文件添加到静态类路径的选项.使用这种方法不再需要触摸classpath.txt.您的Java类路径配置可以保留在预期的位置startup.m.


Jim*_*ugh 0

您是否绝对确定在调用中正确拼写了持久性单元的名称:

javax.persistence.Persistence.createEntityManagerFactory(String puName)
Run Code Online (Sandbox Code Playgroud)

这也会给你同样的错误。该名称区分大小写。