经过一段时间的搜索,我很累,希望你能帮助我。我一直在尝试编写一个带有数据源配置器的Java EE应用程序(如首次启动时的WordPress)。部署时不知道datasources
。使用TomEE的路由器示例,我找到了一种在应用程序生命周期内动态替换datasources
的方法。我目前正在使用以下代码生成datasources
:
GeronimoTransactionManager transactionManager = (GeronimoTransactionManager) OpenEJB.getTransactionManager();
Properties props = new Properties();
props.setProperty("driverClassName", "com.mysql.cj.jdbc.Driver");
props.setProperty("url", "jdbc:mysql://localhost/test");
props.setProperty("password", "test");
props.setProperty("passwordCipher", "PlainText");
props.setProperty("username", "test");
try {
DataSource underlying = new org.apache.tomcat.jdbc.pool.DataSourceFactory().createDataSource(props);
dataSource = new ManagedDataSource(underlying, transactionManager, transactionManager);
} catch (Exception e) {
e.printStackTrace();
}
我的问题是,此时没有执行ddl-generation
,因此entitymanager.persist(object);
会抛出一个未生成表的异常。
以下代码生成java.lang.AbstractMethodError
:
Map properties = new HashMap<>();
StringWriter create = new StringWriter();
properties.put("javax.persistence.schema-generation.scripts.action", "create");
properties.put("javax.persistence.schema-generation.scripts.create-target", create);
Persistence.generateSchema("router", properties);
是否存在动态加载资源的“hacky”Java EE方式,尤其是datasources
。如果没有,是否有TomEE方式?提前谢谢。