by

Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jun 24 20:09
    anidotnet commented #216
  • Jun 24 20:03
    frett27 added as member
  • Jun 24 14:35
    anidotnet commented #228
  • Jun 24 09:09
    sheinbergon commented #228
  • Jun 23 18:04
    aleksandar-stefanovic commented #218
  • Jun 23 17:45
    aleksandar-stefanovic commented #218
  • Jun 23 09:56
    anidotnet commented #228
  • Jun 23 09:55
    anidotnet commented #228
  • Jun 23 09:21
    sheinbergon commented #228
  • Jun 23 09:19
    sheinbergon opened #228
  • Jun 22 15:44
    anidotnet commented #216
  • Jun 22 11:12
    frett27 commented #216
  • Jun 21 19:03
    anidotnet commented #216
  • Jun 21 18:31
    frett27 commented #216
  • Jun 19 10:22
    anidotnet commented #216
  • Jun 19 08:56
    frett27 commented #216
  • Jun 16 12:14
    anidotnet closed #227
  • Jun 16 12:14
    anidotnet commented #227
  • Jun 16 12:06
    aukhatov opened #227
  • Jun 10 12:07
    aukhatov commented #226
Tareq Kirresh
@TareqK
Will do! But the protocol itself is second to the architecture it runs on IMHO. The protocol and message format itself can be changed later on in production, but bad arch is bad arch. Anyways, I take it that you are warmed up to the idea of this more customizable implementation?
Also is JBus still a thing? Or did you stop maintaining it altogether ?
Anindya Chatterjee
@anidotnet
Please go ahead with datagate. I may not invest significant time on it as I am busy with rewriting nitrite. But surely we will sync up when you have solid arch and protocol and when I need to rewrite the replication client module.
JBus is still supported, just not actively developed. Do you have anything on your mind regarding it?
Tareq Kirresh
@TareqK
Not much, it's just that I have been getting into Domain Driven Design lately and need a simple message bus to do some testing(I don't want to host Kafka or RabbitMQ). If JBus still works, I might use it
1 reply
Tareq Kirresh
@TareqK
@anidotnet which branch should I fork to get started on?
Anindya Chatterjee
@anidotnet
I'll suggest you create a new repository altogether for datagate. Anyway we are not going to use current implementation in the next major release after nitrite rewrite. Once it is complete, you can move the repo to the org.
Anindya Chatterjee
@anidotnet
@TareqK and do not start anything on client yet. Once server design and implementation is complete, we will talk about that, meantime nitrite rewrite will be ready.
Tareq Kirresh
@TareqK
My thoughts exactly.
Can i use maven instead of gradle ? Datagate is server side, and I have a lot of experience with maven
Anindya Chatterjee
@anidotnet
sure
Tareq Kirresh
@TareqK
@anidotnet https://github.com/TareqK/nitrite-datagate Ive started the repo and added the basic structure for the project. For the sake of squeezing out performance, im keeping reflection to a minimun and instead using Interfaces where possible
Tareq Kirresh
@TareqK
@anidotnet Ive finalized the way I imagine the structure will work with dummy implementations. Im going to try it out with a spark application to see how it
"feels" to use in anapplication
Ive made the authenticator and the message bus implementable by the user
this allows one to use any messaging bus they want(if they implement it) and any authentication back end for usernames and passwords they want
Anindya Chatterjee
@anidotnet
ok
Tareq Kirresh
@TareqK
@anidotnet I got the proof of concept of the API out. Ive also commited a standalone version, but i dont have a build for an uber jar yet. docs are here https://github.com/TareqK/nitrite-datagate/blob/master/nitrite-datagate/docs/Nitrite-Datagate-API.md
and here is the repository
I still need to update some stuff and add actual database implementations and actual authentication implementations, but I dont want to continue implementation before we agree on the actual API. If you feel like there are enough features to begin with, ill get started on finishing the implementations, and we can sync on the client soon after.
Anindya Chatterjee
@anidotnet
Thanks @TareqK . I'll take a look at it whenever I get some time. Meantime, provide an example on how to spin a spring boot server using you library. I don't want to desert current spring boot datagate consumers also.
Tareq Kirresh
@TareqK
@anidotnet Ill get on it tonight, but I've already spun up a tomcat one that runs like the spring boot one
Though I may not use thymeleaf for the UI stuff (I'll see about it later )
Anindya Chatterjee
@anidotnet
It's better not to use thymeleaf to handle websocket call.. Instead use vuejs or angular for the UI
Tareq Kirresh
@TareqK
Well we shouldnt worry about UI for now
I just finished the mongodb(default) implementation
works fine.
Anindya Chatterjee
@anidotnet
great
Tareq Kirresh
@TareqK
Now im thinking that the default authenticator(that ships with the library) always authenticates
while the standalone version actually does real authentication
what do you think?
I want to do this because while most people have an authentication system they want to tie into for their application, very few will actually want to write their implementation of change lists
and one more issue im thinking of
What about deletion??
is deletion allowed?
Anindya Chatterjee
@anidotnet
IMO authentication should not be part of the library. Many people want to use their own security mechanism in their server software. What do you mean by deletion allowed? It is sync operation,. Deletion in local collection must be propagated to their replicas via datagate.
Tareq Kirresh
@TareqK
Which leads me to ask how updates work. Do we send differenitials or the whole entity?
document* not entity
Tareq Kirresh
@TareqK
because for the sake of simplicity, differentials might not be viable ATM
Tareq Kirresh
@TareqK
Okay, so ive gone ahead and finished the implementation of the standalone server(with authentication via mongodb)
What is left is to add the mongodb and admin user configuration, similar to the old datagate ones, and we can get started on writing client stuff
Anindya Chatterjee
@anidotnet
When I get sometime over this weekend, I'll look into your project and we will discuss on our next course of action. Meantime please add a spring-boot implementation into the project.
Tareq Kirresh
@TareqK
HELOoooOOOOoooOOOoooOOOooOOOooOOOOooO Bois and Grills
Datagate Spring boot project is up
so is a Spring boot library you can import with an @Import in your main class
I decided to reuse the Jsr356 implementation for spring boot to cut down on written code
@anidotnet Please tell me when you see the latest changes
Anindya Chatterjee
@anidotnet
@TareqK I have got some time to see your changes. Here are my concerns
  1. you should remove authentication from library and delegate it to the implmentor. Implementor can choose from basic auth, oauth or any other custom mechanism. Instead in library add some mechanism to add some auth token in every request and delgate the validation of the token to the implementor.
  2. you should remove factory classes from nitrite-datagate module, make it more like a api library with only message handler and supporting classes. Default implementations you can provide in nitrite-datagate-javaee module and people can wire it at their own will. spring boot user can create beans and wire them via spring's autowiring mechanism. No need for factory classes.
  3. you should remove datagate user service from library.
  4. you add validation that a user has access to the collection passed in request or not
  5. for replication, you should maintain one mongo collection for each user@nitrite-collection. separate each user's data in different mongo collection.
  6. the core sync logic is not complete I guess. My suggestion is to keep the core sync logic same as old version. Add websocket interface in place of rest and add pagination in every request and response message. Make it configurable so that client can choose to send/recieve n number of changes at a single go.
  7. there is no locking mechanism in your sync logic. what happens when 2 clients of same user trying to update the same collection? locking logic is there in the old version, please use that.
  8. for datagatebus you can use jbus or any other message bus, but in datagate library keep the interface only. in jee or spring implementation provide actual implementation.
and lastly, as I said earlier I am likely to provide a golang based full datagate server implementation. I might not prefer java based implementation (but I have not decided yet). So be prepare to support your library in long run :D