Compile Error

I’'m attempting to compile Jive from source for the first time, and get a compile error at java/org/jivesoftware/database/JNDIDataSourceProvider, line 113.

The constructor for InitialContext is being passed a Properties object, but there is no constructor for InitialContext that takes a Properties object. There is one that takes a Hashtable(<String, ?>),

though.

Using JDK1.5.0, jive_messenger_src_2_2_0 source.

Hi mcgredo,

Properties actually inherits from Hastabalbe, so passing a Properties object to the InitialContext constructor is valid. Are you using the ant build script to compile Messenger?

Thanks,

Ryan

Yep, used the ant script and JDK1.5.0.

The argument to InitialContext is a generic, Hashtable(,?) while Properties

inherits from Hashtable(Object, Object). Is that the source of the problem, that

Properties can take a non-String as the key?

Hey McGregor,

Could you post the compilation error that you are getting? How are you compiling the source code? Are you using an IDE?

Regards,

– Gato

Compiling from the command line.

Windows XP, JDK1.5.0:

C:\projects\jive\jive_messenger_src\build>ant

Buildfile: build.xml

init:

Expanding: C:\projects\jive\jive_messenger_src\build\lib\merge\whack

.jar into C:\projects\jive\jive_messenger_src\target\whack

compile:

Compiling 273 source files to C:\projects\jive\jive_messenger_src\ta

rget\classes

C:\projects\jive\jive_messenger_src\src\java\org\jivesoftware\database\JNDIData SourceProvider.java:113: cannot find symbol

symbol : constructor InitialContext(java.util.Properties)

location: class javax.naming.InitialContext

context = new InitialContext(contextProperties);

^

Note: * uses or overrides a deprecated API.

Note: Recompile with -Xlint:deprecation for details.

Note: Some input files use unchecked or unsafe operations.

Note: Recompile with -Xlint:unchecked for details.

1 error

BUILD FAILED

C:\projects\jive\jive_messenger_src\build\build.xml:238: Compile failed; see the

compiler error output for details.

Total time: 5 seconds

C:\projects\jive\jive_messenger_src\build>which javac

/cygdrive/c/Program Files/Java/jdk1.5.0/bin/javac

As I said, the InitialContext constructor barfs because it’'s getting passed a

Properties rather than a Hashtable–apparently because the InitialContext Hashtable argument is parameterized to be a <String, ?> and a Properties object constructor can take an (Object, Object) argument:

InitialContext(Hashtable<String,?> environment)

Constructs an initial context using the supplied environment.

While Properties is a subclass of Hashtable, this particular constructor has a narrower view of what can be in Hashtables.

I fixed this by simply changing the declaration of the object being passed

in to a Hashtable and changing the method for adding to the contents

of the container.

Hi mcgredo,

It’‘s so strange that you are getting this error. According the url=http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/InitialContext.htmlInitialContext javadocs[/url] the constructor argument is InitialContext(Hashtable<?,?> environment). I looked to see if there is a bug for this issue in the 1.5 release of the JDK but I didn’'t see one. Could you upgrade to the latest JDK release, 1.5.0_04, to see if that that fixes the problem?

Thanks,

Ryan

Yes, that got it. Moving to 1.5_04 solved the problem. Apparently Sun has been monkeying with the API.