JNDI Read Only?

Olá estou usando o Tomcat 6 ,
e estou tentando pendurar um DataSource na JNDI

try{
	Context newContext = new InitialContext();
	newContext.bind( dataSourceWrappedID, wrappedDs );
	newContext.close();
}catch(NameAlreadyBoundException nabe){
	// ok..
}catch(NamingException ne){
	if ( log.isWarnEnabled() ){
		log.warn("Ocorreu um erro inexperado:", ne);
	}
}

Vejam a Exception

WARNING: Ocorreu um erro inexperado:
javax.naming.NamingException: Context is read only
        at org.apache.naming.NamingContext.checkWritable(NamingContext.java:903)
        at org.apache.naming.NamingContext.bind(NamingContext.java:831)
        at org.apache.naming.NamingContext.bind(NamingContext.java:171)
        at org.apache.naming.NamingContext.bind(NamingContext.java:187)
        at org.apache.naming.SelectorContext.bind(SelectorContext.java:171)
        at javax.naming.InitialContext.bind(InitialContext.java:400)

Alguem sabe o motivo disso?

Valeu! :smiley:

Curiosidade, porque diacho você ta bindando o datasource na sua aplicação e não configurando nos xmlszinhos do tomcat como sempre foi feito?

Não tenho a menor ideia por que você quer fazer isso, mas o motivo de não funcionar é muito simples: Context is read only

O JNDI do Tomcat é read only para a aplicação.

Porque o pessoal aqui criou um Wrapper de Datasource então eles fazem o seguinte , pegam o DataSource da JNDI , e criam um Wrapper em cima dele e depois disso bindam novamente na JNDI. Isso era feito “normalmente” usando o JBoss…

DS = JavaDS
WDS = JavaWrappedDS

Sim claro mas porque ele é read only ?
Nao tem como eu dar um chmod 777 nele ? :lol:

Alguma salvação ? Valeu pelas respostas! :smiley:

Lendo a documentação do Tomcat 6 vi que há uma parte de
permissões para a JNDI que esta na parte de segurança em $TOMCAT_HOME/conf/catalina.policy
http://tomcat.apache.org/tomcat-6.0-doc/security-manager-howto.html

Depois de achar isso , procurei os tipos de permissoes que eu poderia estar passando para a parte de JNDI
http://java.sun.com/j2se/1.5.0/docs/guide/security/permissions.html

catalina.policy

grant { 
    // Required for JNDI lookup of named JDBC DataSource's and
    // javamail named MimePart DataSource used to send mail
    permission java.util.PropertyPermission "java.home", "read,write";
    permission java.util.PropertyPermission "java.naming.*", "read,write";
    permission java.util.PropertyPermission "javax.sql.*", "read,write";

    // OS Specific properties to allow read access
    // Continuou com as propriedades default..
    .....
}

Porem o erro continua… :cry:

WARNING: Ocorreu um erro inexperado:
javax.naming.NamingException: Context is read only
        at org.apache.naming.NamingContext.checkWritable(NamingContext.java:903)

        at org.apache.naming.NamingContext.bind(NamingContext.java:831)
        at org.apache.naming.NamingContext.bind(NamingContext.java:171)
        at org.apache.naming.NamingContext.bind(NamingContext.java:187)
        at org.apache.naming.SelectorContext.bind(SelectorContext.java:171)
        at javax.naming.InitialContext.bind(InitialContext.java:400)

&#@&#%&%#@&*@#@&@%# :lol:

Ta faltou iniciar com -security: :x

[guilherme@neura : /tomcatDir/bin] catalina start -security 

Agora trocou o erro: :frowning:

Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission org.apache.commons.logging.LogFactory.HashtableImpl read)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)

E entao ? :slight_smile: