What is the code to be shared ? And between where the code to be shared ? Only between client and engine ?
One of code to be shared (and exactly be shared already ) is library such as java api and they are shared between anywhere. I think it is very reasonable for these library to be shared between anywhere.
However I don't know whether there are code in derby to be shared and , I don't know between where we can share code .
I think we need to think what is the code in derby to be shared and between where we can share code , in this discussion . (I also think answer may be there are no code and no part where to be shared in derby ..... Well... this is just my 'maybe' thinking now ... )
I think part of what you are asking is what exactly is the "unit" of sharing. Here is how I would define it: a shared component is a collection of one or more packages that is used across multiple subsystems within Derby. Very loosely, I would define a "subsystem" as the code contained in one of the top-level source directories, e.g. engine, client, drda, tools, etc.
If anyone has a better name than "shared component" please let me know. I would love to use "module" but since it's already in use in Derby with a very specific definition I don't think we can use it.
Normally such a unit of sharing would be encapsulated in a JAR file. I would actually like to suggest that our internal build does create a JAR file for a shared component to make it very clear what exactly composes the shared component. When we create a release, the classes in the shared component JAR file can be merged into derby.jar and derby-client.jar to avoid increasing the number of JAR files seen by the end user.
You are also asking where we can share code, that is, who would be using the shared code. A shared component could be used by any top-level subsystem of Derby as defined above.
Finally, you are asking "what is the code in Derby to be shared." Here is a list of potential shared code, and I suspect the list could grow:
- JDBC error messages and SQL States
- DRDA networking encode/decode functionality
- Security encryption/decryption of network traffic, passwords, etc.
SanityManager and associated sanity classes
ProductVersionHolder and associated info classes
- Common functionality between embedded and client JDBC drivers
Right now the only shared component that is proposed is all the classes under the package org.apache.derby.common and its sub-packages. It is possible in the future we may break out some of this "common" code into other shared components, for instance org.apache.derby.common.drda and org.apache.derby.common.jdbc, but that is not currently on the table.
I hope this answers your questions.
I think you have answered almost all my questions . Thanks!
I will copy the list to more declarative page of ListOfSharedComponent.