LinkMove will definitely work, but is targeting ongoing DB synchronization 
instead of a one-off migration. I would personally deal with it in a more 
low-tech way. Since you only need to do it once, the simplest tool is the best. 
I would use DFLib library [1] to read data from one DB and write to another. It 
was also presented in Frankfurt, and has evolved a lot since then. Here is an 
example:

JdbcConnector fb = 
Jdbc.connector("frontbase_url").username(..).password(..).build();
JdbcConnector pg = Jdbc.connector("pg_url").username(..).password(..).build();

for(String table : tables) {
        DataFrame data = fb.tableLoader(table).load();
        pg.tableSaver(table).save(data);
}
As you see it can literally be done in a few lines of code and requires no 
model. 
Andrus
[1] https://nhl.github.io/dflib-docs/#jdbc

> On Apr 16, 2021, at 6:00 AM, Michael Gentry <blackn...@gmail.com> wrote:
> 
> Hi Jérémy,
> 
> I've never used it, but Andrus (and others) have a project called LinkMove
> which may work:
> 
> https://github.com/nhl/link-move
> 
> I don't see a way to re-use a Cayenne model as the source AND the target,
> but perhaps that is also an option (instead of the XML source), too.
> 
> 
> On Fri, Apr 16, 2021 at 4:14 AM Jérémy DE ROYER <jeremy.dero...@ingencys.net>
> wrote:
> 
>> Sorry, please read
>> 
>> « Migrate from FrontbaseSQL to PostgreSQL »  😄
>> 
>> Jérémy
>> 
>>> Le 16 avr. 2021 à 10:04, Jérémy DE ROYER <jeremy.dero...@ingencys.net>
>> a écrit :
>>> 
>>> Hi Hugi,
>>> 
>>> Unfortunately, I think you’re right.
>>> 
>>> I wanted to leave FrontbaseSQL too but as Andrus say, the meeting in
>> Frankfurt help me to resolve some cases and finally we keep our softwares
>> using FrontbaseSQL.
>>> 
>>> According to your experience, is there an easy way to migrate/transfert
>> from PostgreSQL to FrontBaseSQL ?
>>> 
>>> It could respond to the request from developers to have access to
>> programming tools with the database, not offered by FrontbaseSQL.
>>> 
>>> Thank’s for this highlight,
>>> 
>>> Jérémy
>>> 
>>>> Le 16 avr. 2021 à 09:53, Hugi Thordarson <h...@karlmenn.is> a écrit :
>>>> 
>>>> Hi Jérémy,
>>>> 
>>>> I believe you hit a bug in the FrontBase JDBC driver:
>>>> https://issues.apache.org/jira/browse/CAY-2574 <
>> https://issues.apache.org/jira/browse/CAY-2574>
>>>> 
>>>> Andrus wrote to FrontBase about this after our Frankfurt meetup:
>>>> 
>> https://mail-archives.apache.org/mod_mbox/cayenne-dev/201905.mbox/%3C52EC2486-4736-4854-AE49-A7CF77904E52%40objectstyle.org%3E
>> <https://mail-archives.apache.org/mod_mbox/cayenne-dev/201905.mbox/browser
>>> 
>>>> 
>>>> I haven't seen anything from FB about this since this thread, perhaps
>> you should give their support a check?
>>>> I also wrote to them last year about their JDBC driver not working on
>> more recent Java versions, but don't think they've fixed it. I ended up
>> migrating that one last FrontBase app to Postgres.
>>>> 
>>>> Cheers,
>>>> - hugi
>>>> 
>>>> 
>>>> 
>>>>> On 15 Apr 2021, at 20:59, Jérémy DE ROYER <jeremy.dero...@ingencys.net>
>> wrote:
>>>>> 
>>>>> Hi John,
>>>>> 
>>>>> I know that FrontbaseSQL is not commonly used but our all apps are
>> based on.
>>>>> 
>>>>> I’ve just :
>>>>> - created the model explained on the doc
>> https://cayenne.apache.org/docs/3.0/modeling-single-table-inheritance.html
>>>>> - wrote the code below inside the ‘Application’ class of a simple woapp
>>>>> 
>>>>> But yes, maybe Cayenne is not done to work with FrontbaseSQL… as it
>> works well with PostregSQL.
>>>>> 
>>>>> Thank’s for your answer and have a nice day,
>>>>> 
>>>>> Jérémy
>>>>> 
>>>>> Le 15 avr. 2021 à 22:50, John Huss <johnth...@gmail.com<mailto:
>> johnth...@gmail.com>> a écrit :
>>>>> 
>>>>> I don't think FrontBase is very commonly used. I would recommend
>> submitting
>>>>> a minimal example of the problem and someone should be able to fix the
>>>>> issue then.
>>>>> 
>>>>> On Thu, Apr 15, 2021 at 3:44 PM Jérémy DE ROYER <
>> jeremy.dero...@ingencys.net<mailto:jeremy.dero...@ingencys.net>>
>>>>> wrote:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> I switched my model from FrontBase to PostgreSQL and it works great.
>>>>> 
>>>>> Does someone use Cayenne 4.1 with FrontbaseSQL successfully ?
>>>>> 
>>>>> Is there something specific to know ?
>>>>> 
>>>>> Thank’s for any tip,
>>>>> 
>>>>> Jérémy
>>>>> 
>>>>> Le 14 avr. 2021 à 23:05, Jérémy DE ROYER <jeremy.dero...@ingencys.net
>> <mailto:jeremy.dero...@ingencys.net>>
>>>>> a écrit :
>>>>> 
>>>>> Hi all,
>>>>> 
>>>>> I’m trying to find a solution for the (temporary ?) lack of horizontal
>>>>> inheritance so I did model vertical inheritance following :
>>>>> 
>>>>> https://cayenne.apache.org/docs/3.0/modeling-vertical-inheritance.html
>>>>> 
>>>>> using a Frontbase database.
>>>>> 
>>>>> I did :
>>>>> - create the model,
>>>>> - generate the database,
>>>>> - fix lack of jars and other things like username, password, jdbc
>> driver
>>>>> 
>>>>> The demo code below starts well and connects to database...
>>>>> 
>>>>> try {
>>>>> ServerRuntime cayenneRuntime = ServerRuntime.builder()
>>>>> .addConfig("cayenne-CayenneTest.xml")
>>>>> .build();
>>>>> 
>>>>> ObjectContext context = cayenneRuntime.newContext();
>>>>> 
>>>>> Book _newBook = context.newObject(Book.class);
>>>>> _newBook.setTitle("Nouveau Book");
>>>>> _newBook.setCreated(new Date());
>>>>> 
>>>>> context.commitChanges();
>>>>> 
>>>>> EBook _newEBook = context.newObject(EBook.class);
>>>>> _newEBook.setTitle("Nouveau EBook");
>>>>> _newEBook.setCreated(new Date());
>>>>> _newEBook.setDownloadUrl("https://www.google.fr/";);
>>>>> 
>>>>> context.commitChanges();
>>>>> 
>>>>> PaperBook _newPaperBook = context.newObject(PaperBook.class);
>>>>> _newPaperBook.setTitle("Nouveau PaperBook");
>>>>> _newPaperBook.setCreated(new Date());
>>>>> _newPaperBook.setShippingWeight(1000);
>>>>> 
>>>>> context.commitChanges();
>>>>> 
>>>>> List<Book> _books = ObjectSelect.query(Book.class).select(context);
>>>>> 
>>>>> System.out.println("** ALL **");
>>>>> 
>>>>> for (Book currentBook : _books)
>>>>> {
>>>>> System.out.println(currentBook.getTitle() + " created on " +
>>>>> currentBook.getCreated());
>>>>> }
>>>>> }
>>>>> catch (Exception e) {
>>>>> System.out.println("An error occured : " + e.getMessage());
>>>>> e.printStackTrace();
>>>>> }
>>>>> 
>>>>> …but throws this exception
>>>>> 
>>>>> An error occured : [v.4.1 Jul 14 2020 10:40:45] Commit Exception
>>>>> org.apache.cayenne.CayenneRuntimeException: [v.4.1 Jul 14 2020
>> 10:40:45]
>>>>> Commit Exception
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>>>>> at your.app.Application.<init>(Application.java:50)
>>>>> 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:423)
>>>>> at java.lang.Class.newInstance(Class.java:442)
>>>>> at com.webobjects.appserver.WOApplication.main(WOApplication.java:547)
>>>>> at your.app.Application.main(Application.java:25)
>>>>> Caused by: java.lang.NullPointerException
>>>>> at
>>>>> 
>> org.apache.cayenne.access.jdbc.SQLTemplateAction.execute(SQLTemplateAction.java:242)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.jdbc.SQLTemplateAction.runWithNamedParametersBatch(SQLTemplateAction.java:179)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.jdbc.SQLTemplateAction.performAction(SQLTemplateAction.java:111)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97)
>>>>> at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:273)
>>>>> at
>>>>> 
>> org.apache.cayenne.dba.frontbase.FrontBasePkGenerator.longPkFromDatabase(FrontBasePkGenerator.java:143)
>>>>> at
>>>>> 
>> org.apache.cayenne.dba.JdbcPkGenerator.generatePk(JdbcPkGenerator.java:220)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataDomainInsertBucket.createPermIds(DataDomainInsertBucket.java:168)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataDomainInsertBucket.appendQueriesInternal(DataDomainInsertBucket.java:76)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataDomainSyncBucket.appendQueries(DataDomainSyncBucket.java:78)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataDomainFlushAction.preprocess(DataDomainFlushAction.java:185)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:143)
>>>>> at
>> org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:624)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:594)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:822)
>>>>> at
>>>>> 
>> org.apache.cayenne.tx.TransactionFilter.lambda$onSync$0(TransactionFilter.java:61)
>>>>> at
>>>>> 
>> org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInTransaction(DefaultTransactionManager.java:183)
>>>>> at
>>>>> 
>> org.apache.cayenne.tx.DefaultTransactionManager$BaseTransactionHandler.performInNewTransaction(DefaultTransactionManager.java:155)
>>>>> at
>>>>> 
>> org.apache.cayenne.tx.DefaultTransactionManager$NestedTransactionHandler.handle(DefaultTransactionManager.java:98)
>>>>> at
>>>>> 
>> org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:65)
>>>>> at
>>>>> 
>> org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:43)
>>>>> at
>>>>> 
>> org.apache.cayenne.tx.TransactionFilter.onSync(TransactionFilter.java:61)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:821)
>>>>> at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:581)
>>>>> at
>>>>> 
>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:742)
>>>>> ... 9 more
>>>>> 
>>>>> It seem’s to be related to pk generation so I try a select unqiue from
>>>>> Book in FrontBase and it worked lije a charm.
>>>>> 
>>>>> Any idea ?
>>>>> 
>>>>> Many thank’s,
>>>>> 
>>>>> Jérémy
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>> 
>> 
>> 

Reply via email to