工作2年了,一直用的是C/S进行开发,近来公司要转向B/S开发,不得不学习J2EE架构了,听前辈的讲述,学J2EE是很难学的,一般3个月能入门就已经不错了,根据我现在学习的进程前辈的话是很正确的,J2EE学的东西非常的多,什么Struts,Spring,EJB,Hibernate等等,我看一样东西多要一月半月的,公司也不出钱让我们去哪里培训一下,但也没办法,谁叫我们是劳动者啊,没得培训只能靠自己学了,不然的话可就要失业了。
学习J2EE也快2个月了,有点明白,但还是雾水的多,先前一直以为B/S也就是网页加服务器嘛,现在才认识到这样的理解太粗熟了,少说也要是三层结构啊,网页加服务器对于一些小的项目还是比较好的,开发快速,但对于大项目数据量一大,需求一多,以后就不好维护了,所以还是要分层的。八挂了这么多,转入正题。
先看一下一些用到的软件配置:
JDK:1.5.0_06
开发工具:Eclipse3.1.0(
www.eclipse.org)
插件:emf-sdo-runtime-2.1.1+ lomboz-3.1.0(
http://download.forge.objectweb.org/lomboz/)
JAVA
环境变量设置
JAVA_HOME=D:/JDK1.5.0
PATH=%PATH%;%JAVA_HOME%/bin
CLASSPATH=,;%JAVA_HOME%/lib/dt.jar; %JAVA_HOME%/lib/tools.jar
Eclipse
插件安装
两种方法
1、 直接将插件复制到plugins目录下即可
2、 使用Links方法
1) 在Eclipse的安装目录下建2个文件夹:一个用来存放插件,取名为Myplugins;另一个用来存放link取名为links。
2) 以Lomboz为例,将下载的zip包解压到myplugins下,解压路径为:d:/eclipse/myplugins/lomboz。(注:lomboz目录必须包含一个/eclipse目录,因eclipse会到指定的目录下查找eclipse/features和eclipse/plugins目录)
3) 在links目录中建一个link文件,可取名为Lomboz.link,在文件中添加如下内容:
Path=f:/eclipse/myplugins/lomboz(也可以使用相对路径:Path= /myplugins/lomboz)
Lomboz
注意的问题
1、 版本一定要跟eclipse的版本对应,否则不能使用
2、 Lomboz3.1.0好像不支持JSP编辑(不知道是什么原因,就是用不起来)
3、 配置
选择窗口->定制透视图将Lomboz显示出来
首选项->Lomboz中选择正确JRE的tools.jar
4、 在new-other-lomboz EJB Creation Wizard时,报“TypeName is not valid. Type parameters are only available if source level is 5.0.”错误,无法点击“Next”按纽
解决方法:修改eclipse-->preference-->java-->compiler-->JDK compliance 中的compiler compliance level 1.4-->5.0就可以了,但改在5.0后,必须在JRE5.0上运行,否则会报can’t find Main Class
JBOSS4.0.4
服务器配置
JBOSS4.0.4不在Lomboz的默认服务器之列,所以要新建一个配置信息,然后将这些配置放在Lomboz目录下的” com.objectlearn.jdt.j2ee_3.0.1->server”的文件夹下,
jboss404.server内容如下:
<serverDefinition
name="JBOSS 4.0.4"
ejbModules="true"
webModules="true"
earModules="true">
<property id="serverRootDirectory"
label="Application Server Directory:"
type="directory"
default="E:/JavaTool/jboss-4.0.4" />
<property id="serverAddress"
label="Address:"
type="string"
default="127.0.0.1" />
<property id="serverPort"
label="Port:"
type="string"
default="8080" />
<property id="serverConfig"
label="Server Configuration (minimal/default/all):"
type="string"
default="default" />
<property id="classPathVariableName"
label="Classpath Variable Name:"
type="string"
default="JBOSS404" />
<property id="classPath"
label="Classpath Variable:"
type="directory"
default="E:/JavaTool/jboss-4.0.4" />
<serverHome>${serverRootDirectory}</serverHome>
<webModulesDeployDirectory>${serverRootDirectory}/server/${serverConfig}/deploy</webModulesDeployDirectory>
<ejbModulesDeployDirectory>${serverRootDirectory}/server/${serverConfig}/deploy</ejbModulesDeployDirectory>
<earModulesDeployDirectory>${serverRootDirectory}/server/${serverConfig}/deploy</earModulesDeployDirectory>
<jndiInitialContextFactory>org.jnp.interfaces.NamingContextFactory</jndiInitialContextFactory>
<jndiProviderUrl>jnp://${serverAddress}:1099</jndiProviderUrl>
<startClass>org.jboss.Main</startClass>
<startWorkingDirectory>${serverRootDirectory}/bin</startWorkingDirectory>
<startVmParameters>-Dprogram.name=run.bat -Djava.endorsed.dirs=${serverRootDirectory}/lib/endorsed</startVmParameters>
<startProgramArguments>-c ${serverConfig}</startProgramArguments>
<stopClass>org.jboss.Shutdown</stopClass>
<stopWorkingDirectory>${serverRootDirectory}/bin</stopWorkingDirectory>
<stopVmParameters>-cp ${ClassPathVariableName}/bin/shutdown.jar -Djboss.boot.loader.name=shutdown.bat</stopVmParameters>
<stopProgramArguments>-S</stopProgramArguments>
<serverClassPath>
<jar type="variable">JDK_TOOLS</jar>
<jar type="variable">${classPathVariableName}/bin/run.jar</jar>
</serverClassPath>
<clientClassPath>
<jar type="variable">${classPathVariableName}/client/jboss-j2ee.jar</jar>
<jar type="variable">${classPathVariableName}/client/jnp-client.jar</jar>
<jar type="variable">${classPathVariableName}/client/jbossall-client.jar</jar>
<jar type="variable">${classPathVariableName}/client/jboss-common-client.jar</jar>
<jar type="variable">${classPathVariableName}/client/jbosssx-client.jar</jar>
<jar type="variable">${classPathVariableName}/client/log4j.jar</jar>
<jar type="variable">${classPathVariableName}/server/default/lib/jnpserver.jar</jar>
</clientClassPath>
<projectClassPath>
<jar type="variable">JDK_TOOLS</jar>
<jar type="variable">${classPathVariableName}/bin/run.jar</jar>
<jar type="variable">${classPathVariableName}/bin/shutdown.jar</jar>
<jar type="variable">${classPathVariableName}/client/jboss-j2ee.jar</jar>
<jar type="variable">${classPathVariableName}/server/${serverConfig}/lib/javax.servlet.jar</jar>
<jar type="variable">${classPathVariableName}/lib/jboss-system.jar</jar>
<jar type="variable">${classPathVariableName}/lib/concurrent.jar</jar>
<jar type="variable">${classPathVariableName}/server/${serverConfig}/lib/jboss.jar</jar>
<jar type="variable">${classPathVariableName}/server/${serverConfig}/lib/jnpserver.jar</jar>
<jar type="variable">${classPathVariableName}/server/${serverConfig}/lib/jpl-pattern.jar</jar>
<jar type="variable">${classPathVariableName}/server/${serverConfig}/lib/jpl-util.jar</jar>
<jar type="variable">${classPathVariableName}/server/${serverConfig}/lib/jboss-transaction.jar</jar>
<jar type="variable">${classPathVariableName}/server/${serverConfig}/lib/bcel.jar</jar>
</projectClassPath>
<adminTool>
<web><deploy /><undeploy />
</web>
<ejb><deploy /><undeploy />
</ejb>
<ear><deploy /><undeploy />
<webModule><deploy /><undeploy />
</webModule>
<ejbModule><deploy /><undeploy />
</ejbModule>
</ear>
</adminTool>
<adminToolPath>
</adminToolPath>
</serverDefinition>
出现的问题
错误一
启动时出现以下错误:
!ENTRY org.eclipse.osgi 2006-08-08 22:31:37.371
!MESSAGE Startup error
!STACK 1
java.lang.IllegalStateException: Bundle initial@reference:file:plugins/org.eclipse.update.configurator_3.1.0.jar/ [2] is not active.
at org.eclipse.core.runtime.adaptor.EclipseStarter.ensureBundlesActive(EclipseStarter.java:410)
at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:297)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:159)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334)
at org.eclipse.core.launcher.Main.basicRun(Main.java:278)
at org.eclipse.core.launcher.Main.run(Main.java:973)
at org.eclipse.core.launcher.Main.main(Main.java:948)
原因:可能有多个JRE产生的,Eclipse不能识别多个
解决方法:重新安装JDK
错误二
JDK
版本问题
12:39:06,709 WARN [verifier] EJB spec violation:
Bean : Datawork
Section: 22.2
Warning: The Bean Provider must specify the fully-qualified name of the Java class that implements the enterprise bean's business methods in the <ejb-class> element.
Info : Class not found on 'gis.gx.data.DataworkSession': Unexpected error during load of: gis.gx.data.DataworkSession, msg=gis/gx/data/DataworkSession (Unsupported major.minor version 49.0)
12:39:06,709 ERROR [MainDeployer] Could not create deployment: file:/E:/JavaTool/jboss-4.0.4/server/default/deploy/gisbean.jar
org.jboss.deployment.DeploymentException: Verification of Enterprise Beans failed, see above for error messages.
很奇怪的问题,在
Eclipse
中能运行
JBOSS
服务器,但直接用
JBOSS
启动却产生以上错误,后来看到
JBOSS
中的
JDK
为:
Java VM: Java HotSpot(TM) Client VM 1.4.1_02-b06,Sun Microsystems Inc.
而在
Eclipse
中却为:
Java VM: Java HotSpot(TM) Client VM 1.5.0_06-b05 ,Sun Microsystems Inc.
问题找到,修改环境变量里的
JAVA_HOME
设为指向
1.5
的,重启
JBOSS
,成功
错误三
布署后的问题
新建的
EJB
要访问数据库,用到
classes12.jar
文件,但打包的时候没有将这个文件打包进去,运行的时候总报以下错误:
java.lang.ClassNotFoundException
: No ClassLoaders found for: oracle.jdbc.driver.OracleDriver
将
classes12.jar
所在的目录加
在
CLASSPATH
里,还是同样报错
直接复制到
JBOSS
中的
server/default/deploy
,运行问题解决,发现再建一个目录
Mylib
将额外的文件放到这里
错误四 Lomboz
生成问题
23:12:31,283 WARN [verifier] EJB spec violation:
Bean : Test
Section: 7.10.3
Warning: A Session bean must define at least one ejbCreate method.
23:12:31,293 ERROR [MainDeployer] Could not create deployment: file:/E:/JavaTool/jboss-4.0.4/server/default/deploy/mybean.jar
org.jboss.deployment.DeploymentException: Verification of Enterprise Beans failed, see above for error messages.
。。。。。。
配置:
Eclipse3.1.0+JBOSS4.0.4GA+Lomboz3.1.0+Eclipse
编程技术与实例
(
叶达峰
)
现象:完全按照书上的做,使用lomboz,生成的JAR,运行JBOSS就报以上的错误,在网上找了好久就是没找到是什么原因,郁闷到了极点,初学J2EE就遇到如此的问题,幼小的心灵受到了严重的打击。
分析:开始以为是JBOSS的问题,就下载不同的版本来试,一直从4.0.4到3.2.7,还是不行,真想逛扁这本书的作者,写出来的东西不能用,搞什么啊。后来找出该书的配套光盘源代码用jar打包,放到JBOSS后,竟然能起来,对比源代码,多一样的啊,怎么我写的这个就不行,最后发现源代码多了一大串注释,一看注释跟配置有关,马上加上,运行,还真起来,真不明白,这段注释会有这么大的作用,竟然在这注释上搞了我一个多星期,作者怎么搞得这多不说清楚,郁闷。
2006-8-17
/**
*
* <!-- begin-user-doc --> A generated session bean <!-- end-user-doc --> *
<!-- lomboz.beginDefinition -->
<?xml version="1.0" encoding="UTF-8"?>
<lomboz:EJB xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:lomboz="http://lomboz.objectlearn.com/xml/lomboz">
<lomboz:session>
<lomboz:sessionEjb>
<j2ee:display-name>Test</j2ee:display-name>
<j2ee:ejb-name>Test</j2ee:ejb-name>
<j2ee:ejb-class>com.test.ejb.TestBean</j2ee:ejb-class>
<j2ee:session-type>Stateless</j2ee:session-type>
<j2ee:transaction-type>Container</j2ee:transaction-type>
</lomboz:sessionEjb>
</lomboz:session>
</lomboz:EJB>
<!-- lomboz.endDefinition -->
*
* <!-- begin-xdoclet-definition -->
* @ejb.bean name="Test"
* jndi-name="Test"
* type="Stateless"
* transaction-type="Container"
*
*--
* This is needed for JOnAS.
* If you are not using JOnAS you can safely remove the tags below.
* @jonas.bean ejb-name="Test"
* jndi-name="Test"
*
*--
* <!-- end-xdoclet-definition -->
* @generated
*/
错误五 XML
解析问题
将以前JB做的Aplication移到eclipse下出现下面的错误信息:
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAX
ParserFactoryImpl could not be instantiated: java.lang.NullPointerException
ParserFactoryImpl could not be instantiated: java.lang.NullPointerException
网上找到答案:还需要把xercesImpl.jar复制到D:/jdk1.5.0_01/jre/lib/endorsed下面(没有这个目录就创建这个目录)
但加了
xercesImpl.jar
后启动eclipse又出现以下错误:
最后解决方法:将
xercesImpl.jar
加入到下图中,OK
结束语
平生不大会写文章,第一次写自己的BLOG,感觉很好,自己记录的东西就是不一样,以后我会多写这样的文章,也希望对大家能有帮助。