Hi James, With DataNucleus the metadata can be specified either in XML or in annotations. (I haven't tried this out, but my understanding is that)... if both are present, then the XML files take precedence over any annotations.
So, in this case, we have the following source (abbreviated): package org.isisaddons.module.security.dom.user; @javax.jdo.annotations.PersistenceCapable( identityType = IdentityType.DATASTORE, schema = "isissecurity", table = "ApplicationUser") public class ApplicationUser ... { ... } So, you should be able to create META-INF/package.jdo file: <?xml version="1.0" encoding="UTF-8" ?> <jdo xmlns="http://xmlns.jcp.org/xml/ns/jdo/jdo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/jdo/jdo http://xmlns.jcp.org/xml/ns/jdo/jdo_3_0.xsd" version="3.0"> <package name="org.isisaddons.module.security.dom.user"> <class name="ApplicationUser" schema="xxx" <!-- whatever works here... --> table="IsisSecurityApplicationUser"> </class> </package> </jdo> There are lots of other ways of splitting out and providing this XML metadata; see the docs below. Let us know how you get on; if it works I'll add to the hints/tips on our website. Thx Dan http://www.datanucleus.org/products/accessplatform_4_1/jdo/metadata.html http://www.datanucleus.org/products/accessplatform_4_1/jdo/metadata_xml.html#class http://www.datanucleus.org/products/accessplatform_4_1/jdo/class_mapping.html On 19 November 2015 at 14:25, Chuangyu <zhu.chuan...@gmail.com> wrote: > Thank you, Jeroen. > > If do not create schema manually, it can run so far, just ignore "create > schema" errors. > > MySQL official document comment: > CREATE SCHEMA is a synonym for CREATE DATABASE as of MySQL 5.0.2 > > I don't want to create separate database for isis addons. > > > James > > 2015-11-16 23:51 GMT+08:00 Jeroen van der Wal <jer...@stromboli.it>: > > > We actively use Apache Isis with HSQLDB, PostgreSQL and MS SQL Server and > > they all support separate schemas within the same database. I would like > to > > see Apache Isis run without issues in the scenario you have but I don't > > want to lose the security that database schemas provide in preventing > > similar named entities to clash. > > > > What options do you have? Can you > > > > On 16 November 2015 at 14:40, Chuangyu <zhu.chuan...@gmail.com> wrote: > > > > > Hi Jeroen and Stephen, > > > Thanks for your response. > > > Jeroen ,your solution may not fit my scenario. > > > I run 3 instance of this system but all 3 databases on one server .(eg. > > > db1,db2,db3) > > > Each instance has username/password separately.(eg, user1, user2, > user3) > > > If create schema on this server , all databases would share the schema. > > > > > > If tables will create in the default schema, as Stephen said, it may be > > can > > > work. > > > But it is hard to maintenance. > > > > > > > > > James. > > > > > > > > > 2015-11-16 19:27 GMT+08:00 Stephen Cameron <steve.cameron...@gmail.com > >: > > > > > > > Yes, that was a problem for me with MySQL and I used the same > solution > > to > > > > manually create the schemas, but then the module tables seem to have > > been > > > > created in the default schema anyway, so presently a mystery! > > > > > > > > On Mon, Nov 16, 2015 at 10:22 PM, Jeroen van der Wal < > > > jer...@stromboli.it> > > > > wrote: > > > > > > > > > Hi James, > > > > > > > > > > Starting with Isis 1.10.0 we've moved the tables of the modules to > > > their > > > > > own database schema to avoid clashes with similar named entities in > > > your > > > > > own domain or other modules. Here's [1] a sample of an MSSQL script > > > that > > > > we > > > > > used. You have create something similar for MySQL I guess. > > > > > > > > > > Looking at the error message I also suspect that the automatic > > creation > > > > of > > > > > schemas does not work on MySQL, perhaps it requires delimiters > around > > > the > > > > > schema name? Try creating the schemas manually as a workaround. > > > > > > > > > > [1] https://gist.github.com/jcvanderwal/c30e2d8c4d11aec5b0c0 > > > > > > > > > > > > > > > On 16 November 2015 at 11:10, Chuangyu <zhu.chuan...@gmail.com> > > wrote: > > > > > > > > > > > Hi, > > > > > > > > > > > > I create a new 1.10 simple app and copy all code from 1.8 to > 1.10. > > > > > > And made some change to fit new 1.10 specs. > > > > > > When start system , Eclipse show errors on console box. > > > > > > It seems each addon module occur one error. > > > > > > Below is one of errors: > > > > > > > > > > > > Unable to create schema > > > > > > com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You > have > > > an > > > > > > error in your SQL syntax; check the manual that corresponds to > your > > > > MySQL > > > > > > server version for the right syntax to use near > > '"isissessionlogger"' > > > > at > > > > > > line 1 > > > > > > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native > > > > Method) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > > > > > > at > java.lang.reflect.Constructor.newInstance(Constructor.java:422) > > > > > > at com.mysql.jdbc.Util.handleNewInstance(Util.java:408) > > > > > > at com.mysql.jdbc.Util.getInstance(Util.java:383) > > > > > > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1062) > > > > > > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4226) > > > > > > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4158) > > > > > > at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615) > > > > > > at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776) > > > > > > at > com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2834) > > > > > > at > com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2783) > > > > > > at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:908) > > > > > > at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:788) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.CreateSchemaObjectFromClassMetadata.exec(CreateSchemaObjectFromClassMetadata.java:117) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.objectstore.jdo.datanucleus.CreateSchemaObjectFromClassMetadata.loaded(CreateSchemaObjectFromClassMetadata.java:76) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.datanucleus.metadata.MetaDataManagerImpl.processListenerLoadingCall(MetaDataManagerImpl.java:1705) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.datanucleus.metadata.MetaDataManagerImpl.getMetaDataForClass(MetaDataManagerImpl.java:1681) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.datanucleus.metadata.MetaDataManagerImpl.getMetaDataForClass(MetaDataManagerImpl.java:1580) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.datanucleus.metadata.MetaDataManagerImpl.getReferencedClasses(MetaDataManagerImpl.java:3009) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.addClassTables(RDBMSStoreManager.java:2981) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.datanucleus.store.rdbms.RDBMSStoreManager$ClassAdder.run(RDBMSStoreManager.java:2872) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.datanucleus.store.rdbms.AbstractSchemaTransaction.execute(AbstractSchemaTransaction.java:119) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.datanucleus.store.rdbms.RDBMSStoreManager.createSchemaForClasses(RDBMSStoreManager.java:3842) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.persistence.DataNucleusApplicationComponents.createSchema(DataNucleusApplicationComponents.java:191) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.persistence.DataNucleusApplicationComponents.createPmfAndSchemaIfRequired(DataNucleusApplicationComponents.java:150) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.persistence.DataNucleusApplicationComponents.initialize(DataNucleusApplicationComponents.java:105) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.persistence.DataNucleusApplicationComponents.<init>(DataNucleusApplicationComponents.java:98) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory.createDataNucleusApplicationComponents(PersistenceSessionFactory.java:92) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory.init(PersistenceSessionFactory.java:73) > > > > > > at > > > > > > > > > org.apache.isis.core.runtime.system.IsisSystem.init(IsisSystem.java:203) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.core.runtime.runner.IsisInjectModule.provideIsisSystem(IsisInjectModule.java:140) > > > > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > > > > > > at java.lang.reflect.Method.invoke(Method.java:497) > > > > > > at > > > > > com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) > > > > > > at com.google.inject.Scopes$1$1.get(Scopes.java:65) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:75) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:73) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:73) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:60) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > com.google.inject.internal.InjectorImpl.injectMembers(InjectorImpl.java:944) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.init(IsisWicketApplication.java:265) > > > > > > at > > > > > > > tm.webapp.TruckMonitorApplication.init(TruckMonitorApplication.java:75) > > > > > > at > > > org.apache.wicket.Application.initApplication(Application.java:823) > > > > > > at > > > > > > > > > org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:427) > > > > > > at > > > > > > > > > org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:351) > > > > > > at > > > > > > > > > org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:138) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:852) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:298) > > > > > > at > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.webapp.WebAppContext.startWebapp(WebAppContext.java:1349) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1342) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:741) > > > > > > at > > > > > org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:505) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:132) > > > > > > at org.eclipse.jetty.server.Server.start(Server.java:387) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:61) > > > > > > at org.eclipse.jetty.server.Server.doStart(Server.java:354) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) > > > > > > at > > > > > > > > > > > > > > > > > > > > > > > > > > > org.apache.isis.core.webserver.WebServerBootstrapper.bootstrap(WebServerBootstrapper.java:91) > > > > > > at > org.apache.isis.core.webserver.WebServer.run(WebServer.java:107) > > > > > > at > org.apache.isis.core.webserver.WebServer.main(WebServer.java:71) > > > > > > at org.apache.isis.WebServer.main(WebServer.java:25) > > > > > > > > > > > > > > > > > > I check addon's dom module adn find > > > > > > > > > > > > @javax.jdo.annotations.PersistenceCapable( > > > > > > identityType = IdentityType.DATASTORE, > > > > > > schema = "isissecurity", > > > > > > table = "ApplicationUser") > > > > > > > > > > > > There is schema = "isissecurity" than version 1.8.0 and table > is > > > > > > ApplicationUser not IsisSecurityApplicationUser. > > > > > > > > > > > > So how to migration these tables? And how to avoid "schema" > clause > > in > > > > > > MySQL? > > > > > > > > > > > > Thanks, > > > > > > > > > > > > James Chu. > > > > > > > > > > > > > > > > > > > > >