У меня есть унаследованное Java-приложение, созданное для работы в среде Websphere 7.0.Мы уходим от Websphere к Glassfish.Первоначальный разработчик этого кода не существует, и, как ожидается, нет документации.
Большинство преобразований просты.Однако код EJB 2.1 проблематичен;Сами определения bean-компонентов хороши, но есть много вспомогательного кода, который очень и очень тесно связан с библиотеками IBM Websphere и, похоже, не сможет выполнить преобразование без полного переписывания.
Пример:
/**
* MyBeanAdaptorBinding_ebb6f53f
*/
public class MyBeanAdaptorBinding_ebb6f53f implements com.ibm.ws.ejbpersistence.beanextensions.EJBAdapterBinding {
/**
* getExtractor
*/
public com.ibm.ws.ejbpersistence.dataaccess.EJBExtractor getExtractor() {
// extractor for mypackage.entity.websphere_deploy.ORACLE_V11_1.MyBeanExtractor_ebb6f53f
com.ibm.ws.ejbpersistence.dataaccess.AbstractEJBExtractor extractor = new mypackage.entity.websphere_deploy.ORACLE_V11_1.MyBeanExtractor_ebb6f53f();
extractor.setPrimaryKeyColumns(new int[] {1});
extractor.setDataColumns(new int[] {1,2});
return extractor;
}
/**
* getInjector
*/
public com.ibm.ws.ejbpersistence.beanextensions.EJBInjector getInjector() {
return new mypackage.entity.websphere_deploy.ORACLE_V11_1.MyBeanInjectorImpl_ebb6f53f();
}
/**
* getAdapter
*/
public com.ibm.websphere.ejbpersistence.EJBToRAAdapter getAdapter() {
return com.ibm.ws.rsadapter.cci.WSRelationalRAAdapter.createAdapter();
}
/**
* getMetadata
*/
public Object[] getMetadata() {
java.lang.String[] primarykey, subhomes, composedObjs, composedObjImpls;
com.ibm.ObjectQuery.metadata.OSQLExternalCatalogEntry[] cat;
com.ibm.ObjectQuery.metadata.OSQLExternalColumnDef[] fields;
cat = new com.ibm.ObjectQuery.metadata.OSQLExternalCatalogEntry[5];
//-------------------------------------Alias-------------------------------------
cat[0] = new com.ibm.ObjectQuery.metadata.OSQLExternalCatalogRDBAlias("My", "My1_Alias", "ORACLE", "MYSCHEMA.My", "My_My1_Table", 11, 0, 0);
//-----------------------------------Table Type-----------------------------------
fields = new com.ibm.ObjectQuery.metadata.OSQLExternalColumnDef[2];
fields[0] = new com.ibm.ObjectQuery.metadata.OSQLExternalColumnDef("MyID", new String(), com.ibm.ObjectQuery.engine.OSQLConstants.NOT_APPLICABLE, new String(), com.ibm.ObjectQuery.engine.OSQLConstants.NOT_APPLICABLE, true, com.ibm.ObjectQuery.engine.OSQLSymbols._CHARACTER, 250, com.ibm.ObjectQuery.engine.OSQLConstants.NO_TYPE, true, 0, -1, 0, false);
fields[1] = new com.ibm.ObjectQuery.metadata.OSQLExternalColumnDef("MyNM", new String(), com.ibm.ObjectQuery.engine.OSQLConstants.NOT_APPLICABLE, new String(), com.ibm.ObjectQuery.engine.OSQLConstants.NOT_APPLICABLE, true, com.ibm.ObjectQuery.engine.OSQLSymbols._CHARACTER, 250, com.ibm.ObjectQuery.engine.OSQLConstants.NO_TYPE, false, 0, -1, 0, false);
primarykey = new String[1];
primarykey[0] = "MyID";
cat[1] = new com.ibm.ObjectQuery.metadata.OSQLExternalCatalogType("My", "My1_Table", null, fields, primarykey);
//-----------------------------------Bean Type-----------------------------------
fields = new com.ibm.ObjectQuery.metadata.OSQLExternalColumnDef[2];
fields[0] = new com.ibm.ObjectQuery.metadata.OSQLExternalColumnDef("MyId", new String(), com.ibm.ObjectQuery.engine.OSQLConstants.NOT_APPLICABLE, new String(), com.ibm.ObjectQuery.engine.OSQLConstants.NOT_APPLICABLE, true, com.ibm.ObjectQuery.engine.OSQLSymbols._CHARACTER, 0, com.ibm.ObjectQuery.engine.OSQLConstants.NO_TYPE, false, 0, -1, 0, false);
fields[1] = new com.ibm.ObjectQuery.metadata.OSQLExternalColumnDef("MyNm", new String(), com.ibm.ObjectQuery.engine.OSQLConstants.NOT_APPLICABLE, new String(), com.ibm.ObjectQuery.engine.OSQLConstants.NOT_APPLICABLE, true, com.ibm.ObjectQuery.engine.OSQLSymbols._CHARACTER, 0, com.ibm.ObjectQuery.engine.OSQLConstants.NO_TYPE, false, 0, -1, 0, false);
primarykey = new String[1];
primarykey[0] = "MyId";
cat[2] = new com.ibm.ObjectQuery.metadata.OSQLExternalCatalogType("My", "My_BO", "mypackage.entity.MyBean", fields, primarykey);
//--------------------------------------View--------------------------------------
composedObjs = null;
composedObjImpls = null;
subhomes = null;
cat[3] = new com.ibm.ObjectQuery.metadata.OSQLExternalCatalogView("My", "My_My_BO", "My_My1_Alias", composedObjs, composedObjImpls,
"select t1.MyID,t1.MyNM from _this t1",
null, subhomes,
0, null);
cat[4] = new com.ibm.ObjectQuery.metadata.OSQLExternalSysApplOptions(14, false);
return cat;
}
/**
* createDataAccessSpecs
*/
public java.util.Collection createDataAccessSpecs() throws javax.resource.ResourceException {
<snipped long implementation of find/create/delete logic using com.ibm.ws.* classes>
}
/**
* getProperties
*/
public java.util.HashMap getProperties() {
properties.put("USING_DB_AUTO_OCC_COLLISION_DETECTION", Boolean.FALSE);
properties.put("NEED_REFRESH_AFTER_PERSISTENCE", Boolean.FALSE);
return properties;
}
/**
* MyBeanAdaptorBinding_ebb6f53f
*/
public MyBeanAdaptorBinding_ebb6f53f() {
properties = new java.util.HashMap();
properties.put("VERSION", "7.0.0.0");
}
private java.util.HashMap properties;
}
Этот код (и большая часть остального) кажется автоматически сгенерированным: суффикс _ebb6f53f, полностью определенные имена классов и т. Д. Кроме того, это также MyBeanCacheEntry_ebb6f53f, MyBeanExtractor_ebb6f53f, MyBeanFunction6BeBeBeBeBeBeInBeject_Beet_Beject_Setплюс соответствующие реализации для тех, которые являются интерфейсами).Набор вспомогательных классов каждого компонента имеет свой суффикс шестнадцатеричной строки.
Соответствующий раздел файла ejb-jar.xml:
<entity id="My">
<ejb-name>My</ejb-name>
<local-home>mypackage.entity.MyLocalHome</local-home>
<local>mypackage.entity.MyLocal</local>
<ejb-class>mypackage.entity.MyBean</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.String</prim-key-class>
<reentrant>false</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>My</abstract-schema-name>
<cmp-field id="CMPAttribute_1133536288497">
<field-name>MyId</field-name>
</cmp-field>
<cmp-field id="CMPAttribute_1133536292665">
<field-name>MyNm</field-name>
</cmp-field>
<primkey-field>MyId</primkey-field>
</entity>
Идентификаторы поля cmp взяты из OracleФайл Map.mapxmi.Ни ejb-jar.xml, ни Map.mapxmi, кажется, не связаны с Websphere, поэтому я не верю, что они требуют модификации, но если бы они сделали , я бы предположил, что они также автоматически генерируются.
Этоэто не мавен или муравей проект;процедура сборки выполняется непосредственно через Eclipse и не изменяет / автоматически генерирует код как часть сборки;он просто компилирует JAR, а затем упаковывает WAR и EAR.
Я не очень разбираюсь в EJB или Websphere.За последние несколько дней я много занимался поиском и чтением, но не смог удовлетворительно ответить на следующие вопросы:
- Как создавался этот код (инструмент Eclipse или Rational Application Developer, конкретная Websphere)инструмент и т. д.)?
- Как могли бы быть созданы файлы ejb-jar.xml и Map.mapxmi?
- Можно ли выполнить регенерацию для Glassfish без зависимостей com.ibm. *(желательно только с javax. * зависимостями)?
- Требуется ли этот тип кода даже для развертывания без Websphere?