Hi.

I've tried the following, which returns to me the "SIMPLE-ERROR: No
database connection selected." error. I'm the beginner in common lisp,
and I do realise that probably all of my code is ugly and impractical
and that it all could be written better, but for now it works. Most of
the time. If you have any good suggestion in the ways for me to
improve on this code, please do so. :-)

sbcl 1.0.44.22

using quicklisp:
weblocks-20101107-hg.tgz
postmodern-20101107-git.tgz


sem.lisp:
---------------------------
(defparameter *parametri-baze* (list imebaze korisnikbaze lozinkabaze
adresabaze :pooled-p t)) ;;these variables are all defined in another
file

(defmacro sa-bazom (&body body)
  `(postmodern:with-connection *parametri-baze*
     ,@body))

(defun start-sem (&rest args)
  "Starts the application by calling 'start-weblocks' with appropriate
arguments."
  (apply #'start-weblocks args)
  (defparameter *konekcija-baze* (postmodern:connect imebaze
korisnikbaze lozinkabaze adresabaze :pooled-p t))
  (start-webapp 'sem))
---------------------------

init-session.lisp:
--------------------------------
(in-package :sem)

;;; http://paste.lisp.org/display/90095
;; Define callback function to initialize new sessions
(defun init-user-session (comp)
  (with-flow comp
    (yield (autentikacija comp))
    (yield (glavna-stranica comp))))
----------------------------


login.lisp:
---------------------------------
(in-package :sem)

(setf *default-login-title* "Molim unesite ispravno korisnicko ime i lozinku")

(defview login-form-view (:type form :persistp nil
                                :buttons '((:submit . "Login") nil) ;nil jer ne 
zelimo cancel ovdje
                                :caption "Unesite korisnicko ime i lozinku"
                                :focusp t)
  ;":requiredp t"- polje mora biti popunjeno, ":required-indicator
nil" - nemoj pisat "(required)"
  ;kraj pojedinog polja
  (korisnicko-ime :requiredp t :required-indicator nil)
  (lozinka :present-as password :requiredp t :required-indicator nil))

(defclass kredencijali ()
  ((idkorisnika :initarg :idkorisnika :initform nil :accessor
kredencijali-idkorisnika)
   (idtvrtke :initarg :idtvrtke :initform nil :accessor kredencijali-idtvrtke)
   (imeprezime :initarg :imeprezime :initform nil :accessor
kredencijali-imeprezime)
   (adresa :initarg :adresa :initform nil :accessor kredencijali-adresa)
   (telefoni :initarg :telefoni :initform nil :accessor kredencijali-telefoni)
   (email :initarg :email :initform nil :accessor kredencijali-email)
   (id-grupnih-prava :initarg :id-grupnih-prava :initform nil
:accessor kredencijali-id-grupnih-prava)
   (id-korisnickih-prava :initarg :id-korisnickih-prava :initform nil
:accessor kredencijali-id-korisnickih-prava)
   (idjezika :initarg :idjezika :initform nil :accessor kredencijali-idjezika)
   (login :initarg :login :initform nil :accessor kredencijali-login)
   (komentar :initarg :komentar :initform nil :accessor kredencijali-komentar)
   (slika :initarg :slika :initform nil :accessor kredencijali-slika)
   (idizgleda :initarg :idizgleda :initform nil :accessor
kredencijali-idizgleda)))

(defun instanciraj-korisnika (korisnicko-ime)
  "instanciramo objekt korisnik klase kredencijali koji cemo
koristiti kroz aplikaciju kao autentificirajuci objekt"
  (let* ((setq rezultat (sa-bazom (postmodern:query (:select 'idkorisnika
                                                      'idtvrtke
                                                      'imeprezime
                                                      'adresa
                                                      'telefoni
                                                      'email
                                                      'id-grupnih-prava
                                                      'id-korisnickih-prava
                                                      'idjezika
                                                      'login
                                                      'komentar
                                                      'slika
                                                      'idizgleda
                                                      :from (:dot 'sem 
'korisnik)
                                                      :where (:and (:= 'login 
korisnicko-ime)
                                                                   (:= 'status 
"aktivan"))) :plist))))
  (defparameter korisnik (make-instance 'kredencijali ; ima li neki
jednostavniji nacin za ovo?
                                        :idkorisnika (getf rezultat 
:idkorisnika)
                                        :idtvrtke (getf rezultat :idtvrtke)
                                        :imeprezime (getf rezultat :imeprezime)
                                        :adresa (getf rezultat :adresa)
                                        :telefoni (getf rezultat :telefoni)
                                        :email (getf rezultat :email)
                                        :id-grupnih-prava (getf rezultat 
:id-grupnih-prava)
                                        :id-korisnickih-prava (getf rezultat 
:id-korisnickih-prava)
                                        :idjezika (getf rezultat :idjezika)
                                        :login (getf rezultat :login)
                                        :komentar (getf rezultat :komentar)
                                        :slika (getf rezultat :slika)
                                        :idizgleda (getf rezultat 
:idizgleda)))))


(defwidget login-maybe (login)
  ()
  (:documentation "Kreirajmo login formu samo ako korisnik nije ulogiran."))

(defun autentikacija (comp)
  (make-instance 'composite :widgets
                 (list (make-instance 'login-maybe
                                      :view 'login-form-view
                                      :on-login 'autentikacija-korisnika)
                                 (format nil "parametri baze su ~A" 
*parametri-baze*) ;;;
I've put these 2 formats to see if the weblocks app actually receives
the correct values
                                 (format nil "ovo je moj korisnik ~A" (sa-bazom 
(postmodern:query
(:select 'idkorisnika
                                                                                
                           'idtvrtke
                                                                                
                           'imeprezime
                                                                                
                           'adresa
                                                                                
                           'telefoni
                                                                                
                           'email
                                                                                
                           'id-grupnih-prava
                                                                                
                           'id-korisnickih-prava
                                                                                
                           'idjezika
                                                                                
                           'login
                                                                                
                           'komentar
                                                                                
                           'slika
                                                                                
                           'idizgleda
                                                                                
                           :from (:dot 'sem 'korisnik)
                                                                                
                           :where (:and (:= 'login "pperic")
                                                                                
                                        (:= 'status "aktivan"))) :plist))))))

(defun hash-lozinke (lozinka)
  (ironclad:byte-array-to-hex-string (ironclad:digest-sequence :sha512
                                                               
(ironclad:ascii-string-to-byte-array lozinka))))

(defun kreiraj-lozinku (korisnicko-ime lozinka)
  (hash-lozinke (concatenate 'string korisnicko-ime lozinka)))

;primjer postmodern querya.
;; (postmodern:query (:limit (:select '* :from (:dot 'sem 'vozilo)) 1))


(defun autentikacija-korisnika (login-widget login-objekt)
  "Identifikacija i propustanje korisnika"
  (with-slots (korisnicko-ime lozinka) login-objekt
    (if (postmodern:query (:select 'login 'password
                                   :from (:dot 'sem 'korisnik)
                                   :where (:and (:= 'login korisnicko-ime)
                                                (:= 'password (kreiraj-lozinku 
korisnicko-ime lozinka)))))
        (instanciraj-korisnika korisnicko-ime)
        (values nil "Krivo korisnicko ime ili lozinka. Probajte ponovno."))))

(defmethod render-widget-body ((self login-maybe) &key &allow-other-keys)
           (if (authenticatedp)
               (answer self)
               (call-next-method)))
----------------------------------------------------

When the app starts, it writes using these 2 formats the variables and
the select query for the user, so that means that the
hunchentoot/weblocks thread receives properly the variables, but for
some reason beyond me, when it reaches "instanciraj-korisnika" it
reports the following backtrace:



Weblocks caught an error

Description
SIMPLE-ERROR: No database connection selected.
Actions

Reset this web application's session
Session data

TODO

Restarts

TODO

Backtrace

Function        Arguments
33      MAP-BACKTRACE   
#<CLOSURE (LAMBDA (SB-DEBUG::FRAME)) {10047248D9}>
START
0
COUNT
1152921504606846975
32      BACKTRACE-AS-LIST       
1152921504606846975
31      (FAST-METHOD HANDLE-ERROR-CONDITION (WEBLOCKS-WEBAPP T))        
#<unavailable argument>
#<unavailable argument>
#<unavailable argument>
No database connection selected.
30      (FLET LAMBDA13) 
No database connection selected.
29      SIGNAL  
No database connection selected.
28      ERROR   
No database connection selected.
27      ENSURE-CONNECTION       
NIL
26      EXEC-QUERY      
NIL
#<unavailable argument>
LIST-ROW-READER
25      AUTENTIKACIJA-KORISNIKA 
#<unavailable argument>
#<G1510 {1003413E81}>
24      (LAMBDA (W O))  
#<unavailable argument>
#<G1510 {1003413E81}>
23      (FAST-METHOD DATAFORM-SUBMIT-ACTION (QUICKFORM T))      
#<unused argument>
#S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD
WEBLOCKS:DATAFORM-SUBMIT-ACTION #)> :PV NIL :NEXT-METHOD-CALL NIL
:ARG-INFO (2 . T))
#<QUICKFORM "dom2">
#<G1510 {1003413E81}>
22      (LAMBDA (&KEY SUBMIT CANCEL &ALLOW-OTHER-KEYS)) 
SUBMIT
Login
CANCEL
NIL
21      ACTION-TXN-HOOK 
(#<FUNCTION (LAMBDA #) {100A9B46B9}>)
20      (LAMBDA ())     
19      (FAST-METHOD HANDLE-CLIENT-REQUEST (WEBLOCKS-WEBAPP))   
#<unavailable argument>
#<unavailable argument>
#<unavailable argument>
18      (FLET doit-71)  
17      (FAST-METHOD HANDLE-CLIENT-REQUEST AROUND (T))  
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD
WEBLOCKS:HANDLE-CLIENT-REQUEST #)> :PV NIL :NEXT-METHOD-CALL NIL
:ARG-INFO (1))
#<SEM {1003F81121}>
16      (FAST-METHOD HANDLE-CLIENT-REQUEST AROUND (T))  
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD
WEBLOCKS:HANDLE-CLIENT-REQUEST #)> :PV NIL :NEXT-METHOD-CALL NIL
:ARG-INFO (1))
#<SEM {1003F81121}>
15      CALL-IN-WEBAPP  
#<SEM {1003F81121}>
#<CLOSURE (LAMBDA ()) {1004507E79}>
14      (FAST-METHOD HANDLE-CLIENT-REQUEST AROUND (WEBLOCKS-WEBAPP))    
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD
WEBLOCKS:HANDLE-CLIENT-REQUEST :AROUND ...)> :PV NIL :NEXT-METHOD-CALL
#S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION #> :PV NIL
:NEXT-METHOD-CALL NIL :ARG-INFO (1)) :ARG-INFO (1))
#<SEM {1003F81121}>
13      (FAST-METHOD HANDLE-REQUEST (ACCEPTOR REQUEST)) 
#<unavailable argument>
#<unavailable argument>
#<WEBLOCKS-ACCEPTOR (host localhost, port 8443)>
#<REQUEST {10044F19A1}>
12      (FAST-METHOD PROCESS-REQUEST (T))       
#<unavailable argument>
#<unavailable argument>
#<REQUEST {10044F19A1}>
11      (FAST-METHOD PROCESS-CONNECTION (ACCEPTOR T))   
#<unavailable argument>
#<unavailable argument>
#<WEBLOCKS-ACCEPTOR (host localhost, port 8443)>
#<STREAM-USOCKET {10042E7731}>
10      (FAST-METHOD PROCESS-CONNECTION (WEBLOCKS-ACCEPTOR T))  
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD
HUNCHENTOOT:PROCESS-CONNECTION #)> :PV NIL :NEXT-METHOD-CALL NIL
:ARG-INFO (2))
#<WEBLOCKS-ACCEPTOR (host localhost, port 8443)>
#<STREAM-USOCKET {10042E7731}>
9       (FAST-METHOD PROCESS-CONNECTION AROUND (ACCEPTOR T))    
#<unavailable argument>
#S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION (SB-PCL::FAST-METHOD
HUNCHENTOOT:PROCESS-CONNECTION #)> :PV NIL :NEXT-METHOD-CALL
#S(SB-PCL::FAST-METHOD-CALL :FUNCTION #<FUNCTION #> :PV NIL
:NEXT-METHOD-CALL NIL :ARG-INFO (2)) :ARG-INFO (2))
#<WEBLOCKS-ACCEPTOR (host localhost, port 8443)>
#<STREAM-USOCKET {10042E7731}>
8       (LAMBDA ())     
7       (FLET WITHOUT-INTERRUPTS-BODY-[BLOCK369]374)    
6       (FLET WITH-MUTEX-THUNK) 
5       (FLET WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]300)     
4       CALL-WITH-MUTEX 
#<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK) {7FFFF159FCB9}>
#S(SB-THREAD:MUTEX :NAME thread result lock :%OWNER #<THREAD
"Processing action" RUNNING {10042E9471}> :STATE 1)
#<THREAD "Processing action" RUNNING {10042E9471}>
T
3       INITIAL-THREAD-FUNCTION 
2       foreign function: call_into_lisp        
1       foreign function: new_thread_trampoline 
This is the Weblocks Application Framework running on Hunchentoot
1.1.1 (SBCL 1.0.44.22) at localhost:8443


I have tried creating an thread like this:

CL-USER> (in-package :sem)
#<PACKAGE "SEM">
SEM> (sb-thread:make-thread (lambda () (sa-bazom (postmodern:query
(:select 'idkorisnika
                                             'idtvrtke
                                             'imeprezime
                                             'adresa
                                             'telefoni
                                             'email
                                             'id-grupnih-prava
                                             'id-korisnickih-prava
                                             'idjezika
                                             'login
                                             'komentar
                                             'slika
                                             'idizgleda
                                             :from (:dot 'sem 'korisnik)
                                             :where (:and (:= 'login "pperic")
                                                          (:= 'status 
"aktivan"))) :plist))))
#<SB-THREAD:THREAD RUNNING {10046E93B1}>
SEM> (sb-thread:join-thread #<SB-THREAD:THREAD RUNNING {10046E93B1}>)
(:IDKORISNIKA 1 :IDTVRTKE 1 :IMEPREZIME
 "Pero Perić                                        " :ADRESA
 "Jabukovac 4000

          "
 :TELEFONI
 "091092093094#098123456#033454545
                               "
 :EMAIL
 "[email protected]
                               "
 :ID-GRUPNIH-PRAVA 1 :ID-KORISNICKIH-PRAVA 1 :IDJEZIKA 1 :LOGIN
 "pperic              " :KOMENTAR
 "Naš dragi pero
                               "
 :SLIKA :NULL :IDIZGLEDA 1)

And as you can see, it works. But it doesn't within certain parts of
the weblocks app. I have tried both clbuild and quicklisp, the result
is the same.

Please advise.

-- 
You received this message because you are subscribed to the Google Groups 
"weblocks" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/weblocks?hl=en.

Reply via email to