Gostaria de saber como , no JBoss , publicar um , ou alguns, pools de conexões com banco de dados.
O fato é vou precisar acessar este pool de EJB’s BMP e Servlets e gostaria de acessá-los via JNDI.
Sei que alguns appServers tem este tipo de serviço e gostaria de usá-lo no JBoss.
No diretório $JBOSS_HOME/docs/examples/jca tem um monte de exemplos de arquivos pré configurados para diversos bancos de dados. Basta copiar para outro arquivo (desde que esteja no formato ???-service.xml), e copiá-lo para o diretório $JBOSS_HOME/server/default/deploy, e agora já é possível pegar um DataSource usando JNDI
[]s, Welington B. Souza
C
CLAUDIO_GUALBERTO
Blz, eu peguei o exemplo para Oracle, fiz as alterações necessárias e rodou blz.
Um problema que encontrei é que, mesmo definindo o nome de usuário e senha no XML, no momento de pegar uma conexão eu tive que mandar usuário e senha, pois sem isso ele lança uma SQLException dizendo que os parametros são inválidos.
Como fazer para ele não pedir usuário e senha no ato do DataSource.getConnection() ?, pois assim os objetos clientes seriam menos aclopados ao DataSource.
Obrigado pela ajuda.
Claudio Gualberto
SCJP 1.4
wbsouza
segue o codigo abaixo que faz o que vc quer
packagestrutsdemo.bean;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.LinkedList;importjavax.naming.InitialContext;importjavax.naming.NamingException;importjavax.sql.DataSource;publicclassAdminUsers{protectedstaticDataSourcedataSource;publicAdminUsers()throwsException{if(dataSource==null){try{InitialContextic=newInitialContext();dataSource=(DataSource)ic.lookup("java:OracleDS");}catch(NamingExceptionex){System.out.println(ex.getMessage());throwex;}}}protectedConnectiongetConnection()throwsSQLException{Connectionconn=null;try{conn=dataSource.getConnection();}catch(SQLExceptione){throwe;}returnconn;}protectedvoidcloseConnection(Connectionconn,PreparedStatementstmt,ResultSetrs){if(rs!=null){try{rs.close();}catch(SQLExceptione){}}if(stmt!=null){try{stmt.close();}catch(SQLExceptione){}}if(conn!=null){try{conn.close();}catch(SQLExceptione){}}}publicLinkedListgetUserList()throwsSQLException{Connectionconn=null;PreparedStatementstmt=null;ResultSetrs=null;LinkedListusers=newLinkedList();try{conn=getConnection();stmt=conn.prepareStatement("select * from usuario");rs=stmt.executeQuery();while(rs.next()){UserDatauser=newUserData();user.setIdUsuario(rs.getInt("id_usuario"));user.setNome(rs.getString("nome"));user.setLogin(rs.getString("login"));user.setSenha(rs.getString("senha"));user.setSexo(rs.getString("sexo"));user.setAtivo(rs.getBoolean("ativo"));user.setFaixaIdade(rs.getInt("faixa_idade"));users.add(user);}}catch(SQLExceptione){throwe;}finally{closeConnection(conn,stmt,rs);}returnusers;}}
[]s, Welington B. Souza
C
CLAUDIO_GUALBERTO
Ok, o uso do objeto de conexão não é problema, o problema é como configurar o oracle-service.xml para que quando eu for usar um getConnection() no DataSource eu não precisar mandar usuário e senha, pois assim vou ter que encher os deployment descriptors de meus EJBs com essa informação, sendo que eu poderia te-la somente na definição do serviço.
Obrigado pela ajuda.
Claudio Gualberto
SCJP 1.4
wbsouza
Pegando o arquivo que fica em $JBOSS_HOME/docs/examples/jca e setando as suas propriedades (é necessário informar o usuário e a senha dentro deste arquivo). Veja no codigo java que passei, não estou informando usuário e senha. O JBoss pega do arquivo oracle-service.xml
A dúvida agora é a seguinte : Eu tenho vários EJB´s no mesmo ejb-jar.jar , e gostaria de definir um parametro ao qual todos eles tenham acesso, atravéz do BeanContext ou sei-la como. Como definir isso uma unica vez no no ejb-jar.xml e como pegar essas informações dentro do código dos Beans. Desculpe por estas perguntas básicas, acontece que sou novato em EJB´s e obrigado pelo ajuda.
Claudio Gualberto
SCJP 1.4
wbsouza
Não tenho resposta para esta pergunta. Talvez vc consiga encontrar algo no forum, onde foram postados alguns links a respeito do assunto.