quarta-feira, 12 de dezembro de 2012

Passei! 1Z0-895 Java Platform, Enterprise Edition 6 Enterprise JavaBeans Developer Certified Expert Exam

Olás,

Passei na certificação de EJB Developer da Oracle dia 07/12/12.

Estudei pelo livro EJB 3 In Action (http://www.amazon.com/EJB-3-Action-Debu-Panda/dp/1933988347). Não precisa estudar os capítulos referentes a JPA. O problema desse livro é que ele é sobre EJB 3 e não 3.1, logo, é necessário estudar os tópicos do EJB 3.1 por fora.

Não achei esse livro muito bom não, mas dá para pegar os conceitos básicos e não deixa de ser um bom ponto de partida.

Após ler o livro comecei a fazer mocks. Utilizei o único que achei, o da Enthuware (http://enthuware.com/index.php/mock-exams/oracle-certified-expert/oceejbd-ejb-6). Ele é excelente e muito fiel a prova.

Conforme as dúvidas iam surgindo durante o mock eu sanava pela JSR (http://jcp.org/en/jsr/detail?id=318). A JSR não é boa para ser usado como Livro Texto (fonte inicial de aprendizado), pois não é um documento didático (não se espera que seja mesmo), mas é a melhor fonte de informações para dúvidas pontuais.

O método de estudo que adotei foi aprender por repetição. Fiz o mock inicial e os quatro mocks standards. Para cada mock eu fazia a primeira vez, depois revisava todas as questões e depois refazia o mock. A primeira vez a nota sempre era de baixa para média, mas na repetição a nota sempre era muito alta.

O tempo que gasto para fazer o mock pela primeira vez é por volta de 2 horas. A revisão precisa de 3 a 4 horas, pois é quando você realmente estuda. A repetição do mock demora 1 hora, pois você já está dominando os assuntos. É importante não decorar as respostas, mas sim conseguir explicá-las.

Para cobrir todos os tópicos da prova é necessário fazer os 4 mocks standards porque a distribuição das questões não está 100%. Tem mock que cai mais um assunto e do que outro.

Quando terminei de fazer os mocks, refiz as questões que eu nunca acertei (nem na primeira e nem na repetição) para todos os mocks. Tem uma funcionalidade para isso no software da Enthuware. Acreditem ou não, eu consegui não acertar 3 questões mesmo após esse último teste, mas a maioria eu acertei.

Passei com 90% e fiquei satisfeito com o tempo que gastei para estudar.

Boa sorte nos estudos.

quarta-feira, 31 de outubro de 2012

Erro de configuração: "java.net.ConnectException: Connection refused"

Ás vezes um descuido ao editar um arquivo de configuração pode causar um transtorno enorme, principalmente quando o projeto está em fase de integração e com o cronograma apertado.

Como um exemplo prático, um sistema passou a não conseguir conectar mais com a base de dados de uma hora para outra, sem motivo aparente. A exceção era:

Exception in thread "main" org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.LockAcquisitionException: Cannot open connection
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:375)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:374)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:263)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:101)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy18.startBeh(Unknown Source)
at br.com.beh.Main.main(Main.java:58)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.LockAcquisitionException: Cannot open connection
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:41)
at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:70)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:52)
at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:330)
... 7 more
Caused by: org.hibernate.exception.LockAcquisitionException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:110)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)
at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:38)
... 10 more
Caused by: java.sql.SQLException: The Network Adapter could not establish the connection
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:133)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:199)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:480)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:413)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:508)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:203)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:33)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:510)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:154)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:174)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:165)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:149)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:119)
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:46)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
... 15 more
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:328)
at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:421)
at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:630)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:206)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:966)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:292)
... 27 more
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:127)
at oracle.net.nt.ConnOption.connect(ConnOption.java:126)
at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:306)
... 32 more

Depois de várias horas debugando, descobrimos que esse erro foi causado por um erro na edição do database.properties, na string de conexão com a base.

A propriedade estava assim:
database.url = jdbc:oracle:thin:<IP>:1521:BASEDEDADOS

Para uma mente apressada e estressada é fácil não perceber que faltou um arroba (@) antes do IP. O correto é:
database.url = jdbc:oracle:thin:@<IP>:1521:BASEDEDADOS


terça-feira, 28 de agosto de 2012

Como descobrir a PK de uma tabela no Oracle

Use a query abaixo para descobrir a Primary Key (PK) de uma tabela no Oracle:


SELECT 
  B.COLUMN_NAME 
FROM 
  ALL_CONSTRAINTS A, 
  ALL_CONS_COLUMNS B
WHERE 
  A.CONSTRAINT_NAME=B.CONSTRAINT_NAME AND 
  A.OWNER=B.OWNER AND
  A.TABLE_NAME='<TABLE_NAME>' AND 
  A.CONSTRAINT_TYPE='P';

segunda-feira, 27 de fevereiro de 2012

Como pesquisar no conteúdo de arquivos em Unix

É uma tarefa comum ter que encontrar um padrão específico dentro de um arquivo ou mesmo procurar um arquivo que tenha uma string específica.

