*> make sure to clear the cache first*

Sounds like you haven't setup your caching correctly.  Mine always works 
perfectly, never have to clear the cache in dev, or when doing a server 
update.  Here's my Filter:

/**
 * Tell the browser not to cache the .nocache files, by changing the 
expires time in the HTTP header.
 */
@Component
@Order(1)
public class ServletFilter implements Filter {
private static final String NO_CACHE = ".nocache.js";

@Override
public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException {
String requestURI = ((HttpServletRequest)request).getRequestURI();

// Don't cache the nocache
if (requestURI.endsWith(NO_CACHE)) {
setNoCache((HttpServletResponse)response);
}

// Request HTTPS
((HttpServletResponse)response).setHeader("Strict-Transport-Security", 
"max-age=31536000; includeSubDomains");

chain.doFilter(request, response);
}

private void setNoCache(HttpServletResponse httpResponse) {
long currentTime = new Date().getTime();
httpResponse.setDateHeader("Last-Modified", currentTime);
httpResponse.setDateHeader("Expires", currentTime - 86400000L);
httpResponse.setHeader("Pragma", "no-cache");
httpResponse.setHeader("Cache-Control", "no-store");
}
}

On Friday, 20 December 2024 at 4:40:22 pm UTC+11 Leon wrote:

