[Troubleshooting] MailSendException: Could not send mails: 501 illegal character(s) in domain string

As I wrote a Java code, and used JavaMail to send email. But it threw this kind of exception message:
org.springframework.mail.MailSendException: Could not send mails: 501 : illegal character(s) in domain string

Because the computer's host name is Big5, so it will throw this kind of exception. This problem had been resolved, as I change my host name to English, and restart my computer.


[Info] MaxPermSize and how it relates to the overall heap

MaxPermSize and how it relates to the overall heap

Many people have asked if the MaxPermSize value is a part of the overall -Xmx heap setting or additional to it. There is a GC document on the Sun website which is causing some confusion due to a somewhat vague explanation and an errant diagram. The more I look at this document, the more I think the original author has made a subtle mistake in describing -Xmx as it relates to the PermSize and MaxPermSize.

First, a quick definition of the "permanent generation".

"The permanent generation is used to hold reflective data of the VM itself such as class objects and method objects. These reflective objects are allocated directly into the permanent generation, and it is sized independently from the other generations." [ref]

Yes, PermSize is additional to the -Xmx value set by the user on the JVM options. But MaxPermSize allows for the JVM to be able to grow the PermSize to the amount specified. Initially when the VM is loaded, the MaxPermSize will still be the default value (32mb for -client and 64mb for -server) but will not actually take up that amount until it is needed. On the other hand, if you were to set BOTH PermSize and MaxPermSize to 256mb, you would notice that the overall heap has increased by 256mb additional to the -Xmx setting.

So for example, if you set your -Xmx to 256m and your -MaxPermSize to 256m, you could check with the Solaris 'pmap' command how much memory the resulting process is taking up.


$ uname -a
SunOS devnull 5.8 Generic_108528-27 sun4u sparc

$ java -version
java version "1.3.1_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_02-b02)
Java HotSpot(TM) Client VM (build 1.3.1_02-b02, mixed mode)

$ java -Xms256m -Xmx256m -XX:MaxPermSize=256m Hello &
$ pmap 6432
6432: /usr/java1.3.1/bin/../bin/sparc/native_threads/java -Xms256m -Xmx256m

total 288416K
Notice above that the overall heap is not 256m+256m yet? Why? We did not specify PermSize yet, only MaxPermSize.

$ java -Xms256m -Xmx256m -XX:PermSize=256m -XX:MaxPermSize=256m Hello &
$ pmap 6472
6472: /usr/java1.3.1/bin/../bin/sparc/native_threads/java -Xms256m -Xmx256m

total 550544K

Now we see the overall heap grow, -Xmx+PermSize. This shows conclusive proof that PermSize and MaxPermSize are additional to the -Xmx setting.



[Troubleshooting] Managed Server cannot boot after password of admin user has been changed from admin console

If you change the password of the admin user from the admin console without running managed servers, the managed servers cannnot boot because of an authentication error of the admin user.

Security data e.g., password) is stored in the Embedded LDAP by default and it is replicated from the admin server to the managed servers. If there is an inconsistency of the security data between the admin and managed servers, the error will occur.
In order to refresh all replicated data at boot time, you need to set 'Refresh Replica At Startup' from the Admin Console. You can set this property by following the following steps in the Admin console:
Domain --> Security --> Embedded LDAP Server.


[Info] Spring PropertyPlaceholderConfigurer

How many times have you been on a project, and people are talking about where to share configuration data?

Do I use some constants? What about a config file (XML, properties, etc)?

Sometimes it isn't easy to know what to do, and you sometimes end up with duplicate information.

For example, what if you want to share database information between your code, your ant build, and anything else?

With Spring, you can use their really nice PropertyPlaceholderConfigurer, and easily share a properties file. You can simply share one properties file for all of your build info as well as Spring sharing, or you can of course seperate things out, and have multiple 's in your build script.

So, the steps for sharing the data:......