WebLogic除了提供标准的Java EE的接口外,还在此基础上实现了一些私有的功能,从开发者的角度来看,WebLogic提供些一些私有的API,私有的配置文件和私有的配置项。相关内容需在TomEE上修改。
针对私有的API,通过分析,我们发现其包名都是以com.bea、com.oracle、commonj、oracle、weblogic开头。在移植过程中,可通过正则表达式方式判断源码是否有调用相关接口(“import [com\.bea|com\.oracle|common|oracle|weblogic]”)。
如果有使用私有的API,需要开发者对采用相关私有API的代码功能进行分析,建议使用标准的API进行替换,实现相同功能。
除了标准的配置文件外,WebLogic也存在一些私有的配置文件,这类私有的配置文件一般是以weblogic开头的,如weblogic.xml,weblogic-application.xml等。可以通过全局搜索是否存在相关的配置文件查看。
WebLogic的私有配置文件一般是用来支持其私有API的,因此,若使用到了WebLogic私有API,则对应的WebLogic私有配置文件需要具体深入分析,结合替换私有API的工作一起进行。若没有使用WebLogic私有API,则一般没有私有的WebLogic配置文件。
同一个配置文件在WebLogic和TomEE上配置项内容可能不同,主要可能的不同点在于各个使用的Java EE组件上的配置或者是cluster上的配置,如:JPA持久化相关的meta-inf/persistence.xml。
配置项为WebLogic私有配置项的原因是有些配置需要指定实现类,比如JPA功能有哪一个class来实现、JDBC使用什么驱动。配置项需要仔细排查是否使用WebLogic私有配置(一个取巧判断方法是确认配置项是否包含weblogic、bea、oracle相关字符串)。
TomEE官网对WebLogic特定配置项的修改提供了一些的示例,如确认有WebLogic特定配置项,可参看TomEE官网进行修改(http://tomee.apache.org/latest/examples/)。
下面本文以创建对应数据库,指定正确的JDBC数据源,进行相关配置为例,展现修改私有配置项的过程。
<persistence-unit name="annotationServlet" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <class>examples.webapp.servlets.annotations.Visitor</class> <properties> <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/examples;create=true"/> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/> <property name="javax.persistence.jdbc.user" value="examples"/> <property name="javax.persistence.jdbc.password" value="examples"/> <property name="eclipselink.ddl-generation" value="create-tables"/> </properties> </persistence-unit>
<persistence-unit name="annotationServlet" transaction-type="RESOURCE_LOCAL"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <non-jta-data-source>MySQL_Database</non-jta-data-source> <class>examples.webapp.servlets.annotations.Visitor</class> <properties> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> </properties> </persistence-unit>
<Resource id="MySQL_Database" type="DataSource"> JdbcDriver=com.mysql.jdbc.Driver JdbcUrl=jdbc:mysql://localhost:3306/example UserName=root password=admin JtaManaged=false </Resource>