O comando grep pode ser usado para essa tarefa.

Ex:
> grep test *
Procura a string "test" dentro de todos os arquivos do diretório corrente

> grep test */*
Procura a string "test" dentro de todos os arquivos de todos os sub-diretórios correntes

Na saída do grep ele mostra o arquivo e a linha onde encontrou o padrão.

Ele também pode ser concatenado com outros comandos. Por exemplo, para pesquisar todos os processos em execução no momento que tenham a string "test", use o comando abaixo:

> ps -ef | grep test

quarta-feira, 18 de janeiro de 2012

Lista completa das cem marcas mais valiosas em 2011


Lista das 100 marcas mais valiosas em 2011

RankPrevious RankBrandRegion/CountrySectorBrand Value ($m)Change in Brand Value
11United StatesBeverages71,8612%
22United StatesBusiness Services69,9058%
33United StatesComputer Software59,087-3%
44United StatesInternet Services55,31727%
55United StatesDiversified42,8080%
66United StatesRestaurants35,5936%
77United StatesElectronics35,21710%
817United StatesElectronics33,49258%
99United StatesMedia29,0181%
1010United StatesElectronics28,4796%
1111JapanAutomotive27,7646%
1212GermanyAutomotive27,4459%
1314United StatesBusiness Services25,3099%
148FinlandElectronics25,071-15%
1515GermanyAutomotive24,55410%
1613United StatesFMCG23,9973%
1719South KoreaElectronics23,43020%
1816FranceLuxury23,1726%
1920JapanAutomotive19,4315%
2022United StatesBusiness Services17,26216%
2121SwedenApparel16,4592%
2223United StatesBeverages14,5904%
2324United StatesFinancial Services14,5725%
2426GermanyBusiness Services14,54214%
2525United StatesSporting Goods14,5286%
2636United StatesInternet Services12,75832%
2731United StatesTransportation12,5366%
2829United StatesFinancial Services12,4371%
2930United StatesAlcohol12,2520%
3027SwitzerlandBeverages12,115-5%
3128SwedenHome Furnishings11,863-5%
3232United KingdomFinancial Services11,7922%
3333JapanElectronics11,7152%
3435United StatesFMCG11,3723%
3534JapanElectronics9,880-13%
3643United StatesInternet Services9,80516%
3739CanadaMedia9,5156%
3837United StatesFinancial Services9,091-3%
3944ItalyLuxury8,7635%
4045FranceFMCG8,6999%
4142NetherlandsElectronics8,6580%
4240United StatesFinancial Services8,620-3%
4341United StatesElectronics8,347-6%
4448SpainApparel8,0658%
4547United StatesBusiness Services8,0057%
4649GermanyDiversified7,9008%
4753GermanyAutomotive7,85714%
4838JapanElectronics7,731-14%
4946United StatesFMCG7,6091%
5050United StatesAutomotive7,4834%
5151United StatesFMCG7,1273%
5258FranceFMCG6,9369%
5356FranceFinancial Services6,6940%
5452United StatesFinancial Services6,634-4%
5557SwitzerlandFMCG6,6131%
5654CanadaElectronics6,424-5%
5759United StatesElectronics6,4145%
5855United StatesMedia6,383-5%
5963GermanyAutomotive6,17113%
6062GermanySporting Goods6,15412%
6165South KoreaAutomotive6,00519%
6260United StatesRestaurants5,9021%
6361United StatesBeverages5,604-3%
6470United StatesDiversified5,59819%
6564United StatesFMCG5,3766%
6669FranceLuxury5,35612%
6767GermanyFinancial Services5,3459%
6868SpainFinancial Services5,0885%
6973JapanElectronics5,04716%
7077FranceLuxury4,78118%
7171United StatesFMCG4,6723%
7272GermanyAutomotive4,5804%
7376United StatesLuxury4,4989%
7481NetherlandsEnergy4,48312%
7582United StatesFinancial Services4,47812%
7666United StatesInternet Services4,413-11%
7779FranceAlcohol4,3839%
7878United StatesAlcohol4,3197%
7974United KingdomFinancial Services4,2591%
8088United StatesComputer Software4,17015%
8183United StatesRestaurants4,0923%
8280SwitzerlandFinancial Services4,0902%
8375United StatesFMCG4,072-2%
8484United StatesApparel4,0402%
8590United StatesDiversified3,94510%
8685MexicoAlcohol3,9242%
8787GermanyFMCG3,8834%
8892United KingdomAlcohol3,8428%
8989United KingdomAlcohol3,8416%
90NEWJapanAutomotive3,819N/A
9193NetherlandsAlcohol3,8098%
9286SwitzerlandFinancial Services3,7990%
9395ItalyLuxury3,79410%
9494SwitzerlandFinancial Services3,7698%
95100United KingdomLuxury3,73220%
9697United StatesRestaurants3,66310%
97NEWUnited StatesDiversified3,651N/A
98NEWTaiwanElectronics3,605N/A
9991ItalyAutomotive3,5911%
10098United StatesAutomotive3,5127%