一周前,老师让我们用Java去做项目,说句实话,我对Java真的是一知半解,绝对是个门外汉,无奈,老师的任务不能不完成,只好硬着头皮去做。
我们有一个项目叫“数据仓库”,以前是师兄们做的,采用的是Tomcat做服务器,JSP+JavaBean做开发。后来老师为了“提高项目的技术含量”,决定改做J2EE版本,我们这里几乎没有人用J2EE做过项目,于是大家就开始到处找资料,下载编译器,忙得不亦乐乎。
最终,大家决定使用Oracle9i作数据库,Weblogic7+JBuilder7作开发环境,原因很简单Weblogic对J2EE支持的比较好,JBuilder开发环境还不错,对机器要求不是太高(我们的机子比较差,P3-550+256M内存,刚好满足最低要求:),本来以为很简单的配置,很容易就会搞定,但是结果却让人大吃一惊。
按照培训资料上面说的,一步步装好了Weblogic7,测试console,通过,然后再按照说明把JBuilder7也装上,并按照顺序配置好了,大致流程如下:
Weblogic和JBuilder7整合后,经过配置,做出的Session Bean是好的,说明配置正确。
然后测试实体Bean:
1、设置Oracle9i的驱动:
在JBuilder7中,Tools-->Enterprise Setup...-->Database Driver,点击Add,选择Oracle的位置D:\Oracle\Ora91\jdbc\lib\classes12.zip,确定后,驱动在列表中出现,然后重新启动JBuilder
2、创建工程Demo,然后创建一个EJB Module 取名Hustli,然后导入数据库Schema信息。
3、输入数据库的连接信息:我采用的是别人的机器上的oracle9,机器名是flyers,SID=daito,具体信息如下:
Driver: oracle.jdbc.driver.OracleDriver
URL: jdbc:oracle:thin:@flyers:1521:daito
user=daito password=daito
JNDI NAME : DataSource
4、成功后,创建CMP EJB,输入EJB信息,其中interface采用的是remote
5、配置Weblogic中JDBC Pool和Data Source:
JDBC Pool:
Name: Pool
URL: jdbc:oracle:thin:@flyers:1521:daito
Properties: user=daito
Password: daito
Initial Capacity: 5
Maximum Capacity:10
Test Table Name: hustli(我建的一个表)
在Targets里面加入myserver,其余采用默认配置。
Data Source:
Name: DataSource
JNDI Name:DataSource
Pool Name:Pool
在Targets里面加入myserver,其余采用默认配置
然后重新启动weblogic的设置页面,成功
6、对EJB打包,deploy成功。
7、利用JBuilder7自动生成测试程序,改动main函数如下:
public static void main(String[] args)
{
try
{
Client client = new Client();
HustliRemoteHome home=client.getHome();
HustliRemote r=home.findByPrimaryKey("jjli");
System.out.println(r.getAge());
}
catch (RemoteException ex)
{
ex.printStackTrace();
}
catch(FinderException e)
{
e.printStackTrace();
}
}
结果出现错误,在Object ref = ctx.lookup("HustliRemote");(自动生成的)
错误如下:
javax.naming.NameNotFoundException: Unable to resolve 'HustliRemote' Resolved: '' Unresolved:'HustliRemote' ; remaining name 'HustliRemote'
后来这个问题也在各位师兄的机器上出现,毫无例外。
对于这个问题,大家讨论了半天也没有解决,于是各自分头散去,大家静下心来,把各种信息自信的研究了,发现有一个共同点:在程序编译的时候,有一个警告,大家开始没有注意,后来就都注意到这个问题了,警告大致的意思是:临时文件目录有空格,可能导致致命的错误。
但是我们发现系统的环境变量里面的确有2各设置:TEMP和TMP,但是在用户变量里面一个、系统变量里面一个,按照我的观点,编译器应该先搜索系统变量里面的,系统变量里面的值是C:\WINNT\TEMP,这应该没有什么问题,于是我们在C盘建了一个目录,名字叫Temp,并且把用户变量里面的TEMP和TMP的值都设置为C:\Temp,然后保存,启动JBuilder7,一切OK!
这个问题,看来是不是很BT?我很奇怪为什么JBuider会先找用户变量?
如果上面的问题不叫问题,那是我们没有注意警告,下面的问题就太让人郁闷了。
Weblogic+JBuilder装好了之后,运行了2天,然后为了杀毒,我又装上了几个杀毒软件,开始全盘扫描硬盘,使用LoveGate居然杀到了几个病毒,然后把感染的文件全部删除,重新启动机器,然后做了点别的事情,就把这件事情给忘掉了,等到明天启动JBuilder,不幸的事情发生了,deploy组件的时候,发现报错:无法连接t3:/localhost:7001。
这岂不是怪事?我的服务器明明开着的,一点异常的表现都没有,然后我关掉JBuilder,用Weblogic控制台打开服务器,运行良好,结果当在地址栏里输入:http://localhost:7001时,居然找不到连接。
开始我怀疑是weblogic出了问题,然后卸载了weblogic重新安装,问题依旧,最后把weblogic和JBuilder一起卸掉,重新装,问题依然顽固的出现在我面前,究竟是怎么了?难道是杀毒的时候把重要的文件删除了?没有办法,只好重新格式化硬盘,重新装了系统,首先把weblogic装上,运行良好,装上JBuilder,配置完毕,一切都没有任何问题,然后把一系列的软件装上,自然也装了杀毒的KV3000,然后运行JBuilder,那个奇怪的问题又出现了!!!!
为了解决问题,我决定把安装的软件一个个的卸载,最后发现,如果卸载了KV3000,JBuilder就没有任何问题,否则,只要打开实时监测,就无法运行JBuilder7。
没有办法,只好把KV3000卸载。个人怀疑是不是KV3000对Java的运行进行监视,然后当作病毒杀掉,当然这只是猜测,如果有那位高手能够指点一二,不胜感激。