[erlang-questions] Newbie Question: Module with DB Connection as a "global state"

Gustav Simonsson <>
Wed Oct 5 16:57:58 CEST 2011


The way you could do it is to have the log_packet_send/3 function make a
callback so you can handle the request in a context where you have the
state defined in the init function. I haven't used gen_mod so I don't
know exactly how that works, but I assume it works in a similar way to
how a gen_server implementation would call Module:handle_cast/2 for
example.

Note, for instance, how you have access to the state when a info message
is received in handle_info/2 of your module.

Also the proper syntax for accessing record fields is Expr#Name.Field
which would translate to DBref = State#state.dbref in your case.

I hope that clarifies things a little :)

Regards,
Gustav Simonsson

On Wed, 2011-10-05 at 16:26 +0200, Michael Weibel - Amiado Group wrote:
> Hi Gustav,
> 
> Wow, thanks for your _quick_ reply! :)
> Yeah at first I thought also that I could use that but didn't really figure out how to do that (maybe I don't really understand records yet).
> 
> Because the "log_packet_send" is called from ejabberd (it's a hook) and from this function, as you see, I call some other functions until it arrives at the "insert_row" function. 
> In the insert_row function I'd need the DB Reference as you see. 
> There, can I just use it like this:
> DBref = #state.dbref
> 
> Is this the correct way?
> 
> thanks,
> Michael
> 
> Am 05.10.2011 um 15:54 schrieb Gustav Simonsson:
> 
> > Hi Michael!
> > 
> > On line 48 in your code you store the connection information used in
> > open_mysql_connection/1 in the state of the server. Perhaps you can
> > make use of that?
> > 
> > Regards,
> > Gustav Simonsson
> > 
> > On Wed, 2011-10-05 at 15:36 +0200, Michael Weibel - Amiado Group wrote:
> >> Hi all,
> >> 
> >> I'm new to erlang, new to this list and I hope here's the right place to ask this question.
> >> 
> >> I'm currently implementing a module for ejabberd where I need to log certain packets to a MySQL DB and I'm using the MySQL Native Driver for it. 
> >> 
> >> My current implementation is on github:
> >> https://github.com/amiadogroup/mod_log_chat_mysql5/blob/master/src/mod_log_chat_mysql5.erl
> >> 
> >> In this file you see that I'm opening the MySQL Connection in the function "open_mysql_connection" and assign it to a ETS Table because I didn't find another way to store the DB Reference (I tried something with records but didn't succeed). 
> >> 
> >> This worked pretty well but I ran into the problem that after some days/weeks the ets table didn't have the DB Reference anymore. 
> >> To prevent this, I want to create functions which setup the DB Connection again, if it doesn't have it anymore. 
> >> 
> >> As I'm trying to do this I run into the problem that the informations about how to connect to the db is only in the init-function available and I don't really want to store this information also in the ets table. 
> >> 
> >> Can anyone help me or point me to a site on how to do this?
> >> 
> >> Thanks,
> >> Michael
> >> _______________________________________________
> >> erlang-questions mailing list
> >> 
> >> http://erlang.org/mailman/listinfo/erlang-questions
> > 
> > 
> > _______________________________________________
> > erlang-questions mailing list
> > 
> > http://erlang.org/mailman/listinfo/erlang-questions
> 





More information about the erlang-questions mailing list