How do assemble your JAR file? Are you using maven-shade-plugin or
something like that? That may be a problem as it will strip out meta
information used by Cayenne's auto-loading mechanics.
Can you try to include Java8Module directly, like this:

ServerRuntime.builder().addModule(new Java8Module())

On Thu, Oct 12, 2017 at 6:46 PM, Andrew Willerding
<awillerd...@itsurcom.com> wrote:
> And if I look in the packaged JAR file I can see the cayenne java8 classes
> so I don't understand why there is an issue with it missing?  Is there
> something else to check or a dependency I'm missing that is needed by
> Cayenne to utilize the java8 classes?
>
>
> On 12/10/17 10:58 AM, Nikita Timofeev wrote:
>>
>> Well, this definitely looks like cayenne-java8 module missing. Cayenne
>> tries to store your LocalDateTime as byte[].
>>
>> On Thu, Oct 12, 2017 at 4:39 PM, Andrew Willerding
>> <awillerd...@itsurcom.com> wrote:
>>>
>>> Hi Nikita,
>>>
>>> Your hunch is correct and I'm even more confused. I deleted all the
>>> records
>>> in the database and re-ran my application.  It's complaining of a cast to
>>> Date but I don't have any Date fields or objects.  Now I'm getting the
>>> following exception:
>>>
>>> org.apache.cayenne.CayenneRuntimeException: [v.4.0.B1 Jun 02 2017
>>> 15:11:18]
>>> Commit Exception
>>>      at
>>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:774)
>>>      at
>>> org.apache.cayenne.access.DataContext.commitChanges(DataContext.java:691)
>>>      at
>>> com.callistacti.quest.crsolstasv2.ImportThread.run(ImportThread.java:258)
>>>      at java.lang.Thread.run(Thread.java:748)
>>> Caused by: java.sql.SQLException: Cannot convert class [B to SQL type
>>> requested due to java.lang.ClassCastException - [B cannot be cast to
>>> java.util.Date
>>>      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)
>>>      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:897)
>>>      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:886)
>>>      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
>>>      at
>>> com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3761)
>>>      at
>>>
>>> com.mysql.jdbc.JDBC42PreparedStatement.setObject(JDBC42PreparedStatement.java:99)
>>>      at
>>> com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3580)
>>>      at
>>>
>>> com.mysql.jdbc.JDBC42PreparedStatement.setObject(JDBC42PreparedStatement.java:83)
>>>      at
>>>
>>> org.apache.cayenne.access.types.ByteArrayType.setJdbcObject(ByteArrayType.java:157)
>>>      at
>>>
>>> org.apache.cayenne.access.types.ByteArrayType.setJdbcObject(ByteArrayType.java:40)
>>>      at
>>>
>>> org.apache.cayenne.access.types.ExtendedTypeDecorator.setJdbcObject(ExtendedTypeDecorator.java:63)
>>>      at
>>> org.apache.cayenne.dba.JdbcAdapter.bindParameter(JdbcAdapter.java:548)
>>>      at
>>>
>>> org.apache.cayenne.dba.mysql.MySQLAdapter.bindParameter(MySQLAdapter.java:216)
>>>      at
>>> org.apache.cayenne.dba.AutoAdapter.bindParameter(AutoAdapter.java:204)
>>>      at
>>> org.apache.cayenne.access.jdbc.BatchAction.bind(BatchAction.java:57)
>>>      at
>>>
>>> org.apache.cayenne.access.jdbc.BatchAction.runAsBatch(BatchAction.java:114)
>>>      at
>>>
>>> org.apache.cayenne.access.jdbc.BatchAction.performAction(BatchAction.java:85)
>>>      at
>>>
>>> org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97)
>>>      at
>>> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:293)
>>>      at
>>>
>>> org.apache.cayenne.access.DataDomainFlushAction.runQueries(DataDomainFlushAction.java:233)
>>>      at
>>>
>>> org.apache.cayenne.access.DataDomainFlushAction.flush(DataDomainFlushAction.java:153)
>>>      at
>>> org.apache.cayenne.access.DataDomain.onSyncFlush(DataDomain.java:633)
>>>      at
>>> org.apache.cayenne.access.DataDomain.onSyncNoFilters(DataDomain.java:603)
>>>      at
>>>
>>> org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:764)
>>>      at
>>>
>>> org.apache.cayenne.tx.TransactionFilter$1.perform(TransactionFilter.java:73)
>>>      at
>>>
>>> org.apache.cayenne.tx.TransactionFilter$1.perform(TransactionFilter.java:70)
>>>      at
>>>
>>> org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:87)
>>>      at
>>>
>>> org.apache.cayenne.tx.DefaultTransactionManager.performInLocalTransaction(DefaultTransactionManager.java:59)
>>>      at
>>>
>>> org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:52)
>>>      at
>>>
>>> org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:40)
>>>      at
>>> org.apache.cayenne.tx.TransactionFilter.onSync(TransactionFilter.java:70)
>>>      at
>>>
>>> org.apache.cayenne.access.DataDomain$DataDomainSyncFilterChain.onSync(DataDomain.java:764)
>>>      at org.apache.cayenne.access.DataDomain.onSync(DataDomain.java:590)
>>>      at
>>> org.apache.cayenne.access.DataContext.flushToParent(DataContext.java:742)
>>>      ... 3 more
>>> Caused by: java.lang.ClassCastException: [B cannot be cast to
>>> java.util.Date
>>>      at
>>> com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3706)
>>>      ... 32 more
>>>
>>> My MySQL table looks like this...
>>>
>>>
>>> +---------------------+-------------+------+-----+---------------------+-----------------------------+
>>> | Field               | Type        | Null | Key | Default             |
>>> Extra                       |
>>>
>>> +---------------------+-------------+------+-----+---------------------+-----------------------------+
>>> | AccountNumber       | varchar(32) | NO   | MUL | NULL                |
>>> |
>>> | Active              | char(1)     | NO   |     | NULL                |
>>> |
>>> | Address1            | varchar(64) | NO   |     | NULL                |
>>> |
>>> | Address2            | varchar(64) | YES  |     | NULL                |
>>> |
>>> | AmountDue           | varchar(16) | NO   |     | NULL                |
>>> |
>>> | City                | varchar(32) | YES  |     | NULL                |
>>> |
>>> | DTCreated           | timestamp   | NO   |     | CURRENT_TIMESTAMP   |
>>> on
>>> update CURRENT_TIMESTAMP |
>>> | DTUpdated           | timestamp   | YES  |     | NULL                |
>>> |
>>> | HashedAccountNumber | varchar(32) | NO   |     | NULL                |
>>> |
>>> | InvoiceDate         | timestamp   | NO   |     | 0000-00-00 00:00:00 |
>>> |
>>> | PatientName         | varchar(64) | NO   |     | NULL                |
>>> |
>>> | State               | varchar(2)  | YES  |     | NULL                |
>>> |
>>> | ZIP                 | varchar(12) | NO   |     | NULL                |
>>> |
>>> | id                  | int(11)     | NO   | PRI | NULL                |
>>> |
>>>
>>> +---------------------+-------------+------+-----+---------------------+-----------------------------+
>>>
>>> My class is this...
>>>
>>> public abstract class _MAMRecords extends CayenneDataObject {
>>>
>>>      private static final long serialVersionUID = 1L;
>>>
>>>      public static final String ID_PK_COLUMN = "id";
>>>
>>>      public static final Property<String> ACCOUNT_NUMBER =
>>> Property.create("accountNumber", String.class);
>>>      public static final Property<String> ACTIVE =
>>> Property.create("active",
>>> String.class);
>>>      public static final Property<String> ADDRESS1 =
>>> Property.create("address1", String.class);
>>>      public static final Property<String> ADDRESS2 =
>>> Property.create("address2", String.class);
>>>      public static final Property<String> AMOUNT_DUE =
>>> Property.create("amountDue", String.class);
>>>      public static final Property<String> CITY = Property.create("city",
>>> String.class);
>>>      public static final Property<LocalDateTime> D_TCREATED =
>>> Property.create("dTCreated", LocalDateTime.class);
>>>      public static final Property<LocalDateTime> D_TUPDATED =
>>> Property.create("dTUpdated", LocalDateTime.class);
>>>      public static final Property<String> HASHED_ACCOUNT_NUMBER =
>>> Property.create("hashedAccountNumber", String.class);
>>>      public static final Property<LocalDateTime> INVOICE_DATE =
>>> Property.create("invoiceDate", LocalDateTime.class);
>>>      public static final Property<String> PATIENT_NAME =
>>> Property.create("patientName", String.class);
>>>      public static final Property<String> STATE =
>>> Property.create("state",
>>> String.class);
>>>      public static final Property<String> ZIP = Property.create("zip",
>>> String.class);
>>>      public static final Property<List<Payments>> TO_PAYMENTS =
>>> Property.create("toPayments", List.class);
>>>
>>>
>>>
>>> On 12/10/17 04:49 AM, Nikita Timofeev wrote:
>>>>
>>>> Hi Andrew,
>>>>
>>>> Your last exception seems like a Cayenne fallback to a serializable
>>>> type when it doesn't now how to handle given value, are there any
>>>> warnings preceding this exception?
>>>> Something like "Haven't found suitable ExtendedType for class..."?
>>>>
>>>> On Wed, Oct 11, 2017 at 9:59 PM, Andrew Willerding
>>>> <awillerd...@itsurcom.com> wrote:
>>>>>
>>>>> Sorry to bug the list but I seemed to have got around the DI issue by
>>>>> deleting the Maven references to cayenne and reinstalling them but now
>>>>> I'm
>>>>> getting another exception.  I'm sure I have the correct versions of
>>>>> Cayenne
>>>>> v4.0.B1 server, java8 and removed di. Am I still missing some dependent
>>>>> library?
>>>>>
>>>>>
>>>>> Exception in thread "Thread-2"
>>>>> org.apache.cayenne.CayenneRuntimeException:
>>>>> [v.4.0.B1 Jun 02 2017 15:11:18] Query exception.
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomainQueryAction.nextQueryException(DataDomainQueryAction.java:614)
>>>>>       at
>>>>> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:299)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:471)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:72)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomainQueryAction$2.perform(DataDomainQueryAction.java:446)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:87)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.tx.DefaultTransactionManager.performInLocalTransaction(DefaultTransactionManager.java:59)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:52)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.tx.DefaultTransactionManager.performInTransaction(DefaultTransactionManager.java:40)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:443)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:122)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomain.onQueryNoFilters(DataDomain.java:564)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:748)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.tx.TransactionFilter.onQuery(TransactionFilter.java:49)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataDomain$DataDomainQueryFilterChain.onQuery(DataDomain.java:748)
>>>>>       at
>>>>> org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:556)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:382)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.util.ObjectContextQueryAction.executePostCache(ObjectContextQueryAction.java:107)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.util.ObjectContextQueryAction.execute(ObjectContextQueryAction.java:94)
>>>>>       at
>>>>> org.apache.cayenne.access.DataContext.onQuery(DataContext.java:965)
>>>>>       at
>>>>>
>>>>> org.apache.cayenne.access.DataContext.performQuery(DataContext.java:954)
>>>>>       at org.apache.cayenne.BaseContext.select(BaseContext.java:307)
>>>>>       at
>>>>> org.apache.cayenne.query.FluentSelect.select(FluentSelect.java:157)
>>>>>       at
>>>>>
>>>>> com.callistacti.quest.crsolstasv2.ImportThread.run(ImportThread.java:202)
>>>>>       at java.lang.Thread.run(Thread.java:748)
>>>>> Caused by: java.io.StreamCorruptedException: invalid stream header:
>>>>> 32303137
>>>>>       at
>>>>> java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:857)
>>>>>       at java.io.ObjectInputStream.<init>(ObjectInputStream.java:349)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.types.SerializableTypeFactory$SerializableType.toJavaObject(SerializableTypeFactory.java:106)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.types.SerializableTypeFactory$SerializableType.toJavaObject(SerializableTypeFactory.java:70)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.types.ExtendedTypeDecorator.materializeObject(ExtendedTypeDecorator.java:53)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.jdbc.reader.FullRowReader.readRow(FullRowReader.java:52)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.jdbc.reader.FullRowReader.readRow(FullRowReader.java:32)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.jdbc.JDBCResultIterator.nextRow(JDBCResultIterator.java:104)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.jdbc.JDBCResultIterator.allRows(JDBCResultIterator.java:80)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:138)
>>>>>       at
>>>>>
>>>>>
>>>>> org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:97)
>>>>>       at
>>>>> org.apache.cayenne.access.DataNode.performQueries(DataNode.java:293)
>>>>>
>>>>>
>>>>>
>>>>> On 11/10/17 07:16 AM, Andrew Willerding wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I'm not sure what I'm missing when I try to run my application jar
>>>>>> file.
>>>>>> The intention is to load the cayenne configuration file from the
>>>>>> subdirectory etc.
>>>>>>
>>>>>> I'm getting the following error
>>>>>>
>>>>>> Exception in thread "main" org.apache.cayenne.di.DIRuntimeException:
>>>>>> DI
>>>>>> container has no binding for key <BindingKey:
>>>>>> org.apache.cayenne.configuration.ObjectContextFactory>
>>>>>>       at
>>>>>>
>>>>>>
>>>>>> org.apache.cayenne.di.spi.DefaultInjector.getProvider(DefaultInjector.java:158)
>>>>>>       at
>>>>>>
>>>>>>
>>>>>> org.apache.cayenne.di.spi.DefaultInjector.getProvider(DefaultInjector.java:144)
>>>>>>       at
>>>>>>
>>>>>>
>>>>>> org.apache.cayenne.di.spi.DefaultInjector.getInstance(DefaultInjector.java:134)
>>>>>>       at
>>>>>>
>>>>>>
>>>>>> org.apache.cayenne.configuration.CayenneRuntime.newContext(CayenneRuntime.java:124)
>>>>>>       at
>>>>>> com.callistacti.quest.crsolstasv2.CRSolstas.main(CRSolstas.java:114)
>>>>>>
>>>>>> after executing the following code...
>>>>>>
>>>>>>       public static final String DB_FILE = "cayenne-CRSolstas.xml";
>>>>>>
>>>>>>           Module myModule = (Binder binder) -> {
>>>>>>               binder.bind(ResourceLocator.class).toInstance(new
>>>>>> FilesystemResourceLocator(new File("etc")));
>>>>>>
>>>>>>
>>>>>>
>>>>>> ServerModule.contributeProperties(binder).put(Constants.SERVER_CONTEXTS_SYNC_PROPERTY,
>>>>>> "false");
>>>>>>           };
>>>>>>
>>>>>>           ServerRuntime cayenneRuntime =
>>>>>> ServerRuntime.builder().addConfig(DB_FILE)
>>>>>>                   .addModule(myModule)
>>>>>>                   .build();
>>>>>>           ObjectContext test = cayenneRuntime.newContext();
>>>>>>           test.commitChanges();
>>>>>>
>>>>>> When I run my code within my IDE (Netbeans) I do not get this error so
>>>>>> I'm
>>>>>> missing something from my jar package but I'm not sure what.
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Andrew
>>>>>>
>>>>
>>
>>
>



-- 
Best regards,
Nikita Timofeev

Reply via email to