Hi all,
I've just started to look at seaside, and I found that there are quite a lot of components already available, which is really neat, as it allows for very easy reuse.
So after making a wonderful tabbed counter, I've starting to look at these components, thus my question :
Is there somewhere a document explaining briefly what are all those components doing, and how to succintly use them ? For example I tried to use the WATrail component, but I did not figure how to use it.
Thanks in advance, Romain Robbes
Has anyone successfully used Seaside or Visualworks 7.2 with Apache and the CGI i/f (WaveIPRequestBroker)? I'm encountering walkbacks in the method SeasideServlet>>doGet:response:. Seaside works fine for me using the WaveHTTPRequestBroker in VW.
Thanks, Brett Taylor
Stack Trace follows:
Unhandled exception: BlockClosure [] in Object>>doesNotUnderstand: ISO8859L1String(Object)>>doesNotUnderstand: Seaside.SeasideServlet>>doGet:response: Seaside.SeasideServlet(VisualWave.HttpServlet)>>service:response: VisualWave.ServletHandler>>basicEvaluate optimized [] in VisualWave.WWHandler>>evaluate BlockClosure>>on:do: VisualWave.ServletHandler(VisualWave.WWHandler)>>evaluate VisualWave.ServletHandler>>sendEntityOver: VisualWave.ServletHandler(VisualWave.WWHandler)>>sendCGIOver:for: optimized [] in VisualWave.WebRequest>>answerWith: BlockClosure>>on:do: VisualWave.WebRequest>>answerWith: VisualWave.WebRequestService>>privateDispatchRequest: VisualWave.WebRequestService>>dispatchRequest: VisualWave.WebRequestService>>privateServe: optimized [] in VisualWave.WebRequestService>>serveMarshaller: BlockClosure>>on:do: VisualWave.WebRequestService>>serveMarshaller: VisualWave.WaveMarshaler>>handleIncomingMessageOn: optimized [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage BlockClosure>>ensure: optimized [] in VisualWave.WaveTransport>>handlingIncomingMessage BlockClosure>>on:do: VisualWave.WaveTransport>>handlingIncomingMessage VisualWave.WaveTransport>>serverProcessBody optimized [] in Transport>>startServerProcess BlockClosure>>on:do: optimized [] in Process class>>forBlock:priority:
---------------------------------------------------------------------- ISO8859L1String(Object)>>doesNotUnderstand: Receiver: an ISO8859L1String Arguments: aMessage = a Message with selector: #path and arguments: #() Temporaries: excpt = a MessageNotUnderstood resumeValue = nil Context PC = 25
---------------------------------------------------------------------- Seaside.SeasideServlet>>doGet:response: Receiver: a Seaside.SeasideServlet Instance Variables: servletConfig = a VisualWave.ServletConfig dispatcherInitialized = true Arguments: aRequest = a VisualWave.Request aResponse = a VisualWave.Response Temporaries: waRequest = nil waResponse = nil dispatcher = nil handler = nil Context PC = 16
---------------------------------------------------------------------- Seaside.SeasideServlet(VisualWave.HttpServlet)>>service:response: Receiver: a Seaside.SeasideServlet Instance Variables: servletConfig = a VisualWave.ServletConfig dispatcherInitialized = true Arguments: aServletRequest = a VisualWave.Request aServletResponse = a VisualWave.Response Temporaries: method = 'GET' Context PC = 13
---------------------------------------------------------------------- VisualWave.ServletHandler>>basicEvaluate Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Context PC = 7
---------------------------------------------------------------------- optimized [] in VisualWave.WWHandler>>evaluate Receiver: an UndefinedObject Temporaries: .self = a VisualWave.ServletHandler Context PC = 6
---------------------------------------------------------------------- BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WWHandler>>evaluate outerContext = nil copiedValues = a VisualWave.ServletHandler Arguments: anExceptionSelector = VisualWave.SkipRestOfPageException handlerBlock = BlockClosure [] in VisualWave.WWHandler>>evaluate Context PC = 18
---------------------------------------------------------------------- VisualWave.ServletHandler(VisualWave.WWHandler)>>evaluate Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Context PC = 12
---------------------------------------------------------------------- VisualWave.ServletHandler>>sendEntityOver: Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Arguments: aStream = an ExternalReadAppendStream Context PC = 4
---------------------------------------------------------------------- VisualWave.ServletHandler(VisualWave.WWHandler)>>sendCGIOver:for: Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Arguments: aStream = an ExternalReadAppendStream aWebRequest = a VisualWave.WebRequest Context PC = 5
---------------------------------------------------------------------- optimized [] in VisualWave.WebRequest>>answerWith: Receiver: an UndefinedObject Temporaries: .self = a VisualWave.WebRequest .aResponse = a VisualWave.ServletHandler Context PC = 26
---------------------------------------------------------------------- BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WebRequest>>answerWith: outerContext = nil copiedValues = an Array[2] Arguments: anExceptionSelector = an ExceptionSet[1] handlerBlock = BlockClosure [] in VisualWave.WebRequest>>answerWith: Context PC = 18
---------------------------------------------------------------------- VisualWave.WebRequest>>answerWith: Receiver: a VisualWave.WebRequest Instance Variables: httpRequest = nil serverEnvironment = a Dictionary[34] queryData = nil cookieData = a VisualWave.IM_ApplicationWWWFormUrlEncoded responseStream = an ExternalReadAppendStream consumedPath = an OrderedCollection[3] unconsumedPath = an OrderedCollection[3] initiator = a VisualWave.WebRequestService entities = nil webSite = WebSite register session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) isAnswered = false Arguments: aResponse = a VisualWave.ServletHandler Context PC = 13
---------------------------------------------------------------------- VisualWave.WebRequestService>>privateDispatchRequest: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWebRequest = a VisualWave.WebRequest Temporaries: responder = a VisualWave.WWResponder answer = a VisualWave.ServletHandler Context PC = 14
---------------------------------------------------------------------- VisualWave.WebRequestService>>dispatchRequest: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWebRequest = a VisualWave.WebRequest Context PC = 5
---------------------------------------------------------------------- VisualWave.WebRequestService>>privateServe: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aStream = an ExternalReadAppendStream Temporaries: answer = nil webHit = a VisualWave.WebHit request = a VisualWave.WebRequest Context PC = 49
---------------------------------------------------------------------- optimized [] in VisualWave.WebRequestService>>serveMarshaller: Receiver: an UndefinedObject Temporaries: .self = a VisualWave.WebRequestService .stream = an ExternalReadAppendStream Context PC = 7
---------------------------------------------------------------------- BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WebRequestService>>serveMarshaller: outerContext = nil copiedValues = an Array[2] Arguments: anExceptionSelector = an ExceptionSet[2] handlerBlock = BlockClosure [] in VisualWave.WebRequestService>>serveMarshaller: Context PC = 18
---------------------------------------------------------------------- VisualWave.WebRequestService>>serveMarshaller: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWaveMarshaller = a VisualWave.WaveMarshaler Temporaries: stream = an ExternalReadAppendStream alreadyHandledOnce = true Context PC = 26
---------------------------------------------------------------------- VisualWave.WaveMarshaler>>handleIncomingMessageOn: Receiver: a VisualWave.WaveMarshaler Instance Variables: manager = Transport<a VisualWave.WaveTransport configuration = MarshalerConfiguration wave service: a VisualWave.WebRequestService service = a VisualWave.WebRequestService virtualDirectories = nil hostname = nil port = nil Arguments: aTransport = Transport<a VisualWave.WaveTransport Context PC = 4
---------------------------------------------------------------------- optimized [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 7
---------------------------------------------------------------------- BlockClosure>>ensure: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: aBlock = BlockClosure [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage Temporaries: result = nil Context PC = 4
---------------------------------------------------------------------- optimized [] in VisualWave.WaveTransport>>handlingIncomingMessage Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 13
---------------------------------------------------------------------- BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WaveTransport>>handlingIncomingMessage outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: anExceptionSelector = Error handlerBlock = BlockClosure [] in VisualWave.WaveTransport>>handlingIncomingMessage Context PC = 18
---------------------------------------------------------------------- VisualWave.WaveTransport>>handlingIncomingMessage Receiver: a VisualWave.WaveTransport Instance Variables: handlers = nil state = #running manager = Adaptor<a VisualWave.WaveConnectionAdaptor serverProcess = a Process in Process>>resume sendLock = a Semaphore[0] marshaler = a VisualWave.WaveMarshaler unmarshaler = a VisualWave.WaveMarshaler readBuffer = a TransportMessageHeader[1024] writeBuffer = a TransportMessageHeader[1024] configuration = TransportConfiguration waveCGI marshaler: (MarshalerConfiguration wave service: a VisualWave.WebRequestService) serverPriority: 65 requestRegistry = an OtWeakValueDictionary nextRequestId = 0 sessionObjects = a Set[0] id = IPSocketAddress(port#35550 at:hana) writeStream = an ExternalReadAppendStream readStream = an ExternalReadAppendStream socket = an active SocketAccessor Context PC = 12
---------------------------------------------------------------------- VisualWave.WaveTransport>>serverProcessBody Receiver: a VisualWave.WaveTransport Instance Variables: handlers = nil state = #running manager = Adaptor<a VisualWave.WaveConnectionAdaptor serverProcess = a Process in Process>>resume sendLock = a Semaphore[0] marshaler = a VisualWave.WaveMarshaler unmarshaler = a VisualWave.WaveMarshaler readBuffer = a TransportMessageHeader[1024] writeBuffer = a TransportMessageHeader[1024] configuration = TransportConfiguration waveCGI marshaler: (MarshalerConfiguration wave service: a VisualWave.WebRequestService) serverPriority: 65 requestRegistry = an OtWeakValueDictionary nextRequestId = 0 sessionObjects = a Set[0] id = IPSocketAddress(port#35550 at:hana) writeStream = an ExternalReadAppendStream readStream = an ExternalReadAppendStream socket = an active SocketAccessor Context PC = 9
---------------------------------------------------------------------- optimized [] in Transport>>startServerProcess Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 6
---------------------------------------------------------------------- BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in Transport>>startServerProcess outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: anExceptionSelector = TerminateException handlerBlock = BlockClosure [] in [] in Process class>>forBlock:priority: Context PC = 18
---------------------------------------------------------------------- optimized [] in Process class>>forBlock:priority: Receiver: an UndefinedObject Temporaries: .aBlock = BlockClosure [] in Transport>>startServerProcess Context PC = 9
Brett Taylor wrote:
Has anyone successfully used Seaside or Visualworks 7.2 with Apache and the CGI i/f (WaveIPRequestBroker)? I'm encountering walkbacks in the method SeasideServlet>>doGet:response:. Seaside works fine for me using the WaveHTTPRequestBroker in VW.
Brett - did you ever get an answer to this? I'm currently the VW port maintainer, but I haven't been following this list as closely as I should. I haven't tried the combination you describe.
Thanks, Brett Taylor
Stack Trace follows:
Unhandled exception: BlockClosure [] in Object>>doesNotUnderstand: ISO8859L1String(Object)>>doesNotUnderstand: Seaside.SeasideServlet>>doGet:response: Seaside.SeasideServlet(VisualWave.HttpServlet)>>service:response: VisualWave.ServletHandler>>basicEvaluate optimized [] in VisualWave.WWHandler>>evaluate BlockClosure>>on:do: VisualWave.ServletHandler(VisualWave.WWHandler)>>evaluate VisualWave.ServletHandler>>sendEntityOver: VisualWave.ServletHandler(VisualWave.WWHandler)>>sendCGIOver:for: optimized [] in VisualWave.WebRequest>>answerWith: BlockClosure>>on:do: VisualWave.WebRequest>>answerWith: VisualWave.WebRequestService>>privateDispatchRequest: VisualWave.WebRequestService>>dispatchRequest: VisualWave.WebRequestService>>privateServe: optimized [] in VisualWave.WebRequestService>>serveMarshaller: BlockClosure>>on:do: VisualWave.WebRequestService>>serveMarshaller: VisualWave.WaveMarshaler>>handleIncomingMessageOn: optimized [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage BlockClosure>>ensure: optimized [] in VisualWave.WaveTransport>>handlingIncomingMessage BlockClosure>>on:do: VisualWave.WaveTransport>>handlingIncomingMessage VisualWave.WaveTransport>>serverProcessBody optimized [] in Transport>>startServerProcess BlockClosure>>on:do: optimized [] in Process class>>forBlock:priority:
ISO8859L1String(Object)>>doesNotUnderstand: Receiver: an ISO8859L1String Arguments: aMessage = a Message with selector: #path and arguments: #() Temporaries: excpt = a MessageNotUnderstood resumeValue = nil Context PC = 25
Seaside.SeasideServlet>>doGet:response: Receiver: a Seaside.SeasideServlet Instance Variables: servletConfig = a VisualWave.ServletConfig dispatcherInitialized = true Arguments: aRequest = a VisualWave.Request aResponse = a VisualWave.Response Temporaries: waRequest = nil waResponse = nil dispatcher = nil handler = nil Context PC = 16
Seaside.SeasideServlet(VisualWave.HttpServlet)>>service:response: Receiver: a Seaside.SeasideServlet Instance Variables: servletConfig = a VisualWave.ServletConfig dispatcherInitialized = true Arguments: aServletRequest = a VisualWave.Request aServletResponse = a VisualWave.Response Temporaries: method = 'GET' Context PC = 13
VisualWave.ServletHandler>>basicEvaluate Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Context PC = 7
optimized [] in VisualWave.WWHandler>>evaluate Receiver: an UndefinedObject Temporaries: .self = a VisualWave.ServletHandler Context PC = 6
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WWHandler>>evaluate outerContext = nil copiedValues = a VisualWave.ServletHandler Arguments: anExceptionSelector = VisualWave.SkipRestOfPageException handlerBlock = BlockClosure [] in VisualWave.WWHandler>>evaluate Context PC = 18
VisualWave.ServletHandler(VisualWave.WWHandler)>>evaluate Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Context PC = 12
VisualWave.ServletHandler>>sendEntityOver: Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Arguments: aStream = an ExternalReadAppendStream Context PC = 4
VisualWave.ServletHandler(VisualWave.WWHandler)>>sendCGIOver:for: Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Arguments: aStream = an ExternalReadAppendStream aWebRequest = a VisualWave.WebRequest Context PC = 5
optimized [] in VisualWave.WebRequest>>answerWith: Receiver: an UndefinedObject Temporaries: .self = a VisualWave.WebRequest .aResponse = a VisualWave.ServletHandler Context PC = 26
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WebRequest>>answerWith: outerContext = nil copiedValues = an Array[2] Arguments: anExceptionSelector = an ExceptionSet[1] handlerBlock = BlockClosure [] in VisualWave.WebRequest>>answerWith: Context PC = 18
VisualWave.WebRequest>>answerWith: Receiver: a VisualWave.WebRequest Instance Variables: httpRequest = nil serverEnvironment = a Dictionary[34] queryData = nil cookieData = a VisualWave.IM_ApplicationWWWFormUrlEncoded responseStream = an ExternalReadAppendStream consumedPath = an OrderedCollection[3] unconsumedPath = an OrderedCollection[3] initiator = a VisualWave.WebRequestService entities = nil webSite = WebSite register session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) isAnswered = false Arguments: aResponse = a VisualWave.ServletHandler Context PC = 13
VisualWave.WebRequestService>>privateDispatchRequest: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWebRequest = a VisualWave.WebRequest Temporaries: responder = a VisualWave.WWResponder answer = a VisualWave.ServletHandler Context PC = 14
VisualWave.WebRequestService>>dispatchRequest: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWebRequest = a VisualWave.WebRequest Context PC = 5
VisualWave.WebRequestService>>privateServe: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aStream = an ExternalReadAppendStream Temporaries: answer = nil webHit = a VisualWave.WebHit request = a VisualWave.WebRequest Context PC = 49
optimized [] in VisualWave.WebRequestService>>serveMarshaller: Receiver: an UndefinedObject Temporaries: .self = a VisualWave.WebRequestService .stream = an ExternalReadAppendStream Context PC = 7
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WebRequestService>>serveMarshaller: outerContext = nil copiedValues = an Array[2] Arguments: anExceptionSelector = an ExceptionSet[2] handlerBlock = BlockClosure [] in VisualWave.WebRequestService>>serveMarshaller: Context PC = 18
VisualWave.WebRequestService>>serveMarshaller: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWaveMarshaller = a VisualWave.WaveMarshaler Temporaries: stream = an ExternalReadAppendStream alreadyHandledOnce = true Context PC = 26
VisualWave.WaveMarshaler>>handleIncomingMessageOn: Receiver: a VisualWave.WaveMarshaler Instance Variables: manager = Transport<a VisualWave.WaveTransport configuration = MarshalerConfiguration wave service: a VisualWave.WebRequestService service = a VisualWave.WebRequestService virtualDirectories = nil hostname = nil port = nil Arguments: aTransport = Transport<a VisualWave.WaveTransport Context PC = 4
optimized [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 7
BlockClosure>>ensure: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: aBlock = BlockClosure [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage Temporaries: result = nil Context PC = 4
optimized [] in VisualWave.WaveTransport>>handlingIncomingMessage Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 13
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WaveTransport>>handlingIncomingMessage outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: anExceptionSelector = Error handlerBlock = BlockClosure [] in VisualWave.WaveTransport>>handlingIncomingMessage Context PC = 18
VisualWave.WaveTransport>>handlingIncomingMessage Receiver: a VisualWave.WaveTransport Instance Variables: handlers = nil state = #running manager = Adaptor<a VisualWave.WaveConnectionAdaptor serverProcess = a Process in Process>>resume sendLock = a Semaphore[0] marshaler = a VisualWave.WaveMarshaler unmarshaler = a VisualWave.WaveMarshaler readBuffer = a TransportMessageHeader[1024] writeBuffer = a TransportMessageHeader[1024] configuration = TransportConfiguration waveCGI marshaler: (MarshalerConfiguration wave service: a VisualWave.WebRequestService) serverPriority: 65 requestRegistry = an OtWeakValueDictionary nextRequestId = 0 sessionObjects = a Set[0] id = IPSocketAddress(port#35550 at:hana) writeStream = an ExternalReadAppendStream readStream = an ExternalReadAppendStream socket = an active SocketAccessor Context PC = 12
VisualWave.WaveTransport>>serverProcessBody Receiver: a VisualWave.WaveTransport Instance Variables: handlers = nil state = #running manager = Adaptor<a VisualWave.WaveConnectionAdaptor serverProcess = a Process in Process>>resume sendLock = a Semaphore[0] marshaler = a VisualWave.WaveMarshaler unmarshaler = a VisualWave.WaveMarshaler readBuffer = a TransportMessageHeader[1024] writeBuffer = a TransportMessageHeader[1024] configuration = TransportConfiguration waveCGI marshaler: (MarshalerConfiguration wave service: a VisualWave.WebRequestService) serverPriority: 65 requestRegistry = an OtWeakValueDictionary nextRequestId = 0 sessionObjects = a Set[0] id = IPSocketAddress(port#35550 at:hana) writeStream = an ExternalReadAppendStream readStream = an ExternalReadAppendStream socket = an active SocketAccessor Context PC = 9
optimized [] in Transport>>startServerProcess Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 6
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in Transport>>startServerProcess outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: anExceptionSelector = TerminateException handlerBlock = BlockClosure [] in [] in Process class>>forBlock:priority: Context PC = 18
optimized [] in Process class>>forBlock:priority: Receiver: an UndefinedObject Temporaries: .aBlock = BlockClosure [] in Transport>>startServerProcess Context PC = 9
Seaside mailing list Seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/seaside
David, First of all - thanks for the port. Seaside is great, and it sure is nice to be able to work in my favorite Smalltalk(VW). No one on the Seaside list seems to care about VW though.
I haven't yet been able to get this going with the Perl CGI i/f. I just finished my first Seaside/VW application using the WaveHTTPRequestBroker and intend to work on making the CGI i/f this week. As I tear into it, I may ask you some questions.
I've found some areas that weren't implemented such as being able to send "Forms" (Gif Images) out using the HtmlRender. I've made this work in my image. Should I publish the changes to the public reposistory?
Also, I've seen walkbacks that might have to do with finalization. I'm getting DNU's sent to the Smallinteger 0. I've been ignoring it during development but I'm going to have to get that fixed before deployment. Have you noticed anything like this?
I hope to have deploy by the end of the next week. I hope you don't mind me firing off a few questions your way. Thanks, Brett Taylor
On Sat, 2004-03-20 at 13:44, David Pennell wrote:
Brett Taylor wrote:
Has anyone successfully used Seaside or Visualworks 7.2 with Apache and the CGI i/f (WaveIPRequestBroker)? I'm encountering walkbacks in the method SeasideServlet>>doGet:response:. Seaside works fine for me using the WaveHTTPRequestBroker in VW.
Brett - did you ever get an answer to this? I'm currently the VW port maintainer, but I haven't been following this list as closely as I should. I haven't tried the combination you describe.
Thanks, Brett Taylor
Stack Trace follows:
Unhandled exception: BlockClosure [] in Object>>doesNotUnderstand: ISO8859L1String(Object)>>doesNotUnderstand: Seaside.SeasideServlet>>doGet:response: Seaside.SeasideServlet(VisualWave.HttpServlet)>>service:response: VisualWave.ServletHandler>>basicEvaluate optimized [] in VisualWave.WWHandler>>evaluate BlockClosure>>on:do: VisualWave.ServletHandler(VisualWave.WWHandler)>>evaluate VisualWave.ServletHandler>>sendEntityOver: VisualWave.ServletHandler(VisualWave.WWHandler)>>sendCGIOver:for: optimized [] in VisualWave.WebRequest>>answerWith: BlockClosure>>on:do: VisualWave.WebRequest>>answerWith: VisualWave.WebRequestService>>privateDispatchRequest: VisualWave.WebRequestService>>dispatchRequest: VisualWave.WebRequestService>>privateServe: optimized [] in VisualWave.WebRequestService>>serveMarshaller: BlockClosure>>on:do: VisualWave.WebRequestService>>serveMarshaller: VisualWave.WaveMarshaler>>handleIncomingMessageOn: optimized [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage BlockClosure>>ensure: optimized [] in VisualWave.WaveTransport>>handlingIncomingMessage BlockClosure>>on:do: VisualWave.WaveTransport>>handlingIncomingMessage VisualWave.WaveTransport>>serverProcessBody optimized [] in Transport>>startServerProcess BlockClosure>>on:do: optimized [] in Process class>>forBlock:priority:
ISO8859L1String(Object)>>doesNotUnderstand: Receiver: an ISO8859L1String Arguments: aMessage = a Message with selector: #path and arguments: #() Temporaries: excpt = a MessageNotUnderstood resumeValue = nil Context PC = 25
Seaside.SeasideServlet>>doGet:response: Receiver: a Seaside.SeasideServlet Instance Variables: servletConfig = a VisualWave.ServletConfig dispatcherInitialized = true Arguments: aRequest = a VisualWave.Request aResponse = a VisualWave.Response Temporaries: waRequest = nil waResponse = nil dispatcher = nil handler = nil Context PC = 16
Seaside.SeasideServlet(VisualWave.HttpServlet)>>service:response: Receiver: a Seaside.SeasideServlet Instance Variables: servletConfig = a VisualWave.ServletConfig dispatcherInitialized = true Arguments: aServletRequest = a VisualWave.Request aServletResponse = a VisualWave.Response Temporaries: method = 'GET' Context PC = 13
VisualWave.ServletHandler>>basicEvaluate Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Context PC = 7
optimized [] in VisualWave.WWHandler>>evaluate Receiver: an UndefinedObject Temporaries: .self = a VisualWave.ServletHandler Context PC = 6
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WWHandler>>evaluate outerContext = nil copiedValues = a VisualWave.ServletHandler Arguments: anExceptionSelector = VisualWave.SkipRestOfPageException handlerBlock = BlockClosure [] in VisualWave.WWHandler>>evaluate Context PC = 18
VisualWave.ServletHandler(VisualWave.WWHandler)>>evaluate Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Context PC = 12
VisualWave.ServletHandler>>sendEntityOver: Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Arguments: aStream = an ExternalReadAppendStream Context PC = 4
VisualWave.ServletHandler(VisualWave.WWHandler)>>sendCGIOver:for: Receiver: a VisualWave.ServletHandler Instance Variables: status = nil reasonString = '' webRequest = a VisualWave.WebRequest webSite = WebSite register server = nil request = a VisualWave.Request response = a VisualWave.Response session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) servletName = 'SeasideServlet' servletClass = nil servlet = a Seaside.SeasideServlet Arguments: aStream = an ExternalReadAppendStream aWebRequest = a VisualWave.WebRequest Context PC = 5
optimized [] in VisualWave.WebRequest>>answerWith: Receiver: an UndefinedObject Temporaries: .self = a VisualWave.WebRequest .aResponse = a VisualWave.ServletHandler Context PC = 26
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WebRequest>>answerWith: outerContext = nil copiedValues = an Array[2] Arguments: anExceptionSelector = an ExceptionSet[1] handlerBlock = BlockClosure [] in VisualWave.WebRequest>>answerWith: Context PC = 18
VisualWave.WebRequest>>answerWith: Receiver: a VisualWave.WebRequest Instance Variables: httpRequest = nil serverEnvironment = a Dictionary[34] queryData = nil cookieData = a VisualWave.IM_ApplicationWWWFormUrlEncoded responseStream = an ExternalReadAppendStream consumedPath = an OrderedCollection[3] unconsumedPath = an OrderedCollection[3] initiator = a VisualWave.WebRequestService entities = nil webSite = WebSite register session = a VisualWave.HttpSession: key=14742032556888673255717667982, last accessed (March 3, 2004 8:54:02.000) isAnswered = false Arguments: aResponse = a VisualWave.ServletHandler Context PC = 13
VisualWave.WebRequestService>>privateDispatchRequest: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWebRequest = a VisualWave.WebRequest Temporaries: responder = a VisualWave.WWResponder answer = a VisualWave.ServletHandler Context PC = 14
VisualWave.WebRequestService>>dispatchRequest: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWebRequest = a VisualWave.WebRequest Context PC = 5
VisualWave.WebRequestService>>privateServe: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aStream = an ExternalReadAppendStream Temporaries: answer = nil webHit = a VisualWave.WebHit request = a VisualWave.WebRequest Context PC = 49
optimized [] in VisualWave.WebRequestService>>serveMarshaller: Receiver: an UndefinedObject Temporaries: .self = a VisualWave.WebRequestService .stream = an ExternalReadAppendStream Context PC = 7
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WebRequestService>>serveMarshaller: outerContext = nil copiedValues = an Array[2] Arguments: anExceptionSelector = an ExceptionSet[2] handlerBlock = BlockClosure [] in VisualWave.WebRequestService>>serveMarshaller: Context PC = 18
VisualWave.WebRequestService>>serveMarshaller: Receiver: a VisualWave.WebRequestService Instance Variables: resolver = a VisualWave.PathInfoPrefixResolver server = WaveIPRequestBroker active localhost:2223 trapErrors = false logChannels = a Dictionary[2] logChannelsMutex = a Semaphore[0] loadLogChannel = nil Arguments: aWaveMarshaller = a VisualWave.WaveMarshaler Temporaries: stream = an ExternalReadAppendStream alreadyHandledOnce = true Context PC = 26
VisualWave.WaveMarshaler>>handleIncomingMessageOn: Receiver: a VisualWave.WaveMarshaler Instance Variables: manager = Transport<a VisualWave.WaveTransport configuration = MarshalerConfiguration wave service: a VisualWave.WebRequestService service = a VisualWave.WebRequestService virtualDirectories = nil hostname = nil port = nil Arguments: aTransport = Transport<a VisualWave.WaveTransport Context PC = 4
optimized [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 7
BlockClosure>>ensure: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: aBlock = BlockClosure [] in [] in VisualWave.WaveTransport>>handlingIncomingMessage Temporaries: result = nil Context PC = 4
optimized [] in VisualWave.WaveTransport>>handlingIncomingMessage Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 13
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in VisualWave.WaveTransport>>handlingIncomingMessage outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: anExceptionSelector = Error handlerBlock = BlockClosure [] in VisualWave.WaveTransport>>handlingIncomingMessage Context PC = 18
VisualWave.WaveTransport>>handlingIncomingMessage Receiver: a VisualWave.WaveTransport Instance Variables: handlers = nil state = #running manager = Adaptor<a VisualWave.WaveConnectionAdaptor serverProcess = a Process in Process>>resume sendLock = a Semaphore[0] marshaler = a VisualWave.WaveMarshaler unmarshaler = a VisualWave.WaveMarshaler readBuffer = a TransportMessageHeader[1024] writeBuffer = a TransportMessageHeader[1024] configuration = TransportConfiguration waveCGI marshaler: (MarshalerConfiguration wave service: a VisualWave.WebRequestService) serverPriority: 65 requestRegistry = an OtWeakValueDictionary nextRequestId = 0 sessionObjects = a Set[0] id = IPSocketAddress(port#35550 at:hana) writeStream = an ExternalReadAppendStream readStream = an ExternalReadAppendStream socket = an active SocketAccessor Context PC = 12
VisualWave.WaveTransport>>serverProcessBody Receiver: a VisualWave.WaveTransport Instance Variables: handlers = nil state = #running manager = Adaptor<a VisualWave.WaveConnectionAdaptor serverProcess = a Process in Process>>resume sendLock = a Semaphore[0] marshaler = a VisualWave.WaveMarshaler unmarshaler = a VisualWave.WaveMarshaler readBuffer = a TransportMessageHeader[1024] writeBuffer = a TransportMessageHeader[1024] configuration = TransportConfiguration waveCGI marshaler: (MarshalerConfiguration wave service: a VisualWave.WebRequestService) serverPriority: 65 requestRegistry = an OtWeakValueDictionary nextRequestId = 0 sessionObjects = a Set[0] id = IPSocketAddress(port#35550 at:hana) writeStream = an ExternalReadAppendStream readStream = an ExternalReadAppendStream socket = an active SocketAccessor Context PC = 9
optimized [] in Transport>>startServerProcess Receiver: an UndefinedObject Temporaries: .self = Transport<a VisualWave.WaveTransport Context PC = 6
BlockClosure>>on:do: Receiver: a BlockClosure Instance Variables: method = CompiledBlock [] in Transport>>startServerProcess outerContext = nil copiedValues = Transport<a VisualWave.WaveTransport Arguments: anExceptionSelector = TerminateException handlerBlock = BlockClosure [] in [] in Process class>>forBlock:priority: Context PC = 18
optimized [] in Process class>>forBlock:priority: Receiver: an UndefinedObject Temporaries: .aBlock = BlockClosure [] in Transport>>startServerProcess Context PC = 9
Seaside mailing list Seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/seaside
Seaside mailing list Seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/seaside
On Mar 20, 2004, at 5:22 PM, Brett Taylor wrote:
First of all - thanks for the port. Seaside is great, and it sure is nice to be able to work in my favorite Smalltalk(VW). No one on the Seaside list seems to care about VW though.
More that we don't know anything than that we don't care. I've been meaning to say that I'm very glad to see you forging ahead with the VW port even though it's pretty much unsupported. I would certainly love to see the Seaside/VW community grow, and it'll take some of you brave folk to push it forward. So, many thanks.
I've actually seen some significant renewed interest in the port just recently. I'm hoping to be able to work with some VW users to make sure that when 2.5a is released (Real Soon Now, and all), the VW port can get updated very shortly thereafter.
I've found some areas that weren't implemented such as being able to send "Forms" (Gif Images) out using the HtmlRender. I've made this work in my image. Should I publish the changes to the public reposistory?
I'd like to see the changes so that I can think about how to abstract them into the SeasidePlatformSupport layer. It it possible to post a chunk-format (VW3 or whatever) changeset?
Also, I've seen walkbacks that might have to do with finalization. I'm getting DNU's sent to the Smallinteger 0. I've been ignoring it during development but I'm going to have to get that fixed before deployment. Have you noticed anything like this?
That's ringing some serious bells. I think Roger Whitney solved that one a while back? Look back through the list archives...
Avi
On Mar 20, 2004, at 5:42 PM, Avi Bryant wrote:
That's ringing some serious bells. I think Roger Whitney solved that one a while back? Look back through the list archives...
Here we go:
I found the problem. EphemeronDictionary was not being used in the version I downloaded. I did download the latest version of all three bundles. I modified SeasidePlatformSupport class>>weakDictionaryOfSize: as below. When I used the EphemeronDictionary Seaside seems rock solid. I was able to make 2000 new requests without any problem, which was not possible before. Now I am a happy camper. Thanks again for the work on the port.
SeasidePlatformSupport class>>weakDictionaryOfSize: size
^EphemeronDictionary new: size
Avi, thanks for answering. I'm sure my response was a little over stated earlier. On Sat, 2004-03-20 at 17:42, Avi Bryant wrote:
On Mar 20, 2004, at 5:22 PM, Brett Taylor wrote:
First of all - thanks for the port. Seaside is great, and it sure is nice to be able to work in my favorite Smalltalk(VW). No one on the Seaside list seems to care about VW though.
More that we don't know anything than that we don't care. I've been meaning to say that I'm very glad to see you forging ahead with the VW port even though it's pretty much unsupported. I would certainly love to see the Seaside/VW community grow, and it'll take some of you brave folk to push it forward. So, many thanks.
I've actually seen some significant renewed interest in the port just recently. I'm hoping to be able to work with some VW users to make sure that when 2.5a is released (Real Soon Now, and all), the VW port can get updated very shortly thereafter.
I'll be glad to help on the port any way I can. Seaside is great and I expect to be using it to deliver system in the future. Your 2.5 enhancements look to be very helpful.
I've found some areas that weren't implemented such as being able to send "Forms" (Gif Images) out using the HtmlRender. I've made this work in my image. Should I publish the changes to the public reposistory?
I'd like to see the changes so that I can think about how to abstract them into the SeasidePlatformSupport layer. It it possible to post a chunk-format (VW3 or whatever) changeset?
I've attached a file out that contains changes I made to Seaside to 1) Support GIF's when using the WAHtmlRenderer>>imageWithForm: aForm api. This could be enhanced to do other types of images in the future. 2) Changes I need to make to allow the system to work with the WebToolkits CGI interface. Note: The Gif Image implementation assumes a transparency pixel at 0@0. This worked for my application but may not be best for others. Also note that I've only tested these changes using in 2 configurations: 1. APACHE with modperl CGI i/f which talks to the WaveIPRequestBroker. This works with SSL. 2. I've also tested without Apache via the WaveHTTPRequestBroker.
Also, I've seen walkbacks that might have to do with finalization. I'm getting DNU's sent to the Smallinteger 0. I've been ignoring it during development but I'm going to have to get that fixed before deployment. Have you noticed anything like this?
That's ringing some serious bells. I think Roger Whitney solved that one a while back? Look back through the list archives...
Thanks for pointing this out. I found out that while I had loaded the latest Seaside bundle in the Cincom repository, it didn't have the ephemeron changes in it. I loaded the latest package with the change and all is well.
Avi
Seaside mailing list Seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/seaside
Brett Taylor wrote:
David, First of all - thanks for the port. Seaside is great, and it sure is nice to be able to work in my favorite Smalltalk(VW). No one on the Seaside list seems to care about VW though.
I care. I had a bit of time to play with this a couple of months ago and got really excited, but then we ground into the product release deathmarch. My dream use for Seaside is to do an XP planner thing that fits my current company's practices well.
I'm also excited about getting ROE (Avi's simple db interface) working in VW. But again, lately, I have less than no time.
I am excited that others are forging ahead with the VW/Seaside stuff. Unless something else really hot comes up, my plan for CS in Portland this year is to spend time porting/understanding/playing/improving Seaside for VW.
It would be really cool if any of the other Seaside folks are going to CS in Portland...Anyone?
On Mar 22, 2004, at 9:22 AM, Travis Griggs wrote:
It would be really cool if any of the other Seaside folks are going to CS in Portland...Anyone?
I'm planning to. The CSOregon2004Reg.pdf has been sitting on my desktop for about two weeks waiting for me to print it out and send it in (I'm clearly way too spoiled by online forms).
Avi
On Mon, 2004-03-22 at 09:22, Travis Griggs wrote:
Brett Taylor wrote:
David, First of all - thanks for the port. Seaside is great, and it sure is nice to be able to work in my favorite Smalltalk(VW). No one on the Seaside list seems to care about VW though.
I care. I had a bit of time to play with this a couple of months ago and got really excited, but then we ground into the product release deathmarch. My dream use for Seaside is to do an XP planner thing that fits my current company's practices well.
I'm also excited about getting ROE (Avi's simple db interface) working in VW. But again, lately, I have less than no time.
I started working on this. I'll publish what I've got done to the Cincom public repository as soon I get most of the tests to run.
I am excited that others are forging ahead with the VW/Seaside stuff. Unless something else really hot comes up, my plan for CS in Portland this year is to spend time porting/understanding/playing/improving Seaside for VW.
I just got Seaside working with the VW CGI interface. It was a hack - but all works well (at least in my environment). Seaside works great in the VW environment.
It would be really cool if any of the other Seaside folks are going to CS in Portland...Anyone?
I'd may go. It's an easy flight from here on Southwest. I'd like to work on the Seaside 2.5 VW port and ROE at CS.
Brett
On Mar 25, 2004, at 4:43 PM, Brett Taylor wrote:
I started working on this. I'll publish what I've got done to the Cincom public repository as soon I get most of the tests to run.
Cool. If there you make any changes to improve the portability, make sure to send them my way.
Avi
Hello Avi and all Recently I ported ROE to Dolphin, it was not hard at all. There are few "squeakizms" like {} in several places and mess of symbols and strings in tests should be cleared (other dialects can't directly compare them).
If there is fan club of roe (as for seaside :)) I want to sign in. I tried it and it seems that this is a very calming way to talk to database. I'm going to use it in my current project.
However there are some issues. The main problem is that current way of addressing rows in subselects fails on rows containing NULLS. Failure is caused by special behaviour of sql nulls, in short "select null in (null)" doesn't return true or false. Obvious workaround is to set columns NOT NULL and set default values, but this may be considered as too strong impact on existing databases.
I created RATestPostgresSemanticsWithNils as subclass of RATestPostgresSemantics (see attachment). I also add deletion (i feel seek when i can't delete something) using "update" family as template, but didn't created corresponding test yet. Also I found handy to have possibility of adding not full rows (RAPostgresRelation>>addValues: anArray forAttributesNamed: attributeNames). May be these features can be implemented in a more smart way, but they necessary, I think.
If somebody wants to get Dolphin pacs I'll send them too.
Danil
Avi Bryant wrote:
On Mar 25, 2004, at 4:43 PM, Brett Taylor wrote:
I started working on this. I'll publish what I've got done to the Cincom public repository as soon I get most of the tests to run.
Cool. If there you make any changes to improve the portability, make sure to send them my way.
Avi
Seaside mailing list Seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/seaside
On Mar 25, 2004, at 11:44 PM, danil osipchuk wrote:
Hello Avi and all Recently I ported ROE to Dolphin, it was not hard at all.
Great!
There are few "squeakizms" like {} in several places and mess of symbols and strings in tests should be cleared (other dialects can't directly compare them).
Ok, I'll try to fix these.
If there is fan club of roe (as for seaside :)) I want to sign in.
I suggest we use this list for now, unless or until someone objects.
However there are some issues. The main problem is that current way of addressing rows in subselects fails on rows containing NULLS. Failure is caused by special behaviour of sql nulls, in short "select null in (null)" doesn't return true or false. Obvious workaround is to set columns NOT NULL and set default values, but this may be considered as too strong impact on existing databases.
Yeah, I'd say so. But there must be some other workaround, no? Can you maybe post a full test case (sql for setting up some tables and rows with nulls, and then a roe-generated query that breaks) so that if there are any SQL gurus out there they can suggest a fix?
I created RATestPostgresSemanticsWithNils as subclass of RATestPostgresSemantics (see attachment). I also add deletion (i feel seek when i can't delete something) using "update" family as template, but didn't created corresponding test yet. Also I found handy to have possibility of adding not full rows (RAPostgresRelation>>addValues: anArray forAttributesNamed: attributeNames). May be these features can be implemented in a more smart way, but they necessary, I think.
Thanks, I'll look at merging this stuff in. I've been neglecting ROE recently, but I'll get back to it soon enough.
Avi
Avi Bryant wrote:
Yeah, I'd say so. But there must be some other workaround, no? Can you maybe post a full test case (sql for setting up some tables and rows with nulls, and then a roe-generated query that breaks) so that if there are any SQL gurus out there they can suggest a fix?
RATestPostgresSemanticsWithNils does this. It adds additional column with nulls to every table and before testing removes it by projection to provide test consistency. One can set flag in RATestPostgresSemanticsWithNils>>addNilColumnsToTables: to fill additional column with 1 to check if trick is not too hackish (btw. testFindClassmates - suffers from it for some reason).
For example this statement fails (testUpdateSimpleSelect): UPDATE students SET "name" = ('Fitzell') WHERE ("studentNumber", "name", "nilcolumn") IN (SELECT * FROM (SELECT "studentNumber" AS c1, "name" AS c2, "nilcolumn" AS c3 FROM students) AS t1 WHERE (c2='Julian'))
SELECT * FROM (SELECT "studentNumber" AS c1, "name" AS c2, "nilcolumn" AS c3 FROM students) AS t1 WHERE (c2='Julian')
gives: (2, 'Julian', NULL) and nothing can satisfy WHERE IN condition.
Right now I have no idea of general workaround not using semantics of existing table (primary keys, not null columns etc). So opinion of database gurus is very desirable.
On Mar 25, 2004, at 11:44 PM, danil osipchuk wrote:
Also I found handy to have possibility of adding not full rows (RAPostgresRelation>>addValues: anArray forAttributesNamed: attributeNames). May be these features can be implemented in a more smart way, but they necessary, I think.
Instead of #addValues:forAttributesNamed:, what about
(table projectAll: #(attr attr2)) addValues: #('foo' 'bar')?
Then there wouldn't be any operations that absolutely require you to use a concrete table.
Avi
Instead of #addValues:forAttributesNamed:, what about
(table projectAll: #(attr attr2)) addValues: #('foo' 'bar')?
Then there wouldn't be any operations that absolutely require you to use a concrete table.
Yes, of course it much more nice.
PS Just noticed, that #projectAll: can receive not only array of names, but array of attributes themselvels. So there should be: RATestPostrgresSemanticsWithNils>>dropNilColumnFromRelation: aRelation
^aRelation projectAll: (aRelation attributes reject: [:attr | attr name = self nilColumnName])
and all tests are green
Documentation? Not at the moment unfortunately. There was documentation for Seaside1.x but the development of 2.x got ahead of its documentation. There is some work currently under way to correct this. Actually there is some documentation, but definitely not on all the components. In the meantime, your best bet is to ask questions here.
As for WATrail, the usage is to create a WATrail as follows:
initialize ... other initialization ... trail _ WATrail on: someComponent.
You would then make sure the render the trail appropriately:
renderContentOn: html ... other rendering ... html render: trail. ... other rendering ...
What WATrail will do, walk through the call chain for the given component, displaying a link in the trail for each component in that chain that implements #trailName. You implement #trailName to return the string that you want displayed in the trail.
So, at work, we have a bunch of frame components that always stay the same (including the trail), and then we have a content frame that gets changed. So in the frame component I create a trail with "WATrail on: content". Then, as we call other components from the content component, the links show up on the trail.
Note that you definitely need to be using call return here: the trail definitely wouldn't make sense if you are swapping out your content frame rather than calling.
Hope that makes sense. If not, post again and I'll try to explain it some other way :)
Julian
Romain Robbes wrote:
Hi all,
I've just started to look at seaside, and I found that there are
quite a lot of components already available, which is really neat, as it allows for very easy reuse.
So after making a wonderful tabbed counter, I've starting to look at these components, thus my question :
Is there somewhere a document explaining briefly what are all those components doing, and how to succintly use them ? For example I tried to use the WATrail component, but I did not figure how to use it.
Thanks in advance, Romain Robbes
Seaside mailing list Seaside@lists.squeakfoundation.org http://lists.squeakfoundation.org/listinfo/seaside
seaside@lists.squeakfoundation.org