> One thing that is also quite relevant when developing a GWT application is 
> to realize that all GWT generated code lives in the browser and that 
> browser caching can be a problem. Whenever you do a GWT compile and want to 
> check the result in the browser, make sure to clear the cache first because 
> the old code will very likely not be reloaded.
> I always have the developer mode in the browser open when developing and 
> never click reload, but always 'empty cache and hard reload'. You will need 
> it a lot.
> The same goes for server updates. Best to do them late in the day or early 
> in the morning, so users can't have stale code in their browsers. 
> Either that, or learn them to do the hard reload (but you can also try and 
> learn dogs to fly, that might have the same level of success).
>
> Neil, I think you are trying to learn GWT in the hardest way possible. 
> GWT is a way to develop a UI using java, but it is not run as java, and at 
> runtime will not have the same possibilities as java. 
> So it has its limitations when compared to what you can do with java on 
> the server.
> When you've developed something for standard java to work, based on all 
> available libraries and known server possibilities, which you want to port 
> to GWT is like trying to port a sportscar into a tractor. It's not 
> impossible, but it is quite the challenge.
>
> On Thu, Dec 19, 2024 at 9:56 PM <[email protected]> wrote:
>
>> [email protected] 
>> <https://groups.google.com/forum/?utm_source=digest&utm_medium=email#!forum/google-web-toolkit/topics>
>>  Google 
>> Groups 
>> <https://groups.google.com/forum/?utm_source=digest&utm_medium=email/#!overview>
>>  [image: 
>> Google Groups Logo] 
>> <https://groups.google.com/forum/?utm_source=digest&utm_medium=email/#!overview>
>>  
>> Topic digest 
>> View all topics 
>> <https://groups.google.com/forum/?utm_source=digest&utm_medium=email#!forum/google-web-toolkit/topics>
>>  
>>
>>    - Class not included in the set of types for RPC 
>>    <#m_-3755475407748149359_m_-7451696477866393627_group_thread_0> - 4 
>>    Updates 
>>    - Digest for [email protected] - 18 updates in 5 topics 
>>    <#m_-3755475407748149359_m_-7451696477866393627_group_thread_1> - 2 
>>    Updates 
>>    - Getting 500 error from RPC call 
>>    <#m_-3755475407748149359_m_-7451696477866393627_group_thread_2> - 6 
>>    Updates 
>>
>> Class not included in the set of types for RPC 
>> <http://groups.google.com/group/google-web-toolkit/t/b942c870bc91dc15?utm_source=digest&utm_medium=email>
>>  
>> Neil Aggarwal <[email protected]>: Dec 18 10:45PM -0600 
>>
>> I am getting this error on the server:
>> Type 'com.propfinancing.puzzle.slitherlink.Line' was not included in the
>> set of types which can be
>> serialized by this SerializationPolicy or its Class object could not be
>> loaded. For security purposes,
>> this type will not be serialized.: instance = Line 0
>>  
>> And looking in the .gwt.rpc file, it is not listed there.
>>  
>> Interestingly, I see this:
>> com.propfinancing.puzzle.slitherlink.Line$STATUS
>> which is an Enum in that class so the GWT compiler obviously processed the
>> class.
>>  
>> I did not get any warnings or error messages from the GWT compiler as to
>> why it
>> decided it did not like the class so now I have to guess what it did not
>> like.
>>  
>> Is there a way to improve the messaging to the user to help understand
>> what happened?
>>  
>> Thank you,
>> Neil
>>  
>> --
>> Neil Aggarwal, (972) 834-1565, http://www.propfinancing.com
>> We offer 30 year loans on single family houses!
>> Craig Mitchell <[email protected]>: Dec 18 11:08PM -0800 
>>
>> At a guess, the inner enum needs to be told it can be serialised. Ie:
>>  
>> import com.google.gwt.user.client.rpc.IsSerializable;
>>  
>> enum STATUS implements IsSerializable { ... }
>>  
>> On Thursday, 19 December 2024 at 3:46:31 pm UTC+11 Neil Aggarwal wrote:
>>  
>> Colin Alworth <[email protected]>: Dec 19 06:19AM -0800 
>>
>> Enums never need to be marked as serializable - unlike records, the Enum 
>> type itself is always serializable, and GWT-RPC assumes the same. From 
>>
>> https://www.gwtproject.org/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes
>>  
>> A type is serializable and can be used in a service interface if one of 
>> the 
>> following is true:
>> ...
>> * The type is an enumeration. Enumeration constants are serialized as a 
>> name only; none of the field values are serialized.
>>  
>>  
>> That error message is indeed what is used when the standard serialization 
>> policy is read from disk, so you've resolved that earlier issue. Can you 
>> confirm that the policy file does include Line (that is, it is correctly 
>> reachable from the remote service instance)? If not, the GWT-RPC 
>> generator 
>> (run when the compiler is invoked) might not have seen a clear path to 
>> how 
>> this type could be used. Common reasons for that include declaring a 
>> field 
>> as being of type Object, which in your head means that any type could be 
>> assigned, but GWT-RPC doesn't want to mark every possibly class as 
>> potentially serializable (both for security reasons and to avoid 
>> generating 
>> serialization code for your client for every possible type). 
>>  
>> On Thursday, December 19, 2024 at 1:08:53 AM UTC-6 
>> [email protected] 
>> wrote:
>>  
>> Neil Aggarwal <[email protected]>: Dec 19 10:11AM -0600 
>>
>> > Enumeration constants are serialized as a name only; none of the field
>> values are serialized.
>>  
>>  
>>  
>> What are the consequences of not having the values?
>>  
>> Reading on the Internet, it means I can’t use valueOf() and ordinal().
>>  
>> But, does it work normally otherwise?
>>  
>> Can I assign a constant value to a field, read that value, and compare the
>> value to one of the
>> constants?
>>  
>>  
>>  
>> > Can you confirm that the policy file does include Line
>>  
>>  
>>  
>> It does not have Line in it:
>>  
>>  
>>  
>> @FinalFields, true
>>  
>> *com*._3dmathpuzzles.play.client.GetPuzzleService, false, false, false,
>> false, _, 4203465842
>>  
>> *com*._3dmathpuzzles.slitherlink.RectangularWithDiagonalsPuzzle, true,
>> true, false, false,
>> *com*._3dmathpuzzles.slitherlink.RectangularWithDiagonalsPuzzle/
>> 2547295082 <(254)%20729-5082>,
>> 2547295082 <(254)%20729-5082>
>>  
>> com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException, true,
>> true, true, true,
>>
>> com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException/3936916533,
>> 3936916533
>>  
>> com.google.gwt.user.client.rpc.RpcTokenException, true, true, false, 
>> false,
>> com.google.gwt.user.client.rpc.RpcTokenException/2345075298 
>> <(234)%20507-5298>, 2345075298 <(234)%20507-5298>
>>  
>> com.google.gwt.user.client.rpc.XsrfToken, false, false, true, true,
>> com.google.gwt.user.client.rpc.XsrfToken/4254043109 <(425)%20404-3109>, 
>> 4254043109 <(425)%20404-3109>
>>  
>> com.propfinancing.puzzle.Puzzle, true, false, false, false,
>> com.propfinancing.puzzle.Puzzle/1723715424, 1723715424
>>  
>> com.propfinancing.puzzle.slitherlink.Box, true, true, false, false,
>> com.propfinancing.puzzle.slitherlink.Box/1302152982, 1302152982
>>  
>> com.propfinancing.puzzle.slitherlink.Box$STATE, true, true, false, false,
>> com.propfinancing.puzzle.slitherlink.Box$STATE/1639054469, 1639054469
>>  
>> com.propfinancing.puzzle.slitherlink.BoxWithDiagonals, true, true, false,
>> false, com.propfinancing.puzzle.slitherlink.BoxWithDiagonals/2774485663,
>> 2774485663
>>  
>> com.propfinancing.puzzle.slitherlink.Component, true, false, false, false,
>> com.propfinancing.puzzle.slitherlink.Component/4011233562, 4011233562
>>  
>> com.propfinancing.puzzle.slitherlink.Line$STATUS, true, true, false, 
>> false,
>> com.propfinancing.puzzle.slitherlink.Line$STATUS/1640439993, 1640439993
>>  
>> com.propfinancing.puzzle.slitherlink.NumberedBox, true, true, false, 
>> false,
>> com.propfinancing.puzzle.slitherlink.NumberedBox/1782628205, 1782628205
>>  
>> com.propfinancing.puzzle.slitherlink.Puzzle, true, false, false, false,
>> com.propfinancing.puzzle.slitherlink.Puzzle/2584703185, 2584703185
>>  
>> com.propfinancing.puzzle.slitherlink.RectangularPuzzle, true, false, 
>> false,
>> false, com.propfinancing.puzzle.slitherlink.RectangularPuzzle/3177548746 
>> <(317)%20754-8746>,
>> 3177548746 <(317)%20754-8746>
>>  
>> com.propfinancing.puzzle.slitherlink.RectangularWithDiagonalsPuzzle, true,
>> false, false, false,
>>
>> com.propfinancing.puzzle.slitherlink.RectangularWithDiagonalsPuzzle/3793384887,
>> 3793384887
>>  
>> java.lang.Exception, true, false, true, false,
>> java.lang.Exception/1920171873, 1920171873
>>  
>> java.lang.RuntimeException, true, false, true, false,
>> java.lang.RuntimeException/515124647, 515124647
>>  
>> java.lang.String, true, true, true, true, java.lang.String/2004016611,
>> 2004016611
>>  
>> java.lang.Throwable, true, false, true, false,
>> java.lang.Throwable/2953622131, 2953622131
>>  
>> java.util.ArrayList, true, true, false, false,
>> java.util.ArrayList/4159755760 <(415)%20975-5760>, 4159755760 
>> <(415)%20975-5760>
>>  
>> java.util.HashMap, true, true, false, false, java.util.HashMap/1797211028,
>> 1797211028
>>  
>> java.util.LinkedHashMap, true, true, false, false,
>> java.util.LinkedHashMap/3008245022, 3008245022
>>  
>>  
>>  
>> > the GWT-RPC generator (run when the compiler is invoked) might not have
>> seen a clear path to how this type could be used
>>  
>>  
>>  
>> Unfortunately, it is silent about the reason.
>>  
>> I am hoping we can improve it help the developer instead of leaving me to
>> make guesses.
>>  
>>  
>>  
>> Thank you,
>>  
>> Neil
>>  
>>  
>>  
>> --
>>  
>> Neil Aggarwal, (972) 834-1565, http://www.propfinancing.com
>>  
>> We offer 30 year loans on single family houses!
>> Back to top <#m_-3755475407748149359_m_-7451696477866393627_digest_top> 
>> Digest for [email protected] - 18 updates in 5 topics 
>> <http://groups.google.com/group/google-web-toolkit/t/5ccddbca51e8cc16?utm_source=digest&utm_medium=email>
>>  
>> Leon <[email protected]>: Dec 19 07:50AM +0100 
>>
>> Hi Neil,
>>  
>> If you hardcode an url in your GWT calls, it will be tied to that specific
>> url. Local testing will not be possible (outside of hacking your own hosts
>> file) and if you modify your servername you'll need to update your source
>> code.
>>  
>> The webserver is the perfect place to forward your request to the tomcat
>> instance.
>> For apache webserver you can do this with the mod_proxy module. Nginx has
>> the same with proxy_forward (or something similar, don't know by heart).
>>  
>> rg,
>>  
>> Leon.
>>  
>> Vassilis Virvilis <[email protected]>: Dec 19 09:15AM +0200 
>>
>> I agree with Leon and I can only add that there is also libapache2-mod-jk
>> to directly proxy from apache to tomcat. The elevator's pitch is about
>> speed but I think that is also simpler to understand and setup.
>>  
>>  
>> -- 
>> Vassilis Virvilis
>> Back to top <#m_-3755475407748149359_m_-7451696477866393627_digest_top> 
>> Getting 500 error from RPC call 
>> <http://groups.google.com/group/google-web-toolkit/t/2a4ae7b373d7b76e?utm_source=digest&utm_medium=email>
>>  
>> Neil Aggarwal <[email protected]>: Dec 18 03:48PM -0600 
>>
>> I wrote a very simple class:
>>  
>>  
>>  
>> *package* com._3dmathpuzzles.slitherlink;
>>  
>>  
>>  
>> *import* java.io.Serializable;
>>  
>>  
>>  
>> *public* *class* TestPuzzle *implements* Serializable {
>>  
>> *private* *static* *final* *long* *serialVersionUID* = 1L;
>>  
>>  
>>  
>> /** Constructor */
>>  
>> *public* TestPuzzle() {
>>  
>> *super*();
>>  
>> }
>>  
>> }
>>  
>>  
>>  
>> And updated my RPC call to use it and I still get this:
>>  
>>  
>>  
>> Exception while dispatching incoming RPC call
>>  
>> com.google.gwt.user.client.rpc.SerializationException:
>>  
>> Type 'com._3dmathpuzzles.slitherlink.TestPuzzle' was not assignable to
>>  
>> 'com.google.gwt.user.client.rpc.IsSerializable' and did not have a custom
>> field serializer.
>>  
>> For security purposes, this type will not be serialized.: instance =
>>  
>> com._3dmathpuzzles.slitherlink.TestPuzzle@40a58058
>>  
>>  
>>  
>> I am not sure what to do about this. My class implements Serializable
>> and has a no-arg constructor.
>>  
>>  
>>  
>> Thank you,
>>  
>> Neil
>>  
>>  
>>  
>> --
>>  
>> Neil Aggarwal, (972) 834-1565, http://www.propfinancing.com
>>  
>> We offer 30 year loans on single family houses!
>> Colin Alworth <[email protected]>: Dec 18 01:57PM -0800 
>>
>> You're triggering the LegacySerializationPolicy... we should make that 
>> clearer when it happens.
>>  
>> This occurs when your <hash>.gwt.rpc policy file wasn't present on the 
>> server (or wasnt at the expected path). Legacy serialization is much more 
>> strict in what it will accept.
>>  
>> Generated policy files ensure that the server and client agree on what 
>> can 
>> be serialized. This file is generated into the same directory as your 
>> .nocache.js file, and should be available on the server if running in 
>> production. If running with super dev mode and a separate server, you can 
>> direct the server to download the current policy file from SDM by 
>> specifying system property gwt.codeserver.port with the localhost port to 
>> the SDM server. Be sure to reload the server application or hot reload 
>> classes if they change, so that the server side classes match the client 
>> (and the client's policy file).
>>  
>> On Wednesday, December 18, 2024 at 3:48:49 PM UTC-6 
>> [email protected] 
>> wrote:
>>  
>> Neil Aggarwal <[email protected]>: Dec 18 04:44PM -0600 
>>
>>
>> > This occurs when your <hash>.gwt.rpc policy file wasn't present on the
>> > server (or wasnt at the expected path). Legacy serialization is much 
>> more
>> > strict in what it will accept.
>>  
>> I saw a warning about that in the log but not know what it meant.
>> I am serving the client side files from Apache and the server side files
>> from Tomcat so they are separate.
>>  
>> Where does the server side code expect the .gwt.rpc file to be?
>>  
>> Colin Alworth <[email protected]>: Dec 18 06:11PM -0800 
>>
>> The server expects the client to tell it where the file should be, and 
>> the 
>> client reports that the file should be in the same directory as its 
>> .nocache.js file - we call that the "base directory" of a gwt 
>> application. 
>>  
>> RemoteServiceServlet.getSerializationPolicy is responsible for looking 
>> this 
>> up, based on the incoming request, and the expected name of the generated 
>> file (according to the client). If using SDM and a port provided as I 
>> mentioned, this method will defer to getCodeServerPolicyUrl() if no 
>> policy 
>> file was found on the server itself. Otherwise, you'll see the warning 
>> you 
>> mentioned.
>>
>> On Wednesday, December 18, 2024 at 4:45:23 PM UTC-6 
>> [email protected] 
>> wrote:
>>  
>> Neil Aggarwal <[email protected]>: Dec 18 10:06PM -0600 
>>
>> I see this in the log:
>>  
>>  
>>  
>> com._3dmathpuzzles.play.server.GetPuzzleServiceImpl: ERROR: The module 
>> path
>> requested, /play/DiagonalSlitherlink/, is not in the same web application
>> as this servlet, /3dmp. Your module may not be properly configured or your
>> client and server code maybe out of date.
>>  
>>  
>>  
>> Looking at the source code for RemoteServiceServlet, I see that it wants
>> the module path to start with the
>> webapp context, but it does not match in my setup.
>>  
>>  
>>  
>> Is there a way to override the behavior, maybe load it manually or
>> something?
>>  
>>  
>>  
>> I see a method putCachedSerializationPolicy but it is private.
>>  
>>  
>>  
>> Thank you,
>>  
>> Neil
>>  
>>  
>>  
>> --
>>  
>> Neil Aggarwal, (972) 834-1565, http://www.propfinancing.com
>>  
>> We offer 30 year loans on single family houses!
>> Neil Aggarwal <[email protected]>: Dec 18 10:21PM -0600 
>>
>> > The server expects the client to tell it where the file should be, and
>> the client reports that the file should
>>  
>> > be in the same directory as its .nocache.js file
>>  
>> > we call that the "base directory" of a gwt application.
>>  
>>  
>>  
>> I decided to stop fighting with GWT and moved the module from Apache
>> to Tomcat. The test RPC started working once I did that.
>>  
>>  
>>  
>> I changed the code to try to retrieve my DiagonalSlitherlink puzzle, but 
>> it
>> it is giving me an error. I am investigating.
>>  
>>  
>>  
>> Thanks for the help!
>>  
>>  
>>  
>> Neil
>>  
>>  
>>  
>> --
>>  
>> Neil Aggarwal, (972) 834-1565, http://www.propfinancing.com
>>  
>> We offer 30 year loans on single family houses!
>> Back to top <#m_-3755475407748149359_m_-7451696477866393627_digest_top> 
>> You received this digest because you're subscribed to updates for this 
>> group. You can change your settings on the group membership page 
>> <https://groups.google.com/forum/?utm_source=digest&utm_medium=email#!forum/google-web-toolkit/join>
>> .
>> To unsubscribe from this group and stop receiving emails from it send an 
>> email to [email protected]. 
>>
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/google-web-toolkit/7718ca69-c56a-43fa-861a-6c47147c85b9n%40googlegroups.com.

Reply via email to